forked from External/mediamtx
83 lines
2.1 KiB
Go
83 lines
2.1 KiB
Go
package hooks
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"github.com/bluenviron/mediamtx/internal/conf"
|
|
"github.com/bluenviron/mediamtx/internal/defs"
|
|
"github.com/bluenviron/mediamtx/internal/externalcmd"
|
|
"github.com/bluenviron/mediamtx/internal/logger"
|
|
"net/http"
|
|
)
|
|
|
|
// OnReadyParams are the parameters of OnReady.
|
|
type OnReadyParams struct {
|
|
Logger logger.Writer
|
|
ExternalCmdPool *externalcmd.Pool
|
|
Conf *conf.Path
|
|
ExternalCmdEnv externalcmd.Environment
|
|
Desc defs.APIPathSourceOrReader
|
|
Query string
|
|
}
|
|
|
|
// OnReady is the OnReady hook.
|
|
func OnReady(params OnReadyParams) func() {
|
|
var env externalcmd.Environment
|
|
var onReadyCmd *externalcmd.Cmd
|
|
|
|
if params.Conf.RunOnReady != "" || params.Conf.RunOnNotReady != "" {
|
|
env = params.ExternalCmdEnv
|
|
env["MTX_QUERY"] = params.Query
|
|
env["MTX_SOURCE_TYPE"] = params.Desc.Type
|
|
env["MTX_SOURCE_ID"] = params.Desc.ID
|
|
}
|
|
|
|
if params.Conf.RunOnReady != "" {
|
|
params.Logger.Log(logger.Info, "runOnReady command started")
|
|
onReadyCmd = externalcmd.NewCmd(
|
|
params.ExternalCmdPool,
|
|
params.Conf.RunOnReady,
|
|
params.Conf.RunOnReadyRestart,
|
|
env,
|
|
func(err error) {
|
|
params.Logger.Log(logger.Info, "runOnReady command exited: %v", err)
|
|
})
|
|
}
|
|
|
|
if params.Conf.HTTPOnReady != "" {
|
|
obj := map[string]any{
|
|
"query": params.Query,
|
|
"desc": params.Desc,
|
|
"env": params.ExternalCmdEnv,
|
|
}
|
|
jsonValue, _ := json.Marshal(obj)
|
|
http.Post(params.Conf.HTTPOnReady, "application/json", bytes.NewBuffer(jsonValue))
|
|
}
|
|
|
|
return func() {
|
|
if onReadyCmd != nil {
|
|
onReadyCmd.Close()
|
|
params.Logger.Log(logger.Info, "runOnReady command stopped")
|
|
}
|
|
|
|
if params.Conf.RunOnNotReady != "" {
|
|
params.Logger.Log(logger.Info, "runOnNotReady command launched")
|
|
externalcmd.NewCmd(
|
|
params.ExternalCmdPool,
|
|
params.Conf.RunOnNotReady,
|
|
false,
|
|
env,
|
|
nil)
|
|
}
|
|
if params.Conf.HTTPOnNotReady != "" {
|
|
obj := map[string]any{
|
|
"query": params.Query,
|
|
"desc": params.Desc,
|
|
"env": params.ExternalCmdEnv,
|
|
}
|
|
jsonValue, _ := json.Marshal(obj)
|
|
http.Post(params.Conf.HTTPOnNotReady, "application/json", bytes.NewBuffer(jsonValue))
|
|
}
|
|
|
|
}
|
|
}
|