1
0
Fork 0
forked from External/mediamtx
mediamtx/internal/hooks/on_ready.go
2024-07-24 16:52:58 -07:00

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))
}
}
}