Add Marker
[logging-analytics.git] / reference / logging-slf4j / src / main / java / org / onap / logging / ref / slf4j / ONAPLogConstants.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.logging
4  * ================================================================================
5  * Copyright © 2018 Amdocs
6  * All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *    http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.logging.ref.slf4j;
23
24 import org.slf4j.Marker;
25 import org.slf4j.MarkerFactory;
26
27 /**
28  * Constants for standard ONAP headers, MDCs, etc.
29  *
30  * <p>See <tt>package-info.java</tt>.</p>
31  */
32 public final class ONAPLogConstants {
33
34     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
35     //
36     // Constructors.
37     //
38     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
39
40     /**
41      * Hide and forbid construction.
42      */
43     private ONAPLogConstants() {
44         throw new UnsupportedOperationException();
45     }
46
47     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
48     //
49     // Inner classes.
50     //
51     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
52
53     /**
54      * Marker constants.
55      */
56     public static final class Markers {
57
58         /** Marker reporting invocation. */
59         public static final Marker INVOKE = MarkerFactory.getMarker("INVOKE");
60         
61         /** Marker reporting invocation. */
62         public static final Marker INVOKE_RETURN = MarkerFactory.getMarker("INVOKE_RETURN");
63
64         /** Marker reporting synchronous invocation. */
65         public static final Marker INVOKE_SYNCHRONOUS = build("INVOKE", "SYNCHRONOUS");
66
67         /** Marker reporting asynchronous invocation. */
68         public static final Marker INVOKE_ASYNCHRONOUS = build("INVOKE", "ASYNCHRONOUS");
69
70         /** Marker reporting entry into a component. */
71         public static final Marker ENTRY = MarkerFactory.getMarker("ENTRY");
72
73         /** Marker reporting exit from a component. */
74         public static final Marker EXIT = MarkerFactory.getMarker("EXIT");
75
76         /**
77          * Build nested, detached marker.
78          * @param m1 top token.
79          * @param m2 sub-token.
80          * @return detached Marker.
81          */
82         private static Marker build(final String m1, final String m2) {
83             final Marker marker = MarkerFactory.getDetachedMarker(m1);
84             marker.add(MarkerFactory.getDetachedMarker(m2));
85             return marker;
86         }
87
88         /**
89          * Hide and forbid construction.
90          */
91         private Markers() {
92             throw new UnsupportedOperationException();
93         }
94     }
95
96     /**
97      * MDC name constants.
98      */
99     public static final class MDCs {
100
101         // Tracing. ////////////////////////////////////////////////////////////
102
103         /** MDC correlating messages for an invocation. */
104         public static final String INVOCATION_ID = "InvocationID";
105
106         /** MDC correlating messages for a logical transaction. */
107         public static final String REQUEST_ID = "RequestID";
108
109         /** MDC recording calling service. */
110         public static final String PARTNER_NAME = "PartnerName";
111
112         /** MDC recording current service. */
113         public static final String SERVICE_NAME = "ServiceName";
114
115         /** MDC recording target service. */
116         public static final String TARGET_SERVICE_NAME = "TargetServiceName";
117         
118         /** MDC recording target entity. */
119         public static final String TARGET_ENTITY = "TargetEntity";
120
121         /** MDC recording current service instance. */
122         public static final String INSTANCE_UUID = "InstanceUUID";
123
124         // Network. ////////////////////////////////////////////////////////////
125
126         /** MDC recording caller address. */
127         public static final String CLIENT_IP_ADDRESS = "ClientIPAddress";
128
129         /** MDC recording server address. */
130         public static final String SERVER_FQDN = "ServerFQDN";
131
132         /**
133          * MDC recording timestamp at the start of the current request,
134          * with the same scope as {@link #REQUEST_ID}.
135          *
136          * <p>Open issues:
137          * <ul>
138          *     <ul>Easily confused with {@link #INVOKE_TIMESTAMP}.</ul>
139          *     <ul>No mechanism for propagation between components, e.g. via HTTP headers.</ul>
140          *     <ul>Whatever mechanism we define, it's going to be costly.</ul>
141          * </ul>
142          * </p>
143          * */
144         public static final String ENTRY_TIMESTAMP = "EntryTimestamp";
145
146         /** MDC recording timestamp at the start of the current invocation. */
147         public static final String INVOKE_TIMESTAMP = "InvokeTimestamp";
148
149         // Outcomes. ///////////////////////////////////////////////////////////
150
151         /** MDC reporting outcome code. */
152         public static final String RESPONSE_CODE = "ResponseCode";
153
154         /** MDC reporting outcome description. */
155         public static final String RESPONSE_DESCRIPTION = "ResponseDescription";
156
157         /** MDC reporting outcome error level. */
158         public static final String RESPONSE_SEVERITY = "Severity";
159
160         /** MDC reporting outcome error level. */
161         public static final String RESPONSE_STATUS_CODE = "StatusCode";
162
163         // Unsorted. ///////////////////////////////////////////////////////////
164
165         /**
166          * Hide and forbid construction.
167          */
168         private MDCs() {
169             throw new UnsupportedOperationException();
170         }
171     }
172
173     /**
174      * Header name constants.
175      */
176     public static final class Headers {
177
178         /** HTTP <tt>X-ONAP-RequestID</tt> header. */
179         public static final String REQUEST_ID = "X-ONAP-RequestID";
180
181         /** HTTP <tt>X-ONAP-InvocationID</tt> header. */
182         public static final String INVOCATION_ID = "X-ONAP-InvocationID";
183
184         /** HTTP <tt>X-ONAP-PartnerName</tt> header. */
185         public static final String PARTNER_NAME = "X-ONAP-PartnerName";
186
187         /**
188          * Hide and forbid construction.
189          */
190         private Headers() {
191             throw new UnsupportedOperationException();
192         }
193     }
194
195     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
196     //
197     // Enums.
198     //
199     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
200
201     /**
202      * Response success or not, for setting <tt>StatusCode</tt>.
203      */
204     public enum ResponseStatus {
205
206         /** Success. */
207         COMPLETED,
208
209         /** Not. */
210         ERROR,
211         
212         /** In Progress. */
213         INPROGRESS
214     }
215
216     /**
217      * Synchronous or asynchronous execution, for setting invocation marker.
218      */
219     public enum InvocationMode {
220
221         /** Synchronous, blocking. */
222         SYNCHRONOUS("SYNCHRONOUS", Markers.INVOKE_SYNCHRONOUS),
223
224         /** Asynchronous, non-blocking. */
225         ASYNCHRONOUS("ASYNCHRONOUS", Markers.INVOKE_ASYNCHRONOUS);
226
227         /** Enum value. */
228         private String mString;
229
230         /** Corresponding marker. */
231         private Marker mMarker;
232
233         /**
234          * Construct enum.
235          *
236          * @param s enum value.
237          * @param m corresponding Marker.
238          */
239         InvocationMode(final String s, final Marker m) {
240             this.mString = s;
241             this.mMarker = m;
242         }
243
244         /**
245          * Get Marker for enum.
246          *
247          * @return Marker.
248          */
249         public Marker getMarker() {
250             return this.mMarker;
251         }
252
253         /**
254          * {@inheritDoc}
255          */
256         @Override
257         public String toString() {
258             return this.mString;
259         }
260     }
261
262 }