-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathtrack-functions.sh
More file actions
103 lines (85 loc) · 3.78 KB
/
track-functions.sh
File metadata and controls
103 lines (85 loc) · 3.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/bin/bash
# Build tracking functions - handles timing, logging, and OpenTelemetry spans
LOGFILE=/tmp/maketargets.log
track_root_start() {
local service_name="$1"
local span_name="$2"
# Cleanup old tracking files
rm -rf /tmp/otel
mkdir -p /tmp/otel/otel-times
# Always record start time and log
date +%s%6N > /tmp/otel/otel-times/${span_name}.start 2>/dev/null || \
date +%s000000 > /tmp/otel/otel-times/${span_name}.start
echo "[$(date)] build: ${span_name} start" >> $LOGFILE
# Only start OTEL span if enabled
[ -z "$OTEL_EXPORTER_OTLP_ENDPOINT" ] && return 0
mkdir -p /tmp/otel/omdbuild.sockdir
nohup otel-cli span background --name "$span_name" \
--verbose --fail \
--sockdir /tmp/otel/omdbuild.sockdir \
--service "$service_name" \
--timeout 3600s \
--tp-carrier /tmp/otel/otel-cli-omdbuild-traceparent \
--tp-print >/tmp/otel/init-span.out 2>/tmp/otel/init-span.err &
}
track_root_end() {
local service_name="$1"
local span_name="$2"
local status="$3"
local distro="$4"
local omd_version="$5"
local make_jobs="${6:-0}"
local num_cpus="$7"
local buildhost="$8"
# Always calculate elapsed and log
local start_time=$(cat /tmp/otel/otel-times/${span_name}.start 2>/dev/null || echo 0)
local end_time=$(date +%s%6N 2>/dev/null || date +%s000000)
local elapsed=$(( ($end_time - $start_time) / 1000000 ))
echo "[$(date)] build: ${span_name} (took ${elapsed}s, status=${status})" >> $LOGFILE
# Only end OTEL span if enabled
if [ -n "$OTEL_EXPORTER_OTLP_ENDPOINT" ]; then
otel-cli span end \
--attrs "distro=$distro,omd_version=$omd_version,make_jobs=$make_jobs,num_cpus=$num_cpus,buildhost=$buildhost,elapsed_time=$elapsed,exit_status=$status" \
--sockdir /tmp/otel/omdbuild.sockdir
rm -f /tmp/otel/otel-cli-omdbuild-traceparent
rm -rf /tmp/otel/omdbuild.sockdir
fi
rm -rf /tmp/otel/otel-times
return $status
}
track_start() {
local service_name="$1"
local target_name="$2"
# Always record start time and log
mkdir -p /tmp/otel/otel-times
date +%s%6N > /tmp/otel/otel-times/${target_name}.start 2>/dev/null || \
date +%s000000 > /tmp/otel/otel-times/${target_name}.start
echo "[$(date)] build: ${target_name} start" >> $LOGFILE
}
track_end() {
local service_name="$1"
local target_name="$2"
local status="${3:-$?}"
# Always calculate elapsed and log
local start_time=$(cat /tmp/otel/otel-times/${target_name}.start 2>/dev/null || echo 0)
local end_time=$(date +%s%6N 2>/dev/null || date +%s000000)
local elapsed=$(( ($end_time - $start_time) / 1000000 ))
echo "[$(date)] build: ${target_name} (took ${elapsed}s, status=${status})" >> $LOGFILE
# Only create OTEL span if enabled
if [ -n "$OTEL_EXPORTER_OTLP_ENDPOINT" ] && [ -r "/tmp/otel/otel-cli-omdbuild-traceparent" ]; then
local start_time_seconds=$(awk "BEGIN {printf \"%.6f\", $start_time / 1000000}")
local end_time_seconds=$(awk "BEGIN {printf \"%.6f\", $end_time / 1000000}")
local xtraceparent=$(grep '^TRACEPARENT=' /tmp/otel/otel-cli-omdbuild-traceparent | cut -d= -f2)
local trace_id=$(echo "$xtraceparent" | cut -d- -f2)
local parent_span_id=$(echo "$xtraceparent" | cut -d- -f3)
otel-cli span --name "$target_name" --service "$service_name" \
--force-trace-id $trace_id \
--force-parent-span-id $parent_span_id \
--verbose --fail \
--start $start_time_seconds \
--end $end_time_seconds \
--attrs "elapsed_time=$elapsed,exit_status=$status" \
>/tmp/otel/trace.span.${target_name} 2>/tmp/otel/trace.span.err.${target_name} || true
fi
return $status
}