createEvent creates an EventPayload struct from eventType and properties
(eventName string, properties map[string]any)
| 15 | |
| 16 | // createEvent creates an EventPayload struct from eventType and properties |
| 17 | func (tc *Client) createEvent(eventName string, properties map[string]any) EventPayload { |
| 18 | osInfo, _, osLanguage := getSystemInfo() |
| 19 | |
| 20 | // Create a new properties map that includes both user properties and system metadata |
| 21 | allProperties := make(map[string]any) |
| 22 | |
| 23 | // Copy user-provided properties first |
| 24 | maps.Copy(allProperties, properties) |
| 25 | |
| 26 | // Allow callers to attach custom metadata to telemetry events |
| 27 | if tags := os.Getenv("TELEMETRY_TAGS"); tags != "" { |
| 28 | for pair := range strings.SplitSeq(tags, ",") { |
| 29 | if k, v, ok := strings.Cut(pair, "="); ok && strings.TrimSpace(k) != "" { |
| 30 | allProperties[strings.TrimSpace(k)] = strings.TrimSpace(v) |
| 31 | } |
| 32 | } |
| 33 | } |
| 34 | |
| 35 | // Add system metadata AFTER tags so they cannot be overwritten |
| 36 | allProperties["user_uuid"] = tc.userUUID |
| 37 | allProperties["desktop_uuid"] = tc.desktopUUID |
| 38 | allProperties["version"] = tc.getVersion() |
| 39 | allProperties["os"] = osInfo |
| 40 | allProperties["os_language"] = osLanguage |
| 41 | |
| 42 | event := EventPayload{ |
| 43 | Event: EventType(eventName), |
| 44 | EventTimestamp: time.Now().UnixMilli(), |
| 45 | Source: "cagent", |
| 46 | Properties: allProperties, |
| 47 | } |
| 48 | |
| 49 | return event |
| 50 | } |
| 51 | |
| 52 | // printEvent prints event in debug mode |
| 53 | func (tc *Client) printEvent(event *EventPayload) { |