mirror of
https://github.com/kerberos-io/agent.git
synced 2026-08-23 15:08:32 +00:00
improve logging + updated readme
This commit is contained in:
@@ -195,6 +195,7 @@ Next to attaching the configuration file, it is also possible to override the co
|
||||
| Name | Description | Default Value |
|
||||
| --------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------ |
|
||||
| `LOG_LEVEL` | Level for logging, could be "info", "warning", "debug", "error" or "fatal". | "info" |
|
||||
| `LOG_OUTPUT` | Logging output format "json" or "text". | "text" |
|
||||
| `AGENT_MODE` | You can choose to run this in 'release' for production, and or 'demo' for showcasing. | "release" |
|
||||
| `AGENT_TLS_INSECURE` | Specify if you want to use `InsecureSkipVerify` for the internal HTTP client. | "false" |
|
||||
| `AGENT_USERNAME` | The username used to authenticate against the Kerberos Agent login page. | "root" |
|
||||
|
||||
@@ -69,17 +69,18 @@ func main() {
|
||||
flag.StringVar(&timeout, "timeout", "2000", "Number of milliseconds to wait for the ONVIF discovery to complete")
|
||||
flag.Parse()
|
||||
|
||||
timezone, _ := time.LoadLocation("CET")
|
||||
|
||||
// Specify the level of loggin: "info", "warning", "debug", "error" or "fatal."
|
||||
logLevel := os.Getenv("LOG_LEVEL")
|
||||
if logLevel == "" {
|
||||
logLevel = "info"
|
||||
}
|
||||
// Specify the output formatter of the log: "text" or "json".
|
||||
logOutput := os.Getenv("LOG_OUTPUT")
|
||||
if logOutput == "" {
|
||||
logOutput = "text"
|
||||
}
|
||||
// Specify the timezone of the log: "UTC" or "Local".
|
||||
timezone, _ := time.LoadLocation("CET")
|
||||
log.Log.Init(logLevel, logOutput, configDirectory, timezone)
|
||||
|
||||
switch action {
|
||||
|
||||
@@ -731,25 +731,19 @@ func ContinuousZoom(device *onvif.Device, configuration ptz.GetConfigurationsRes
|
||||
resp.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
log.Log.Error("ContinuousPanTiltZoom: " + err.Error())
|
||||
log.Log.Error("onvif.main.ContinuousZoom(): " + err.Error())
|
||||
}
|
||||
|
||||
log.Log.Debug("ContinuousPanTiltZoom: " + string(b))
|
||||
|
||||
log.Log.Debug("onvif.main.ContinuousZoom(): " + string(b))
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
|
||||
resp, err = device.CallMethod(ptz.Stop{
|
||||
_, err = device.CallMethod(ptz.Stop{
|
||||
ProfileToken: token,
|
||||
Zoom: true,
|
||||
})
|
||||
|
||||
b = []byte{}
|
||||
if resp != nil {
|
||||
b, err = io.ReadAll(resp.Body)
|
||||
resp.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
log.Log.Error("ContinuousPanTiltZoom: " + err.Error())
|
||||
log.Log.Error("onvif.main.ContinuousZoom(): " + err.Error())
|
||||
}
|
||||
|
||||
return err
|
||||
@@ -759,7 +753,7 @@ func GetCapabilitiesFromDevice(dev *onvif.Device) []string {
|
||||
var capabilities []string
|
||||
services := dev.GetServices()
|
||||
for key, _ := range services {
|
||||
log.Log.Debug("GetCapabilitiesFromDevice: has key: " + key)
|
||||
log.Log.Debug("onvif.main.GetCapabilitiesFromDevice(): has key: " + key)
|
||||
if key != "" {
|
||||
keyParts := strings.Split(key, "/")
|
||||
if len(keyParts) > 0 {
|
||||
@@ -781,41 +775,39 @@ func GetPresetsFromDevice(device *onvif.Device) ([]models.OnvifActionPreset, err
|
||||
resp, err := device.CallMethod(ptz.GetPresets{
|
||||
ProfileToken: token,
|
||||
})
|
||||
|
||||
var b []byte
|
||||
if resp != nil {
|
||||
b, err = io.ReadAll(resp.Body)
|
||||
resp.Body.Close()
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
stringBody := string(b)
|
||||
decodedXML, et, err := getXMLNode(stringBody, "GetPresetsResponse")
|
||||
if err != nil {
|
||||
log.Log.Error("GetPresetsFromDevice: " + err.Error())
|
||||
log.Log.Error("onvif.main.GetPresetsFromDevice(): " + err.Error())
|
||||
return presets, err
|
||||
} else {
|
||||
if err := decodedXML.DecodeElement(&presetsResponse, et); err != nil {
|
||||
log.Log.Error("GetPresetsFromDevice: " + err.Error())
|
||||
log.Log.Error("onvif.main.GetPresetsFromDevice(): " + err.Error())
|
||||
return presets, err
|
||||
}
|
||||
|
||||
for _, preset := range presetsResponse.Preset {
|
||||
log.Log.Debug("onvif.main.GetPresetsFromDevice(): " + string(preset.Name) + " (" + string(preset.Token) + ")")
|
||||
p := models.OnvifActionPreset{
|
||||
Name: string(preset.Name),
|
||||
Token: string(preset.Token),
|
||||
}
|
||||
|
||||
presets = append(presets, p)
|
||||
}
|
||||
|
||||
return presets, err
|
||||
}
|
||||
} else {
|
||||
log.Log.Error("GetPresetsFromDevice: " + err.Error())
|
||||
log.Log.Error("onvif.main.GetPresetsFromDevice(): " + err.Error())
|
||||
}
|
||||
} else {
|
||||
log.Log.Error("GetPresetsFromDevice: " + err.Error())
|
||||
log.Log.Error("onvif.main.GetPresetsFromDevice(): " + err.Error())
|
||||
}
|
||||
|
||||
return presets, err
|
||||
@@ -841,20 +833,20 @@ func GoToPresetFromDevice(device *onvif.Device, presetName string) error {
|
||||
stringBody := string(b)
|
||||
decodedXML, et, err := getXMLNode(stringBody, "GotoPresetResponses")
|
||||
if err != nil {
|
||||
log.Log.Error("GoToPresetFromDevice: " + err.Error())
|
||||
log.Log.Error("onvif.main.GoToPresetFromDevice(): " + err.Error())
|
||||
return err
|
||||
} else {
|
||||
if err := decodedXML.DecodeElement(&goToPresetResponse, et); err != nil {
|
||||
log.Log.Error("GoToPresetFromDevice: " + err.Error())
|
||||
log.Log.Error("onvif.main.GoToPresetFromDevice(): " + err.Error())
|
||||
return err
|
||||
}
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
log.Log.Error("GoToPresetFromDevice: " + err.Error())
|
||||
log.Log.Error("onvif.main.GoToPresetFromDevice(): " + err.Error())
|
||||
}
|
||||
} else {
|
||||
log.Log.Error("GoToPresetFromDevice: " + err.Error())
|
||||
log.Log.Error("onvif.main.GoToPresetFromDevice(): " + err.Error())
|
||||
}
|
||||
|
||||
return err
|
||||
@@ -917,31 +909,18 @@ func VerifyOnvifConnection(c *gin.Context) {
|
||||
if err == nil {
|
||||
device, err := ConnectToOnvifDevice(&cameraConfig)
|
||||
if err == nil {
|
||||
// Get the list of configurations
|
||||
configurations, err := GetPTZConfigurationsFromDevice(device)
|
||||
if err == nil {
|
||||
|
||||
// Check if can zoom and/or pan/tilt is supported
|
||||
ptzFunctions, canZoom, canPanTilt := GetPTZFunctionsFromDevice(configurations)
|
||||
c.JSON(200, models.APIResponse{
|
||||
Data: device,
|
||||
PTZFunctions: ptzFunctions,
|
||||
CanZoom: canZoom,
|
||||
CanPanTilt: canPanTilt,
|
||||
})
|
||||
} else {
|
||||
c.JSON(400, models.APIResponse{
|
||||
Message: "Something went wrong while getting the configurations " + err.Error(),
|
||||
})
|
||||
}
|
||||
log.Log.Info("onvif.main.VerifyOnvifConnection(): successfully verified the ONVIF connection")
|
||||
c.JSON(200, models.APIResponse{
|
||||
Data: device,
|
||||
})
|
||||
} else {
|
||||
c.JSON(400, models.APIResponse{
|
||||
Message: "Something went wrong while verifying the ONVIF connection " + err.Error(),
|
||||
Message: "onvif.main.VerifyOnvifConnection(): s went wrong while verifying the ONVIF connection " + err.Error(),
|
||||
})
|
||||
}
|
||||
} else {
|
||||
c.JSON(400, models.APIResponse{
|
||||
Message: "Something went wrong while receiving the config " + err.Error(),
|
||||
Message: "onvif.main.VerifyOnvifConnection(): s went wrong while receiving the config " + err.Error(),
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1286,8 +1265,10 @@ func TriggerRelayOutput(dev *onvif.Device, output string) (setRelayOutputState d
|
||||
func getXMLNode(xmlBody string, nodeName string) (*xml.Decoder, *xml.StartElement, error) {
|
||||
xmlBytes := bytes.NewBufferString(xmlBody)
|
||||
decodedXML := xml.NewDecoder(xmlBytes)
|
||||
var token xml.Token
|
||||
var err error
|
||||
for {
|
||||
token, err := decodedXML.Token()
|
||||
token, err = decodedXML.Token()
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
@@ -1298,5 +1279,5 @@ func getXMLNode(xmlBody string, nodeName string) (*xml.Decoder, *xml.StartElemen
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, nil, errors.New("error in NodeName - username and password might be wrong")
|
||||
return nil, nil, errors.New("getXMLNode(): " + err.Error())
|
||||
}
|
||||
|
||||
@@ -60,6 +60,10 @@ func WebsocketHandler(c *gin.Context, communication *models.Communication, captu
|
||||
|
||||
var message Message
|
||||
err = conn.ReadJSON(&message)
|
||||
if err != nil {
|
||||
log.Log.Error("routers.websocket.main.WebsocketHandler(): " + err.Error())
|
||||
return
|
||||
}
|
||||
clientID := message.ClientID
|
||||
if sockets[clientID] == nil {
|
||||
connection := new(Connection)
|
||||
@@ -87,14 +91,14 @@ func WebsocketHandler(c *gin.Context, communication *models.Communication, captu
|
||||
if exists {
|
||||
sockets[clientID].Cancels["stream-sd"]()
|
||||
} else {
|
||||
log.Log.Error("Streaming sd does not exists for " + clientID)
|
||||
log.Log.Error("routers.websocket.main.WebsocketHandler(): streaming sd does not exists for " + clientID)
|
||||
}
|
||||
|
||||
case "stream-sd":
|
||||
if communication.CameraConnected {
|
||||
_, exists := sockets[clientID].Cancels["stream-sd"]
|
||||
if exists {
|
||||
log.Log.Info("Already streaming sd for " + clientID)
|
||||
log.Log.Info("routers.websocket.main.WebsocketHandler(): already streaming sd for " + clientID)
|
||||
} else {
|
||||
startStream := Message{
|
||||
ClientID: clientID,
|
||||
@@ -121,7 +125,7 @@ func WebsocketHandler(c *gin.Context, communication *models.Communication, captu
|
||||
_, exists := sockets[clientID]
|
||||
if exists {
|
||||
delete(sockets, clientID)
|
||||
log.Log.Info("WebsocketHandler: " + clientID + ": terminated and disconnected websocket connection.")
|
||||
log.Log.Info("routers.websocket.main.WebsocketHandler(): " + clientID + ": terminated and disconnected websocket connection.")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,7 +162,7 @@ logreader:
|
||||
encodedImage = base64.StdEncoding.EncodeToString(bytes)
|
||||
}
|
||||
} else {
|
||||
log.Log.Error("ForwardSDStream:" + err.Error())
|
||||
log.Log.Error("routers.websocket.main.ForwardSDStream():" + err.Error())
|
||||
break logreader
|
||||
}
|
||||
}
|
||||
@@ -172,7 +176,7 @@ logreader:
|
||||
}
|
||||
err := connection.WriteJson(startStrean)
|
||||
if err != nil {
|
||||
log.Log.Error("ForwardSDStream:" + err.Error())
|
||||
log.Log.Error("routers.websocket.main.ForwardSDStream():" + err.Error())
|
||||
break logreader
|
||||
}
|
||||
select {
|
||||
@@ -182,16 +186,14 @@ logreader:
|
||||
}
|
||||
}
|
||||
|
||||
//frame.Free()
|
||||
|
||||
// Close socket for streaming
|
||||
_, exists := connection.Cancels["stream-sd"]
|
||||
if exists {
|
||||
delete(connection.Cancels, "stream-sd")
|
||||
} else {
|
||||
log.Log.Error("Streaming sd does not exists for " + clientID)
|
||||
log.Log.Error("routers.websocket.main.ForwardSDStream(): streaming sd does not exists for " + clientID)
|
||||
}
|
||||
|
||||
// Send stop streaming message
|
||||
log.Log.Info("ForwardSDStream: stop sending streaming over websocket")
|
||||
log.Log.Info("routers.websocket.main.ForwardSDStream(): stop sending streaming over websocket")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user