CustomStartupRunner/appinfo.h

93 lines
2.7 KiB
C++

#ifndef APPINFO_H
#define APPINFO_H
#include <string>
#include <deque>
#include <vector>
#include <memory>
#include <unordered_map>
#include <syncstream>
#include <atomic>
class AppInfo
{
typedef std::unordered_map<std::string, std::string> string_map;
public:
enum class State {
initial,
running,
exited
};
enum class RunMode {
script,
daemon
};
struct AppData {
std::string program_name;
std::string module_name;
std::deque<std::string> args;
std::string working_dir;
string_map after;
string_map env;
std::string run_mode;
std::string run_as;
bool create_log = false;
void printInfo(std::ostream &out);
std::string getAfterString() const;
std::string getAfterKeys() const;
};
private:
std::string program_name;
std::string module_name;
std::deque<std::string> args;
std::string run_as;
std::string working_dir;
string_map after;
string_map env;
bool create_log = false;
std::unordered_map<std::shared_ptr<AppInfo>, State> parents;
std::atomic<State> state{State::initial};
RunMode mode = RunMode::script;
public:
void setProgramName(std::string name);
void setModuleName(std::string name);
void setArgs(std::deque<std::string> args);
void setWorkingDir(std::string working_dir);
void setAfter(string_map after);
void setEnv(string_map env);
void setCreateLog(bool create_log);
void setRunMode(std::string mode);
void setRunAs(std::string run_as);
void setFinished();
void setRunning();
void insertParent(std::shared_ptr<AppInfo> parent, State state);
bool isParentDependencyCleared(std::osyncstream &out) const;
std::string getModuleName() const;
std::string getProgramName() const;
std::string getRunAs() const;
std::deque<std::string> getArgs() const;
std::string getWorkingDir() const;
string_map getEnv() const;
string_map getAfter() const;
std::string getAfterString() const;
std::string getAfterKeys() const;
RunMode getRunMode() const;
State getState() const;
std::unordered_map<std::shared_ptr<AppInfo>, State> getParents() const;
void copyFromData(AppInfo::AppData &other);
bool getCreateLog();
AppInfo();
~AppInfo();
AppInfo(const AppInfo &other) = delete;
AppInfo(const AppInfo &&other) = delete;
AppInfo &operator=(const AppInfo &other) = delete;
bool operator==(const AppInfo &other);
void printInfo(std::ostream& out);
private:
std::string runmodeToString() const;
std::string stateToString() const;
std::string stateToString(State s) const;
};
#endif // APPINFO_H