55
66package io .jenkins .plugins .opentelemetry ;
77
8+ import java .nio .charset .StandardCharsets ;
9+ import java .util .Arrays ;
10+ import java .util .Collections ;
11+ import java .util .Enumeration ;
12+ import java .util .HashMap ;
13+ import java .util .Iterator ;
14+ import java .util .LinkedHashMap ;
15+ import java .util .List ;
16+ import java .util .Locale ;
17+ import java .util .Map ;
18+ import java .util .Objects ;
19+ import java .util .Optional ;
20+ import java .util .TreeMap ;
21+ import java .util .function .Function ;
22+ import java .util .logging .Level ;
23+ import java .util .logging .Logger ;
24+ import java .util .stream .Collectors ;
25+
26+ import javax .servlet .http .HttpServletRequest ;
27+
28+ import org .apache .commons .codec .net .URLCodec ;
29+ import org .apache .commons .lang .StringUtils ;
30+ import org .jenkinsci .plugins .workflow .graph .FlowNode ;
31+ import org .jenkinsci .plugins .workflow .job .WorkflowRun ;
32+ import org .jenkinsci .plugins .workflow .multibranch .WorkflowMultiBranchProject ;
33+
834import com .google .common .collect .Iterators ;
35+
936import edu .umd .cs .findbugs .annotations .CheckForNull ;
1037import edu .umd .cs .findbugs .annotations .NonNull ;
1138import edu .umd .cs .findbugs .annotations .Nullable ;
1239import hudson .Plugin ;
1340import hudson .model .FreeStyleBuild ;
1441import hudson .model .Run ;
1542import hudson .util .VersionNumber ;
43+ import io .jenkins .plugins .opentelemetry .job .MonitoringAction ;
1644import io .jenkins .plugins .opentelemetry .semconv .JenkinsOtelSemanticAttributes ;
1745import io .opentelemetry .api .common .AttributeKey ;
1846import io .opentelemetry .api .trace .Span ;
3058import jenkins .scm .api .SCMHead ;
3159import jenkins .scm .api .mixin .ChangeRequestSCMHead ;
3260import jenkins .scm .api .mixin .TagSCMHead ;
33- import org .apache .commons .codec .net .URLCodec ;
34- import org .apache .commons .lang .StringUtils ;
35- import org .jenkinsci .plugins .workflow .graph .FlowNode ;
36- import org .jenkinsci .plugins .workflow .job .WorkflowRun ;
37- import org .jenkinsci .plugins .workflow .multibranch .WorkflowMultiBranchProject ;
38-
39- import javax .servlet .http .HttpServletRequest ;
40- import java .nio .charset .StandardCharsets ;
41- import java .util .Arrays ;
42- import java .util .Collections ;
43- import java .util .Enumeration ;
44- import java .util .HashMap ;
45- import java .util .Iterator ;
46- import java .util .LinkedHashMap ;
47- import java .util .List ;
48- import java .util .Locale ;
49- import java .util .Map ;
50- import java .util .Objects ;
51- import java .util .Optional ;
52- import java .util .TreeMap ;
53- import java .util .function .Function ;
54- import java .util .stream .Collectors ;
5561
5662public class OtelUtils {
5763
@@ -66,6 +72,8 @@ public class OtelUtils {
6672 public static final String TAG = "tag" ;
6773 public static final String JENKINS_CORE = "jenkins-core" ;
6874 public static final String UNKNOWN_VALUE = "#unknown" ;
75+ private static final Logger logger = Logger .getLogger (OtelUtils .class .getName ());
76+
6977
7078 @ CheckForNull
7179 public static String getSystemPropertyOrEnvironmentVariable (String environmentVariableName ) {
@@ -321,4 +329,19 @@ public String get(@javax.annotation.Nullable HttpServletRequest request, @NonNul
321329 .orElse (null );
322330 }
323331 }
332+
333+ /**
334+ * Check if the run has Opentelemetry data
335+ * To validate it search for the MonitoringAction in the build actions.
336+ * @param run the Build
337+ * @return true if the run has Opentelemetry data
338+ */
339+ public static boolean hasOpentelemetryData (Run <?, ?> run ){
340+ MonitoringAction monitoringAction = run .getAction (MonitoringAction .class );
341+ boolean ret = monitoringAction != null ;
342+ if (!ret ) {
343+ logger .log (Level .FINE , () -> "No MonitoringAction found in " + run );
344+ }
345+ return ret ;
346+ }
324347}
0 commit comments