| 665 | } |
| 666 | |
| 667 | pub fn setup_openclaw_stats_cron<R: OpenclawRunner>( |
| 668 | runner: &mut R, |
| 669 | channel: Option<&str>, |
| 670 | ) -> Result<(), Box<dyn Error>> { |
| 671 | let mut args: Vec<&str> = vec![ |
| 672 | "cron", |
| 673 | "add", |
| 674 | "--name", |
| 675 | STATS_CRON_JOB_NAME, |
| 676 | "--cron", |
| 677 | "0 9 * * 1", |
| 678 | "--session", |
| 679 | "isolated", |
| 680 | "--message", |
| 681 | STATS_CRON_PROMPT, |
| 682 | ]; |
| 683 | if let Some(ch) = channel { |
| 684 | args.extend_from_slice(&["--announce", "--channel", ch]); |
| 685 | } else { |
| 686 | args.push("--no-deliver"); |
| 687 | } |
| 688 | run_openclaw_command(runner, &args)?; |
| 689 | Ok(()) |
| 690 | } |
| 691 | |
| 692 | pub fn remove_openclaw_stats_cron<R: OpenclawRunner>(runner: &mut R) -> Result<(), Box<dyn Error>> { |
| 693 | run_openclaw_command(runner, &["cron", "remove", STATS_CRON_JOB_NAME])?; |