The Gaudi Framework  master (b9786168)
Loading...
Searching...
No Matches
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
20
21 class JSONSink : public BaseSink {
22
23 public:
24 using BaseSink::BaseSink;
25
26 void flush( bool ) override {
27 if ( m_fileName.empty() ) { return; }
28 nlohmann::json output;
30 [&output]( std::string const& component, std::string const& name, nlohmann::json const& j ) {
31 output.emplace_back( nlohmann::json{
32 { "name", name },
33 { "component", component },
34 { "entity", j },
35 } );
36 } );
37 info() << "Writing JSON file " << m_fileName.value() << endmsg;
38 std::ofstream{ m_fileName, std::ios::out } << output.dump( 4 );
39 }
40
41 private:
42 Gaudi::Property<std::string> m_fileName{ this, "FileName", "json_output.json",
43 "Name of output json file. Empty fileName means no output" };
44 };
45
46 DECLARE_COMPONENT( JSONSink )
47
48} // namespace Gaudi::Monitoring
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
#define DECLARE_COMPONENT(type)
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Base class for all Sinks registering to the Monitoring Hub Should be extended by actual Sinks.
Definition BaseSink.h:41
void applyToAllSortedEntities(Callable func) const
applies a callable to all monitoring entities ordered by component the callable will be called once p...
Definition BaseSink.h:111
void flush(bool) override
pure virtual method to be defined by children and responsible for flushing current data of the Sink.
Definition JSONSink.cpp:26
Gaudi::Property< std::string > m_fileName
Definition JSONSink.cpp:42
Implementation of property with value of concrete type.
Definition PropertyFwd.h:27
const std::string & name() const override
Retrieve name of the service.
Definition Service.cpp:333