logs.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package porter_app
  2. import (
  3. "time"
  4. "github.com/porter-dev/porter/api/types"
  5. )
  6. // StructuredLog represents a single log line with all necessary fields required by Porter API clients
  7. type StructuredLog struct {
  8. Timestamp time.Time `json:"timestamp"`
  9. Line string `json:"line"`
  10. OutputStream string `json:"output_stream"`
  11. ServiceName string `json:"service_name"`
  12. AppRevisionID string `json:"app_revision_id"`
  13. DeploymentTargetID string `json:"deployment_target_id"`
  14. AppInstanceID string `json:"app_instance_id"`
  15. JobName string `json:"job_name,omitempty"`
  16. JobRunID string `json:"job_run_id,omitempty"`
  17. }
  18. const (
  19. lokiLabel_PorterAppName = "porter_run_app_name"
  20. lokiLabel_PorterAppID = "porter_run_app_id"
  21. lokiLabel_PorterServiceName = "porter_run_service_name"
  22. lokiLabel_PorterAppRevisionID = "porter_run_app_revision_id"
  23. lokiLabel_DeploymentTargetId = "porter_run_deployment_target_id"
  24. lokiLabel_AppInstanceID = "porter_run_app_instance_id"
  25. lokiLabel_JobRunName = "job_name"
  26. lokiLabel_ControllerUID = "controller_uid"
  27. )
  28. // AgentLogToStructuredLog converts a set of raw logs from the agent to structured logs
  29. func AgentLogToStructuredLog(rawLogs []types.LogLine) []StructuredLog {
  30. var logs []StructuredLog
  31. for _, log := range rawLogs {
  32. structuredLog := StructuredLog{
  33. Line: log.Line,
  34. OutputStream: log.Metadata.OutputStream,
  35. ServiceName: log.Metadata.RawLabels[lokiLabel_PorterServiceName],
  36. AppRevisionID: log.Metadata.RawLabels[lokiLabel_PorterAppRevisionID],
  37. DeploymentTargetID: log.Metadata.RawLabels[lokiLabel_DeploymentTargetId],
  38. JobName: log.Metadata.RawLabels[lokiLabel_JobRunName],
  39. JobRunID: log.Metadata.RawLabels[lokiLabel_ControllerUID],
  40. AppInstanceID: log.Metadata.RawLabels[lokiLabel_AppInstanceID],
  41. }
  42. if log.Timestamp != nil {
  43. structuredLog.Timestamp = *log.Timestamp
  44. }
  45. logs = append(logs, structuredLog)
  46. }
  47. return logs
  48. }