The Gaudi Framework  v36r10 (fc05264c)
JSONSink.cpp
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 2022 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 
12 #include <Gaudi/BaseSink.h>
13 #include <Gaudi/MonitoringHub.h>
14 
15 #include <fstream>
16 
17 #include <string>
18 
19 namespace Gaudi::Monitoring {
20 
21  class JSONSink : public BaseSink {
22 
23  public:
24  using BaseSink::BaseSink;
25 
26  StatusCode stop() override {
27  return BaseSink::stop().andThen( [&] {
28  if ( m_fileName.empty() ) { return StatusCode::SUCCESS; }
30  applytoAllEntities( [&output]( auto& ent ) {
31  output.emplace_back( nlohmann::json{
32  { "name", ent.name },
33  { "component", ent.component },
34  { "entity", ent.toJSON() },
35  } );
36  } );
37  info() << "Writing JSON file " << m_fileName.value() << endmsg;
39  os << output.dump( 4 );
40  os.close();
41  return StatusCode::SUCCESS;
42  } );
43  }
44 
45  private:
46  Gaudi::Property<std::string> m_fileName{ this, "FileName", "json_output.json",
47  "Name of output json file. Empty fileName means no output" };
48  };
49 
50  DECLARE_COMPONENT( JSONSink )
51 
52 } // namespace Gaudi::Monitoring
Gaudi::Monitoring::BaseSink
Base class for all Sinks registering to the Monitoring Hub.
Definition: BaseSink.h:27
Gaudi::Monitoring::JSONSink
Definition: JSONSink.cpp:21
StatusCode::andThen
StatusCode andThen(F &&f, ARGS &&... args) const
Chain code blocks making the execution conditional a success result.
Definition: StatusCode.h:163
MonitoringHub.h
Gaudi::Monitoring
Definition: JSONSink.cpp:19
gaudirun.output
output
Definition: gaudirun.py:521
jsonFromLHCbLog.json
dictionary json
Definition: jsonFromLHCbLog.py:87
StatusCode
Definition: StatusCode.h:65
std::ofstream
STL class.
Gaudi::Property::value
const ValueType & value() const
Definition: Property.h:239
std::ofstream::close
T close(T... args)
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:203
Gaudi::Monitoring::JSONSink::stop
StatusCode stop() override
Definition: JSONSink.cpp:26
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
Service::stop
StatusCode stop() override
Definition: Service.cpp:181
DECLARE_COMPONENT
#define DECLARE_COMPONENT(type)
Definition: PluginServiceV1.h:46
BaseSink.h
Gaudi::Monitoring::BaseSink::applytoAllEntities
void applytoAllEntities(Callable func, bool sortFirst=false)
applies a callable to all monitoring entities
Definition: BaseSink.h:58
Gaudi::Monitoring::JSONSink::m_fileName
Gaudi::Property< std::string > m_fileName
Definition: JSONSink.cpp:46
Gaudi::Property< std::string >
PrepareBase.out
out
Definition: PrepareBase.py:20