@@ -12,20 +12,50 @@ use {
12
12
} ,
13
13
anyhow:: { Context as _, Result } ,
14
14
bot:: meigen:: MeigenBot ,
15
+ sentry:: ClientInitGuard ,
15
16
} ;
16
17
17
18
assert_one_feature ! ( "discord_client" , "console_client" ) ;
18
19
assert_one_feature ! ( "mongo_db" , "memory_db" ) ;
19
20
assert_one_feature ! ( "plot_plotters" , "plot_matplotlib" ) ;
20
21
21
- #[ tokio:: main]
22
- async fn main ( ) -> Result < ( ) > {
22
+ fn setup_sentry ( ) -> Option < ClientInitGuard > {
23
+ let Ok ( sentry_dsn) = env_var ( "SENTRY_DSN" ) else {
24
+ #[ cfg( not( debug_assertions) ) ]
25
+ panic ! ( "SENTRY_DSN is not set" ) ;
26
+ #[ cfg( debug_assertions) ]
27
+ return None ;
28
+ } ;
29
+
30
+ let guard = sentry:: init ( (
31
+ sentry_dsn,
32
+ sentry:: ClientOptions {
33
+ release : sentry:: release_name!( ) ,
34
+ ..Default :: default ( )
35
+ } ,
36
+ ) ) ;
37
+
38
+ tracing:: info!( "sentry initialized" ) ;
39
+
40
+ Some ( guard)
41
+ }
42
+
43
+ fn main ( ) -> Result < ( ) > {
23
44
dotenv:: dotenv ( ) . ok ( ) ;
24
45
25
46
let use_ansi = env_var ( "NO_COLOR" ) . is_err ( ) ;
26
-
27
47
tracing_subscriber:: fmt ( ) . with_ansi ( use_ansi) . init ( ) ;
28
48
49
+ let _guard = setup_sentry ( ) ;
50
+
51
+ tokio:: runtime:: Builder :: new_multi_thread ( )
52
+ . enable_all ( )
53
+ . build ( )
54
+ . unwrap ( )
55
+ . block_on ( async_main ( ) )
56
+ }
57
+
58
+ async fn async_main ( ) -> Result < ( ) > {
29
59
#[ cfg( feature = "memory_db" ) ]
30
60
let local_db = crate :: db:: mem:: MemoryDB :: new ( ) ;
31
61
#[ cfg( feature = "memory_db" ) ]
0 commit comments