helics  2.8.1
Tracer.hpp
1 /*
2 Copyright (c) 2017-2021,
3 Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Sustainable
4 Energy, LLC. See the top-level NOTICE for additional details. All rights reserved.
5 SPDX-License-Identifier: BSD-3-Clause
6 */
7 #pragma once
8 
9 #include "../application_api/Endpoints.hpp"
10 #include "../application_api/Subscriptions.hpp"
11 #include "helicsApp.hpp"
12 
13 #include <functional>
14 #include <map>
15 #include <memory>
16 #include <string>
17 #include <utility>
18 #include <vector>
19 
20 namespace helics {
21 class CloningFilter;
22 
23 namespace apps {
25  class HELICS_CXX_EXPORT Tracer: public App {
26  public:
28  explicit Tracer(const std::string& name, FederateInfo& fi);
32  explicit Tracer(std::vector<std::string> args);
33 
35  Tracer(int argc, char* argv[]);
36 
42  Tracer(const std::string& name, const std::shared_ptr<Core>& core, const FederateInfo& fi);
43 
49  Tracer(const std::string& name, CoreApp& core, const FederateInfo& fi);
50 
55  Tracer(const std::string& name, const std::string& file);
57  Tracer(Tracer&& other_tracer) = default;
59  Tracer& operator=(Tracer&& tracer) = default;
61  ~Tracer();
62  virtual void runTo(Time runToTime) override;
64  void addSubscription(const std::string& key);
66  void addEndpoint(const std::string& endpoint);
68  void addSourceEndpointClone(const std::string& sourceEndpoint);
70  void addDestEndpointClone(const std::string& destEndpoint);
74  void addCapture(const std::string& captureDesc);
75 
79  void setClonedMessageCallback(std::function<void(Time, std::unique_ptr<Message>)> callback)
80  {
81  clonedMessageCallback = std::move(callback);
82  }
88  std::function<void(Time, const std::string&, std::unique_ptr<Message>)> callback)
89  {
90  endpointMessageCallback = std::move(callback);
91  }
97  std::function<void(Time, const std::string&, const std::string&)> callback)
98  {
99  valueCallback = std::move(callback);
100  }
102  void enableTextOutput() { printMessage = true; }
104  void disableTextOutput() { printMessage = false; }
105 
106  private:
110  virtual void loadJsonFile(const std::string& jsonString) override;
112  virtual void loadTextFile(const std::string& textFile) override;
113 
114  virtual void initialize() override;
115  void generateInterfaces();
116  void captureForCurrentTime(Time currentTime, int iteration = 0);
117  void loadCaptureInterfaces();
118 
120  std::shared_ptr<helicsCLI11App> buildArgParserApp();
122  void processArgs();
123 
124  protected:
125  bool printMessage = false;
126  bool allow_iteration =
127  false;
128  bool skiplog = false;
129  std::unique_ptr<CloningFilter> cFilt;
130 
131  std::vector<Input> subscriptions;
132  std::map<std::string, int> subkeys;
133 
134  std::vector<Endpoint> endpoints;
135  std::map<std::string, int> eptNames;
136  std::unique_ptr<Endpoint> cloneEndpoint;
137  std::vector<std::string> captureInterfaces;
138 
139  std::function<void(Time, std::unique_ptr<Message>)> clonedMessageCallback;
140  std::function<void(Time, const std::string&, std::unique_ptr<Message>)>
141  endpointMessageCallback;
142  std::function<void(Time, const std::string&, const std::string&)> valueCallback;
143  };
144 
145 } // namespace apps
146 } // namespace helics
helics::apps::Tracer::runTo
virtual void runTo(Time runToTime) override
Definition: Tracer.cpp:347
helics::iteration_result::next_step
@ next_step
helics::apps::Tracer::subkeys
std::map< std::string, int > subkeys
translate subscription names to an index
Definition: Tracer.hpp:132
helics::apps::Tracer::cFilt
std::unique_ptr< CloningFilter > cFilt
a pointer to a clone filter
Definition: Tracer.hpp:129
helics::apps::Tracer::addCapture
void addCapture(const std::string &captureDesc)
Definition: Tracer.cpp:432
helics::apps::Tracer
Definition: Tracer.hpp:25
helics::apps::Tracer::~Tracer
~Tracer()
helics::Time
TimeRepresentation< count_time< 9 > > Time
Definition: helics-time.hpp:27
helics_sequencing_mode_ordered
@ helics_sequencing_mode_ordered
Definition: helics_enums.h:337
helics::apps::Tracer::enableTextOutput
void enableTextOutput()
Definition: Tracer.hpp:102
helics::apps::Tracer::setClonedMessageCallback
void setClonedMessageCallback(std::function< void(Time, std::unique_ptr< Message >)> callback)
Definition: Tracer.hpp:79
helics::make_subscription
Input & make_subscription(ValueFederate *valueFed, const std::string &key, const std::string &units=std::string())
Definition: Subscriptions.hpp:22
helics::apps::App::masterFileName
std::string masterFileName
the name of the master file used to do the construction
Definition: helicsApp.hpp:129
helics::apps::App::loadJsonFileConfiguration
void loadJsonFileConfiguration(const std::string &appName, const std::string &jsonString)
Definition: helicsApp.cpp:159
helics::apps::Tracer::skiplog
bool skiplog
skip the log function and print directly to cout
Definition: Tracer.hpp:128
helics::iteration_request::iterate_if_needed
@ iterate_if_needed
indicator that the iterations need to continue
helics::FederateInfo
Definition: FederateInfo.hpp:20
helics::apps::Tracer::setEndpointMessageCallback
void setEndpointMessageCallback(std::function< void(Time, const std::string &, std::unique_ptr< Message >)> callback)
Definition: Tracer.hpp:87
helics::apps::Tracer::cloneEndpoint
std::unique_ptr< Endpoint > cloneEndpoint
the endpoint for cloned message delivery
Definition: Tracer.hpp:136
loadJson
Json::Value loadJson(const std::string &jsonString)
Definition: JsonProcessingFunctions.cpp:24
helics::apps::Tracer::subscriptions
std::vector< Input > subscriptions
the actual subscription objects
Definition: Tracer.hpp:131
helics::Federate::modes::startup
@ startup
when created the federate is in startup state
helics::apps::Tracer::addSubscription
void addSubscription(const std::string &key)
Definition: Tracer.cpp:392
helics::apps::Tracer::addEndpoint
void addEndpoint(const std::string &endpoint)
Definition: Tracer.cpp:403
helics::apps::App::loadTextFile
virtual void loadTextFile(const std::string &textFile)
Definition: helicsApp.cpp:134
helics::apps::Tracer::addSourceEndpointClone
void addSourceEndpointClone(const std::string &sourceEndpoint)
Definition: Tracer.cpp:412
helics::apps::Tracer::allow_iteration
bool allow_iteration
flag to allow iteration of the federate for time requests
Definition: Tracer.hpp:126
helics::apps::Tracer::eptNames
std::map< std::string, int > eptNames
translate endpoint name to index
Definition: Tracer.hpp:135
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::apps::Tracer::disableTextOutput
void disableTextOutput()
Definition: Tracer.hpp:104
helics::apps::Tracer::captureInterfaces
std::vector< std::string > captureInterfaces
storage for the interfaces to capture
Definition: Tracer.hpp:137
helics_flag_observer
@ helics_flag_observer
Definition: helics_enums.h:86
helics::apps::App::fed
std::shared_ptr< CombinationFederate > fed
the federate created for the Player
Definition: helicsApp.hpp:127
helics::apps::Tracer::addDestEndpointClone
void addDestEndpointClone(const std::string &destEndpoint)
Definition: Tracer.cpp:422
helics::apps::App
Definition: helicsApp.hpp:28
helics::vectorizeQueryResult
std::vector< std::string > vectorizeQueryResult(std::string &&queryres)
Definition: queryFunctions.cpp:17
helics::waitForInit
bool waitForInit(helics::Federate *fed, const std::string &fedName, std::chrono::milliseconds timeout)
Definition: queryFunctions.cpp:90
helics::apps::Tracer::setValueCallback
void setValueCallback(std::function< void(Time, const std::string &, const std::string &)> callback)
Definition: Tracer.hpp:96
helics::apps::Tracer::endpoints
std::vector< Endpoint > endpoints
the actual endpoint objects
Definition: Tracer.hpp:134
helics::apps::App::loadFile
void loadFile(const std::string &filename)
Definition: helicsApp.cpp:124
helics::Federate::modes::initializing
@ initializing
entered after the enterInitializingMode call has returned
helics::apps::Tracer::Tracer
Tracer(const std::string &name, FederateInfo &fi)
Definition: Tracer.cpp:35