11package io .novatec .todobackend ;
22
3- import static io .opentelemetry .api .common .AttributeKey .stringKey ;
3+ import static io .opentelemetry .api .common .AttributeKey .booleanKey ;
44
55import java .util .ArrayList ;
66import java .util .List ;
2121
2222import io .opentelemetry .api .OpenTelemetry ;
2323import io .opentelemetry .api .common .Attributes ;
24- import io .opentelemetry .api .metrics .LongCounter ;
25- import io .opentelemetry .api .metrics .Meter ;
24+ import io .opentelemetry .semconv .ClientAttributes ;
25+ import io .opentelemetry .semconv .HttpAttributes ;
26+ import io .opentelemetry .semconv .UserAgentAttributes ;
2627import io .opentelemetry .api .trace .Span ;
2728import io .opentelemetry .api .trace .SpanKind ;
2829import io .opentelemetry .api .trace .StatusCode ;
@@ -43,8 +44,6 @@ public class TodobackendApplication {
4344
4445 private OpenTelemetry openTelemetry ;
4546 private Tracer tracer ;
46- private Meter meter ;
47- private LongCounter counter ;
4847
4948 @ Value ("${HOSTNAME:not_set}" )
5049 String hostname ;
@@ -58,13 +57,6 @@ public class TodobackendApplication {
5857 public TodobackendApplication (OpenTelemetry openTelemetry ) {
5958 this .openTelemetry = openTelemetry ;
6059 tracer = this .openTelemetry .getTracer (TodobackendApplication .class .getName (), "0.1.0" );
61- meter = this .openTelemetry .getMeter (TodobackendApplication .class .getName ());
62-
63- counter = meter .counterBuilder ("todobackend.requests.counter" )
64- .setDescription ("How many times the GET call has been invoked." )
65- .setUnit ("requests" )
66- .build ();
67-
6860 }
6961
7062 private String getInstanceId () {
@@ -79,7 +71,6 @@ private String getInstanceId() {
7971 String hello () {
8072
8173 return getInstanceId () + " Hallo, Welt ! " ;
82-
8374 }
8475
8576 @ GetMapping ("/fail" )
@@ -96,39 +87,40 @@ List<String> getTodos() {
9687
9788 todoRepository .findAll ().forEach (todo -> todos .add (todo .getTodo ()));
9889 logger .info ("GET /todos/ " + todos .toString ());
99- counter .add (1 ,Attributes .of (stringKey ("http.method" ), "GET" ));
10090
10191 return todos ;
10292 }
10393
10494 @ PostMapping ("/todos/{todo}" )
10595 String addTodo (HttpServletRequest request , HttpServletResponse response , @ PathVariable String todo ) {
10696
107- logger .info ("POST /todos/ " + todo .toString ());
108-
10997 Span span = tracer .spanBuilder ("addTodo" ).setSpanKind (SpanKind .SERVER ).startSpan ();
11098
111- span .setAttribute ("http.method" , request .getMethod ());
112- span .setAttribute ("http.url" , request .getRequestURL ().toString ());
113- span .setAttribute ("client.address" , request .getRemoteAddr ());
114- span .setAttribute ("user.agent" , request .getHeader ("User-Agent" ));
99+ boolean valid = this .isValid (todo );
100+ span .addEvent ("todo validated" , Attributes .of (booleanKey ("valid" ), valid ));
101+
102+ span .setAttribute (HttpAttributes .HTTP_REQUEST_METHOD , request .getMethod ());
103+ span .setAttribute (HttpAttributes .HTTP_ROUTE , request .getRequestURL ().toString ());
104+ span .setAttribute (ClientAttributes .CLIENT_ADDRESS , request .getRemoteAddr ());
105+ span .setAttribute (UserAgentAttributes .USER_AGENT_ORIGINAL , request .getHeader ("User-Agent" ));
115106
116107 try (Scope scope = span .makeCurrent ()) {
117108 this .someInternalMethod (todo );
118109 response .setStatus (HttpServletResponse .SC_CREATED );
119- span .setAttribute ("response.status" , HttpServletResponse .SC_CREATED );
110+ span .setAttribute (HttpAttributes . HTTP_RESPONSE_STATUS_CODE , HttpServletResponse .SC_CREATED );
120111 } catch (Throwable t ) {
121112 span .setStatus (StatusCode .ERROR , "Error on server side!" );
122113 span .recordException (t );
123114 response .setStatus (HttpServletResponse .SC_INTERNAL_SERVER_ERROR );
124- span .setAttribute ("response.status" , HttpServletResponse .SC_INTERNAL_SERVER_ERROR );
115+ span .setAttribute (HttpAttributes . HTTP_RESPONSE_STATUS_CODE , HttpServletResponse .SC_INTERNAL_SERVER_ERROR );
125116 } finally {
126117 span .end ();
127118 }
128119
129- logger .info ("Span.toString():" + span .toString ());
130- return todo ;
120+ logger .info ("POST /todos/ " + todo .toString ());
121+ logger . info ( "Span.toString():" + span . toString ()) ;
131122
123+ return todo ;
132124 }
133125
134126 String someInternalMethod (String todo ) {
@@ -157,6 +149,10 @@ String someInternalMethod(String todo) {
157149
158150 }
159151
152+ boolean isValid (String todo ) {
153+ return todo != null && !todo .isBlank ();
154+ }
155+
160156 @ DeleteMapping ("/todos/{todo}" )
161157 String removeTodo (@ PathVariable String todo ) {
162158
0 commit comments