spin_runtime_factors/
build.rs1use std::path::PathBuf;
2
3use super::{TriggerAppArgs, TriggerFactors, TriggerFactorsRuntimeConfig};
4
5use anyhow::Context as _;
6use spin_factors_executor::FactorsExecutor;
7use spin_runtime_config::ResolvedRuntimeConfig;
8use spin_trigger::cli::{
9 FactorsConfig, InitialKvSetterHook, KeyValueDefaultStoreSummaryHook, MaxInstanceMemoryHook,
10 RuntimeFactorsBuilder, SqlStatementExecutorHook, SqliteDefaultStoreSummaryHook,
11 StdioLoggingExecutorHooks,
12};
13
14pub struct FactorsBuilder;
16
17impl RuntimeFactorsBuilder for FactorsBuilder {
18 type CliArgs = TriggerAppArgs;
19 type Factors = TriggerFactors;
20 type RuntimeConfig = ResolvedRuntimeConfig<TriggerFactorsRuntimeConfig>;
21
22 fn build(
23 config: &FactorsConfig,
24 args: &Self::CliArgs,
25 ) -> anyhow::Result<(Self::Factors, Self::RuntimeConfig)> {
26 let runtime_config = ResolvedRuntimeConfig::<TriggerFactorsRuntimeConfig>::from_file(
27 config.runtime_config_file.clone().as_deref(),
28 config.local_app_dir.clone().map(PathBuf::from),
29 config.state_dir.clone(),
30 config.log_dir.clone(),
31 )?;
32
33 runtime_config.summarize(config.runtime_config_file.as_deref());
34
35 let factors = TriggerFactors::new(
36 runtime_config.state_dir(),
37 config.working_dir.clone(),
38 args.allow_transient_write,
39 )
40 .context("failed to create factors")?;
41 Ok((factors, runtime_config))
42 }
43
44 fn configure_app<U: Send + 'static>(
45 executor: &mut FactorsExecutor<Self::Factors, U>,
46 runtime_config: &Self::RuntimeConfig,
47 config: &FactorsConfig,
48 args: &Self::CliArgs,
49 ) -> anyhow::Result<()> {
50 executor.add_hooks(StdioLoggingExecutorHooks::new(
51 config.follow_components.clone(),
52 runtime_config.log_dir(),
53 ));
54 executor.add_hooks(SqlStatementExecutorHook::new(
55 args.sqlite_statements.clone(),
56 ));
57 executor.add_hooks(InitialKvSetterHook::new(args.key_values.clone()));
58 executor.add_hooks(SqliteDefaultStoreSummaryHook);
59 executor.add_hooks(KeyValueDefaultStoreSummaryHook);
60
61 let max_instance_memory = args
62 .max_instance_memory
63 .or(runtime_config.max_instance_memory());
64
65 if let Some(max_instance_memory) = max_instance_memory {
67 executor.add_hooks(MaxInstanceMemoryHook::new(max_instance_memory));
68 }
69
70 Ok(())
71 }
72}