diff --git a/chainsight-cdk-macros/src/snapshots/chainsight_cdk_macros__utils__tests__snapshot__define_logger.snap b/chainsight-cdk-macros/src/snapshots/chainsight_cdk_macros__utils__tests__snapshot__define_logger.snap index 7f8668b..b3a320b 100644 --- a/chainsight-cdk-macros/src/snapshots/chainsight_cdk_macros__utils__tests__snapshot__define_logger.snap +++ b/chainsight-cdk-macros/src/snapshots/chainsight_cdk_macros__utils__tests__snapshot__define_logger.snap @@ -18,10 +18,6 @@ fn drain_logs(rows: usize) -> Vec { fn init_logger() { schedule_cleanup(); } -#[ic_cdk::post_upgrade] -fn post_upgrade_logger() { - schedule_cleanup(); -} fn schedule_cleanup() { ic_cdk_timers::set_timer_interval(std::time::Duration::from_secs(86400u64), || { ic_cdk::spawn(async { @@ -39,3 +35,7 @@ fn schedule_cleanup() { fn _logger() -> LoggerImpl { LoggerImpl::new(Some("Logger")) } +#[ic_cdk::post_upgrade] +fn post_upgrade_logger() { + schedule_cleanup(); +} diff --git a/chainsight-cdk-macros/src/utils.rs b/chainsight-cdk-macros/src/utils.rs index 584cb91..48bb8c9 100644 --- a/chainsight-cdk-macros/src/utils.rs +++ b/chainsight-cdk-macros/src/utils.rs @@ -2,7 +2,7 @@ use proc_macro::TokenStream; use quote::quote; use syn::{ parse::{Parse, ParseStream}, - parse_macro_input, DeriveInput, LitInt, Result, + parse_macro_input, DeriveInput, LitBool, LitInt, Result, }; pub fn chainsight_common(_input: TokenStream) -> TokenStream { @@ -21,27 +21,35 @@ fn chainsight_common_internal() -> proc_macro2::TokenStream { struct DefineLoggerArgs { retention_days: Option, cleanup_interval_days: Option, + disable_post_upgrade: bool, } impl Parse for DefineLoggerArgs { fn parse(input: ParseStream) -> Result { if input.is_empty() { - return Ok(DefineLoggerArgs { - retention_days: None, - cleanup_interval_days: None, - }); + return Ok(DefineLoggerArgs::default()); } let retention_days: Option = input.parse()?; let retention_days = retention_days.map(|x| x.base10_parse::().unwrap()); if input.parse::().is_err() { return Ok(DefineLoggerArgs { retention_days, - cleanup_interval_days: None, + ..Default::default() }); } let cleanup_interval_days: Option = input.parse()?; + let cleanup_interval_days = cleanup_interval_days.map(|x| x.base10_parse::().unwrap()); + if input.parse::().is_err() { + return Ok(DefineLoggerArgs { + retention_days, + cleanup_interval_days, + ..Default::default() + }); + } + let disable_post_upgrade: Option = input.parse()?; Ok(DefineLoggerArgs { retention_days, - cleanup_interval_days: cleanup_interval_days.map(|x| x.base10_parse().unwrap()), + cleanup_interval_days, + disable_post_upgrade: disable_post_upgrade.map(|x| x.value).unwrap_or_default(), }) } } @@ -53,7 +61,7 @@ pub fn define_logger(input: TokenStream) -> TokenStream { fn define_logger_internal(args: DefineLoggerArgs) -> proc_macro2::TokenStream { let retention_days = args.retention_days.unwrap_or(7); let cleanup_interval = args.cleanup_interval_days.unwrap_or(1) as u64 * 86400; - quote! { + let code = quote! { use chainsight_cdk::log::{Logger, LoggerImpl}; #[candid::candid_method(query)] @@ -74,11 +82,6 @@ fn define_logger_internal(args: DefineLoggerArgs) -> proc_macro2::TokenStream { schedule_cleanup(); } - #[ic_cdk::post_upgrade] - fn post_upgrade_logger() { - schedule_cleanup(); - } - fn schedule_cleanup() { ic_cdk_timers::set_timer_interval(std::time::Duration::from_secs(#cleanup_interval), || { ic_cdk::spawn(async { @@ -91,6 +94,24 @@ fn define_logger_internal(args: DefineLoggerArgs) -> proc_macro2::TokenStream { fn _logger() -> LoggerImpl { LoggerImpl::new(Some("Logger")) } + }; + if args.disable_post_upgrade { + quote! { + #code + + fn post_upgrade_logger() { + schedule_cleanup(); + } + } + } else { + quote! { + #code + + #[ic_cdk::post_upgrade] + fn post_upgrade_logger() { + schedule_cleanup(); + } + } } }