This paves the way for implementing daggys and other utilities. Squashed commit of the following: commit 1f77239ab3c9e44d190eef94531a39501c8c4dfe Author: Ian Roddis <gitlab@ie2r.com> Date: Mon Oct 18 16:25:02 2021 -0300 Adding README, stdout support for daggyd logging commit c2c237224e84a3be68aaa597ce98af1365e74a13 Author: Ian Roddis <gitlab@ie2r.com> Date: Mon Oct 18 16:10:29 2021 -0300 removing old daggyd commit cfea2baf61ca10c535801c5a391d2d525a1a2d04 Author: Ian Roddis <gitlab@ie2r.com> Date: Mon Oct 18 16:10:09 2021 -0300 Moving tests into their sub-project folders commit e41ca42069bea1db16dd76b6684a3f692fef6b15 Author: Ian Roddis <gitlab@ie2r.com> Date: Mon Oct 18 15:57:40 2021 -0300 Splitting out daggyd from libdaggy commit be97b146c1d2446f5c03cb78707e921f18c60bd8 Author: Ian Roddis <gitlab@ie2r.com> Date: Mon Oct 18 15:56:55 2021 -0300 Splitting out daggyd from libdaggy commit cb61e140e9d6d8832d61fb7037fd4c0ff6edad00 Author: Ian Roddis <gitlab@ie2r.com> Date: Mon Oct 18 15:49:47 2021 -0300 moving daggy to libdaggy
78 lines
2.2 KiB
C++
78 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include <enum.h>
|
|
|
|
#include <chrono>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <unordered_set>
|
|
#include <variant>
|
|
#include <vector>
|
|
|
|
namespace daggy {
|
|
// Commands and parameters
|
|
using ConfigValue = std::variant<std::string, std::vector<std::string>>;
|
|
using ConfigValues = std::unordered_map<std::string, ConfigValue>;
|
|
using Command = std::vector<std::string>;
|
|
|
|
// Time
|
|
using Clock = std::chrono::high_resolution_clock;
|
|
using TimePoint = std::chrono::time_point<Clock>;
|
|
|
|
// DAG Runs
|
|
using DAGRunID = size_t;
|
|
|
|
BETTER_ENUM(RunState, uint32_t, QUEUED = 1, RUNNING, RETRY, ERRORED, KILLED,
|
|
PAUSED, COMPLETED);
|
|
|
|
struct Task
|
|
{
|
|
std::string definedName;
|
|
bool isGenerator; // True if the output of this task is a JSON set of tasks
|
|
// to complete
|
|
uint32_t maxRetries;
|
|
uint32_t retryIntervalSeconds; // Time to wait between retries
|
|
ConfigValues job; // It's up to the individual inspectors to convert values
|
|
// from strings // array of strings
|
|
std::unordered_set<std::string> children;
|
|
std::unordered_set<std::string> parents;
|
|
|
|
bool operator==(const Task &other) const
|
|
{
|
|
return (definedName == other.definedName) and
|
|
(maxRetries == other.maxRetries) and
|
|
(retryIntervalSeconds == other.retryIntervalSeconds) and
|
|
(job == other.job) and (children == other.children) and
|
|
(parents == other.parents) and (isGenerator == other.isGenerator);
|
|
}
|
|
};
|
|
|
|
using TaskSet = std::unordered_map<std::string, Task>;
|
|
|
|
// All the components required to define and run a DAG
|
|
struct TaskParameters
|
|
{
|
|
ConfigValues variables;
|
|
ConfigValues jobDefaults;
|
|
};
|
|
|
|
struct DAGSpec
|
|
{
|
|
std::string tag;
|
|
TaskSet tasks;
|
|
TaskParameters taskConfig;
|
|
};
|
|
|
|
struct AttemptRecord
|
|
{
|
|
TimePoint startTime;
|
|
TimePoint stopTime;
|
|
int rc; // RC from the task
|
|
std::string executorLog; // Logs from the dag_executor
|
|
std::string outputLog; // stdout from command
|
|
std::string errorLog; // stderr from command
|
|
};
|
|
} // namespace daggy
|
|
|
|
BETTER_ENUMS_DECLARE_STD_HASH(daggy::RunState)
|