xref: /aosp_15_r20/external/federated-compute/fcp/tracing/tracing_traits.h (revision 14675a029014e728ec732f129a32e299b2da0601)
1*14675a02SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
2*14675a02SAndroid Build Coastguard Worker //
3*14675a02SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*14675a02SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*14675a02SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*14675a02SAndroid Build Coastguard Worker //
7*14675a02SAndroid Build Coastguard Worker //      http://www.apache.org/licenses/LICENSE-2.0
8*14675a02SAndroid Build Coastguard Worker //
9*14675a02SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*14675a02SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*14675a02SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*14675a02SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*14675a02SAndroid Build Coastguard Worker // limitations under the License.
14*14675a02SAndroid Build Coastguard Worker 
15*14675a02SAndroid Build Coastguard Worker #ifndef FCP_TRACING_TRACING_TRAITS_H_
16*14675a02SAndroid Build Coastguard Worker #define FCP_TRACING_TRACING_TRAITS_H_
17*14675a02SAndroid Build Coastguard Worker 
18*14675a02SAndroid Build Coastguard Worker #include <memory>
19*14675a02SAndroid Build Coastguard Worker #include <string>
20*14675a02SAndroid Build Coastguard Worker 
21*14675a02SAndroid Build Coastguard Worker #include "absl/base/attributes.h"
22*14675a02SAndroid Build Coastguard Worker #include "fcp/tracing/tracing_severity.h"
23*14675a02SAndroid Build Coastguard Worker #include "fcp/tracing/tracing_tag.h"
24*14675a02SAndroid Build Coastguard Worker #include "flatbuffers/flatbuffers.h"
25*14675a02SAndroid Build Coastguard Worker 
26*14675a02SAndroid Build Coastguard Worker namespace fcp {
27*14675a02SAndroid Build Coastguard Worker 
28*14675a02SAndroid Build Coastguard Worker // Base class for tracing traits, allows working with generated tracing traits
29*14675a02SAndroid Build Coastguard Worker // (see below) in polymorphic way at runtime without knowledge of a type.
30*14675a02SAndroid Build Coastguard Worker class TracingTraitsBase {
31*14675a02SAndroid Build Coastguard Worker  public:
32*14675a02SAndroid Build Coastguard Worker   // Returns printable name of the FlatBuffers table
33*14675a02SAndroid Build Coastguard Worker   ABSL_MUST_USE_RESULT virtual const char* Name() const = 0;
34*14675a02SAndroid Build Coastguard Worker   // Returns printable severity of the event represented by this table.
35*14675a02SAndroid Build Coastguard Worker   ABSL_MUST_USE_RESULT virtual TracingSeverity Severity() const = 0;
36*14675a02SAndroid Build Coastguard Worker   // Formats a serialized flatbuffer into human readable format.
37*14675a02SAndroid Build Coastguard Worker   ABSL_MUST_USE_RESULT virtual std::string TextFormat(
38*14675a02SAndroid Build Coastguard Worker       const flatbuffers::DetachedBuffer& buf) const = 0;
39*14675a02SAndroid Build Coastguard Worker   // Formats a serialized flatbuffer into a Json string.
40*14675a02SAndroid Build Coastguard Worker   ABSL_MUST_USE_RESULT virtual std::string JsonStringFormat(
41*14675a02SAndroid Build Coastguard Worker       const uint8_t* flatbuf_bytes) const = 0;
42*14675a02SAndroid Build Coastguard Worker 
43*14675a02SAndroid Build Coastguard Worker   // Allows to lookup FlatBuffers table traits by its 4-character tag.
44*14675a02SAndroid Build Coastguard Worker   // For unknown tag returns a stub.
45*14675a02SAndroid Build Coastguard Worker   static TracingTraitsBase const* Lookup(TracingTag tag);
46*14675a02SAndroid Build Coastguard Worker 
47*14675a02SAndroid Build Coastguard Worker   // Registers runtime trait information (to be used for generated code only).
48*14675a02SAndroid Build Coastguard Worker   // Multiple compilation units are allowed to register the same traits,
49*14675a02SAndroid Build Coastguard Worker   // last registration wins.
50*14675a02SAndroid Build Coastguard Worker   static void Register(TracingTag tag,
51*14675a02SAndroid Build Coastguard Worker                        std::unique_ptr<TracingTraitsBase> trait);
52*14675a02SAndroid Build Coastguard Worker 
SeverityString(const TracingSeverity tracing_severity)53*14675a02SAndroid Build Coastguard Worker   static std::string SeverityString(const TracingSeverity tracing_severity) {
54*14675a02SAndroid Build Coastguard Worker     switch (tracing_severity) {
55*14675a02SAndroid Build Coastguard Worker       case TracingSeverity::kInfo:
56*14675a02SAndroid Build Coastguard Worker         return "INFO";
57*14675a02SAndroid Build Coastguard Worker       case TracingSeverity::kWarning:
58*14675a02SAndroid Build Coastguard Worker         return "WARNING";
59*14675a02SAndroid Build Coastguard Worker       case TracingSeverity::kError:
60*14675a02SAndroid Build Coastguard Worker         return "ERROR";
61*14675a02SAndroid Build Coastguard Worker     }
62*14675a02SAndroid Build Coastguard Worker   }
63*14675a02SAndroid Build Coastguard Worker 
64*14675a02SAndroid Build Coastguard Worker   virtual ~TracingTraitsBase() = default;
65*14675a02SAndroid Build Coastguard Worker };
66*14675a02SAndroid Build Coastguard Worker 
67*14675a02SAndroid Build Coastguard Worker // Specializations of TracingTraits used by TracingSpan are typically included
68*14675a02SAndroid Build Coastguard Worker // into user code together with the definitions of concrete FlatBufferTable via
69*14675a02SAndroid Build Coastguard Worker // "tracing_schema.h" header. The latter is auto-generated by
70*14675a02SAndroid Build Coastguard Worker // tracing_traits_generator tool from "tracing_schema.fbs".
71*14675a02SAndroid Build Coastguard Worker template <class FlatBufferTable>
72*14675a02SAndroid Build Coastguard Worker class TracingTraits;
73*14675a02SAndroid Build Coastguard Worker 
74*14675a02SAndroid Build Coastguard Worker namespace internal {
75*14675a02SAndroid Build Coastguard Worker 
76*14675a02SAndroid Build Coastguard Worker // Helper class to for automatic registration of traits for runtime use.
77*14675a02SAndroid Build Coastguard Worker // This is intended to be used from autogenerated code only.
78*14675a02SAndroid Build Coastguard Worker template<class FlatBufferTable>
79*14675a02SAndroid Build Coastguard Worker struct TracingTraitsRegistrar {
TracingTraitsRegistrarTracingTraitsRegistrar80*14675a02SAndroid Build Coastguard Worker   TracingTraitsRegistrar() {
81*14675a02SAndroid Build Coastguard Worker     TracingTraitsBase::Register(
82*14675a02SAndroid Build Coastguard Worker         TracingTraits<FlatBufferTable>::kTag,
83*14675a02SAndroid Build Coastguard Worker         std::make_unique<TracingTraits<FlatBufferTable>>());
84*14675a02SAndroid Build Coastguard Worker   }
85*14675a02SAndroid Build Coastguard Worker };
86*14675a02SAndroid Build Coastguard Worker 
87*14675a02SAndroid Build Coastguard Worker }  // namespace internal
88*14675a02SAndroid Build Coastguard Worker 
89*14675a02SAndroid Build Coastguard Worker }  // namespace fcp
90*14675a02SAndroid Build Coastguard Worker 
91*14675a02SAndroid Build Coastguard Worker #endif  // FCP_TRACING_TRACING_TRAITS_H_
92