Improve names used for definitions in externalServices.prs

This commit is contained in:
Tony Garnock-Jones 2021-09-30 15:38:40 +02:00
parent ed12c0883e
commit b373d3440a
3 changed files with 31 additions and 30 deletions

View File

@ -1,3 +1,5 @@
´³bundle·µ³externalServices„´³schema·³version³ definitions·³Service´³refµ„³ DaemonService„³ClearEnv´³orµµ±present´³dict·³clearEnv´³named³clearEnv´³atom³Boolean„„„„„µ±invalid´³dict·³clearEnv´³named³clearEnv³any„„„„µ±absent´³dict·„„„„„³DaemonId³any³EnvValue´³orµµ±set´³atom³String„„µ±remove´³lit€„„µ±invalid³any„„„³ DaemonDir´³orµµ±present´³dict·³dir´³named³dir´³atom³String„„„„„µ±invalid´³dict·³dir´³named³dir³any„„„„µ±absent´³dict·„„„„„³ DaemonEnv´³orµµ±present´³dict·³env´³named³env´³dictof´³refµ„³ EnvVariable„´³refµ„³EnvValue„„„„„„µ±invalid´³dict·³env´³named³env³any„„„„µ±absent´³dict·„„„„„³ ´³bundle·µ³externalServices„´³schema·³version³ definitions·³Process´³orµµ±simple´³refµ„³ CommandLine„„µ±full´³refµ„³ FullProcess„„„„³Service´³refµ„³ DaemonService„³ClearEnv´³orµµ±present´³dict·³clearEnv´³named³clearEnv´³atom³Boolean„„„„„µ±invalid´³dict·³clearEnv´³named³clearEnv³any„„„„µ±absent´³dict·„„„„„³EnvValue´³orµµ±set´³atom³String„„µ±remove´³lit€„„µ±invalid³any„„„³
DaemonSpec´³orµµ±simple´³refµ„³ CommandLine„„µ±full´³refµ„³FullDaemonSpec„„„„³ CommandLine´³orµµ±shell´³atom³String„„µ±full´³refµ„³FullCommandLine„„„„³ EnvVariable´³orµµ±string´³atom³String„„µ±symbol´³atom³Symbol„„µ±invalid³any„„„³ ReadyOnStart´³orµµ±present´³dict·³ readyOnStart´³named³ readyOnStart´³atom³Boolean„„„„„µ±invalid´³dict·³ readyOnStart´³named³ readyOnStart³any„„„„µ±absent´³dict·„„„„„³ RestartField´³orµµ±present´³dict·³restart´³named³restart´³refµ„³ RestartPolicy„„„„„µ±invalid´³dict·³restart´³named³restart³any„„„„µ±absent´³dict·„„„„„³ DaemonProcess´³rec´³lit³daemon„´³tupleµ´³named³id´³refµ„³DaemonId„„´³named³config´³refµ„³ ProcessDir´³orµµ±present´³dict·³dir´³named³dir´³atom³String„„„„„µ±invalid´³dict·³dir´³named³dir³any„„„„µ±absent´³dict·„„„„„³
DaemonSpec„„„„„³ DaemonService´³rec´³lit³daemon„´³tupleµ´³named³id´³refµ„³DaemonId„„„„„³ RestartPolicy´³orµµ±always´³lit³always„„µ±onError´³lit³on-error„„µ±all´³lit³all„„„„³FullDaemonSpec´³andµ´³dict·³argv´³named³argv´³refµ„³ CommandLine„„„„´³named³env´³refµ„³ DaemonEnv„„´³named³dir´³refµ„³ DaemonDir„„´³named³clearEnv´³refµ„³ClearEnv„„´³named³ readyOnStart´³refµ„³ ReadyOnStart„„´³named³restart´³refµ„³ RestartField„„„„³FullCommandLine´³ tuplePrefixµ´³named³program´³atom³String„„„´³named³args´³seqof´³atom³String„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³internalServices„´³schema·³version³ definitions·³ Milestone´³rec´³lit³ milestone„´³tupleµ´³named³name³any„„„„³ DebtReporter´³lit³ debt-reporter„³ ConfigWatcher´³rec´³lit³config-watcher„´³tupleµ´³named³path´³atom³String„„„„„³TcpRelayListener´³rec´³lit³relay-listener„´³tupleµ´³named³addr´³refµ³TransportAddress„³Tcp„„„„„³UnixRelayListener´³rec´³lit³relay-listener„´³tupleµ´³named³addr´³refµ³TransportAddress„³Unix„„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„„„ ProcessEnv´³orµµ±present´³dict·³env´³named³env´³dictof´³refµ„³ EnvVariable„´³refµ„³EnvValue„„„„„„µ±invalid´³dict·³env´³named³env³any„„„„µ±absent´³dict·„„„„„³ CommandLine´³orµµ±shell´³atom³String„„µ±full´³refµ„³FullCommandLine„„„„³ EnvVariable´³orµµ±string´³atom³String„„µ±symbol´³atom³Symbol„„µ±invalid³any„„„³ FullProcess´³andµ´³dict·³argv´³named³argv´³refµ„³ CommandLine„„„„´³named³env´³refµ„³
ProcessEnv„„´³named³dir´³refµ„³
ProcessDir„„´³named³clearEnv´³refµ„³ClearEnv„„´³named³ readyOnStart´³refµ„³ ReadyOnStart„„´³named³restart´³refµ„³ RestartField„„„„³ ReadyOnStart´³orµµ±present´³dict·³ readyOnStart´³named³ readyOnStart´³atom³Boolean„„„„„µ±invalid´³dict·³ readyOnStart´³named³ readyOnStart³any„„„„µ±absent´³dict·„„„„„³ RestartField´³orµµ±present´³dict·³restart´³named³restart´³refµ„³ RestartPolicy„„„„„µ±invalid´³dict·³restart´³named³restart³any„„„„µ±absent´³dict·„„„„„³ DaemonProcess´³rec´³lit³daemon„´³tupleµ´³named³id³any„´³named³config´³refµ„³Process„„„„„³ DaemonService´³rec´³lit³daemon„´³tupleµ´³named³id³any„„„„³ RestartPolicy´³orµµ±always´³lit³always„„µ±onError´³lit³on-error„„µ±all´³lit³all„„„„³FullCommandLine´³ tuplePrefixµ´³named³program´³atom³String„„„´³named³args´³seqof´³atom³String„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„µ³internalServices„´³schema·³version³ definitions·³ Milestone´³rec´³lit³ milestone„´³tupleµ´³named³name³any„„„„³ DebtReporter´³lit³ debt-reporter„³ ConfigWatcher´³rec´³lit³config-watcher„´³tupleµ´³named³path´³atom³String„„„„„³TcpRelayListener´³rec´³lit³relay-listener„´³tupleµ´³named³addr´³refµ³TransportAddress„³Tcp„„„„„³UnixRelayListener´³rec´³lit³relay-listener„´³tupleµ´³named³addr´³refµ³TransportAddress„³Unix„„„„„„³ embeddedType´³refµ³ EntityRef„³Cap„„„„„

View File

@ -3,21 +3,20 @@ embeddedType EntityRef.Cap .
Service = DaemonService . Service = DaemonService .
DaemonService = <daemon @id DaemonId> . DaemonService = <daemon @id any> .
DaemonProcess = <daemon @id any @config Process>.
DaemonProcess = <daemon @id DaemonId @config DaemonSpec>. Process = @simple CommandLine / @full FullProcess .
DaemonId = any . FullProcess =
DaemonSpec = @simple CommandLine / @full FullDaemonSpec .
FullDaemonSpec =
& { argv: CommandLine } & { argv: CommandLine }
& @env DaemonEnv & @env ProcessEnv
& @dir DaemonDir & @dir ProcessDir
& @clearEnv ClearEnv & @clearEnv ClearEnv
& @readyOnStart ReadyOnStart & @readyOnStart ReadyOnStart
& @restart RestartField & @restart RestartField
. .
DaemonEnv = @present { env: { EnvVariable: EnvValue ...:... } } / @invalid { env: any } / @absent {} . ProcessEnv = @present { env: { EnvVariable: EnvValue ...:... } } / @invalid { env: any } / @absent {} .
DaemonDir = @present { dir: string } / @invalid { dir: any } / @absent {} . ProcessDir = @present { dir: string } / @invalid { dir: any } / @absent {} .
ClearEnv = @present { clearEnv: bool } / @invalid { clearEnv: any } / @absent {} . ClearEnv = @present { clearEnv: bool } / @invalid { clearEnv: any } / @absent {} .
ReadyOnStart = @present { readyOnStart: bool } / @invalid { readyOnStart: any } / @absent {} . ReadyOnStart = @present { readyOnStart: bool } / @invalid { readyOnStart: any } / @absent {} .
RestartField = @present { restart: RestartPolicy } / @invalid { restart: any } / @absent {} . RestartField = @present { restart: RestartPolicy } / @invalid { restart: any } / @absent {} .

View File

@ -34,18 +34,18 @@ fn cannot_start<R>() -> Result<R, Error> {
Err("Cannot start daemon process")? Err("Cannot start daemon process")?
} }
impl DaemonSpec { impl Process {
fn elaborate(self) -> FullDaemonSpec { fn elaborate(self) -> FullProcess {
match self { match self {
DaemonSpec::Simple(command_line) => FullDaemonSpec { Process::Simple(command_line) => FullProcess {
argv: *command_line, argv: *command_line,
env: DaemonEnv::Absent, env: ProcessEnv::Absent,
dir: DaemonDir::Absent, dir: ProcessDir::Absent,
clear_env: ClearEnv::Absent, clear_env: ClearEnv::Absent,
ready_on_start: ReadyOnStart::Absent, ready_on_start: ReadyOnStart::Absent,
restart: RestartField::Absent, restart: RestartField::Absent,
}, },
DaemonSpec::Full(spec) => *spec, Process::Full(spec) => *spec,
} }
} }
} }
@ -62,7 +62,7 @@ impl CommandLine {
} }
} }
struct DaemonProcessInstance { struct ProcessInstance {
name: tracing::Span, name: tracing::Span,
cmd: process::Command, cmd: process::Command,
announce_presumed_readiness: bool, announce_presumed_readiness: bool,
@ -71,7 +71,7 @@ struct DaemonProcessInstance {
restart_policy: RestartPolicy, restart_policy: RestartPolicy,
} }
impl DaemonProcessInstance { impl ProcessInstance {
fn handle_exit(self, t: &mut Activation, error_message: Option<String>) -> ActorResult { fn handle_exit(self, t: &mut Activation, error_message: Option<String>) -> ActorResult {
let delay = let delay =
std::time::Duration::from_millis(if let None = error_message { 200 } else { 1000 }); std::time::Duration::from_millis(if let None = error_message { 200 } else { 1000 });
@ -178,13 +178,13 @@ fn run(
Ok(()) Ok(())
}))?; }))?;
enclose!((unready_configs, completed_processes) during!(t, config_ds, language(), <daemon #(service.id.0) $config>, { enclose!((unready_configs, completed_processes) during!(t, config_ds, language(), <daemon #(service.id) $config>, {
enclose!((unready_configs, completed_processes) |t: &mut Activation| { enclose!((unready_configs, completed_processes) |t: &mut Activation| {
tracing::debug!(?config, "new config"); tracing::debug!(?config, "new config");
counter::adjust(t, &unready_configs, 1); counter::adjust(t, &unready_configs, 1);
counter::adjust(t, &total_configs, 1); counter::adjust(t, &total_configs, 1);
match language().parse::<DaemonSpec>(&config) { match language().parse::<Process>(&config) {
Ok(config) => { Ok(config) => {
tracing::info!(?config); tracing::info!(?config);
let config = config.elaborate(); let config = config.elaborate();
@ -194,9 +194,9 @@ fn run(
let mut cmd = process::Command::new(argv.program); let mut cmd = process::Command::new(argv.program);
cmd.args(argv.args); cmd.args(argv.args);
match config.dir { match config.dir {
DaemonDir::Present { dir } => { cmd.current_dir(dir); () }, ProcessDir::Present { dir } => { cmd.current_dir(dir); () },
DaemonDir::Absent => (), ProcessDir::Absent => (),
DaemonDir::Invalid { dir } => { ProcessDir::Invalid { dir } => {
tracing::error!(?dir, "Invalid working directory"); tracing::error!(?dir, "Invalid working directory");
return cannot_start(); return cannot_start();
} }
@ -211,7 +211,7 @@ fn run(
} }
} }
match config.env { match config.env {
DaemonEnv::Present { env } => { ProcessEnv::Present { env } => {
for (k, v) in env { for (k, v) in env {
if let Some(env_variable) = match k { if let Some(env_variable) = match k {
EnvVariable::String(k) => Some(k), EnvVariable::String(k) => Some(k),
@ -234,8 +234,8 @@ fn run(
} }
} }
} }
DaemonEnv::Absent => (), ProcessEnv::Absent => (),
DaemonEnv::Invalid { env } => { ProcessEnv::Invalid { env } => {
tracing::error!(?env, "Invalid daemon environment"); tracing::error!(?env, "Invalid daemon environment");
return cannot_start(); return cannot_start();
} }
@ -262,7 +262,7 @@ fn run(
cmd.stderr(std::process::Stdio::inherit()); cmd.stderr(std::process::Stdio::inherit());
cmd.kill_on_drop(true); cmd.kill_on_drop(true);
let process_instance = DaemonProcessInstance { let process_instance = ProcessInstance {
name: tracing::Span::current(), name: tracing::Span::current(),
cmd, cmd,
announce_presumed_readiness, announce_presumed_readiness,
@ -279,7 +279,7 @@ fn run(
Ok(()) Ok(())
} }
Err(_) => { Err(_) => {
tracing::error!(?config, "Invalid DaemonSpec"); tracing::error!(?config, "Invalid Process specification");
return Ok(()); return Ok(());
} }
} }