@@ -128,49 +128,36 @@ def logs(
128128 @subcommand (help = "Clear the database (drop Mongodb collections)." )
129129 def cleardb (
130130 self ,
131- event_store : Annotated [bool , Option ("--event-store" , "-e" , help = "Clear the event store database " )] = False ,
132- asset_store : Annotated [bool , Option ("--asset-store" , "-a" , help = "Clear the asset store database " )] = False ,
133- user_store : Annotated [bool , Option ("--user-store" , "-u" , help = "Clear the user store database " )] = False ,
131+ event_store : Annotated [bool , Option ("--event-store" , "-e" , help = "Clear the event store collections " )] = False ,
132+ asset_store : Annotated [bool , Option ("--asset-store" , "-a" , help = "Clear the asset store collections " )] = False ,
133+ user_store : Annotated [bool , Option ("--user-store" , "-u" , help = "Clear the user store collections " )] = False ,
134134 ):
135135 if not event_store and not asset_store and not user_store :
136- raise self .BBOTServerError (f"Must specify at least one database to clear" )
136+ raise self .BBOTServerError (f"Must specify at least one store to clear" )
137137
138+ stores_to_clear = []
138139 if event_store :
139- event_store_db = self .config .event_store .uri .split ("/" )[- 1 ]
140- if not event_store_db :
141- raise self .BBOTServerError ("Event store database not found in config" )
142- response = input (
143- f"Are you sure you want to clear the event store database: { event_store_db } ? This will permanently delete all BBOT scan events! (y/N) "
144- )
145- if response .lower () != "y" :
146- raise self .BBOTServerError ("Aborting" )
147-
148- self ._run_docker_compose (["exec" , "mongodb" , "mongosh" , "--eval" , "db.dropDatabase()" , event_store_db ])
149- self .log .info (f"Successfully cleared event store database: { event_store_db } " )
150-
140+ stores_to_clear .append (("event store" , self .config .event_store , "all BBOT scan events" ))
151141 if asset_store :
152- asset_store_db = self .config .asset_store .uri .split ("/" )[- 1 ]
153- if not asset_store_db :
154- raise self .BBOTServerError ("Asset store database not found in config" )
155- response = input (
156- f"Are you sure you want to clear the asset store database: { asset_store_db } ? This will permanently delete all BBOT asset data! (y/N) "
142+ stores_to_clear .append (("asset store" , self .config .asset_store , "all BBOT asset data" ))
143+ if user_store :
144+ stores_to_clear .append (
145+ ("user store" , self .config .user_store , "all BBOT user data, including presets and targets" )
157146 )
158- if response .lower () != "y" :
159- raise self .BBOTServerError ("Aborting" )
160- self ._run_docker_compose (["exec" , "mongodb" , "mongosh" , "--eval" , "db.dropDatabase()" , asset_store_db ])
161- self .log .info (f"Successfully cleared asset store database: { asset_store_db } " )
162147
163- if user_store :
164- user_store_db = self .config .user_store .uri .split ("/" )[- 1 ]
165- if not user_store_db :
166- raise self .BBOTServerError ("User store database not found in config" )
148+ for store_name , store_config , data_desc in stores_to_clear :
149+ db_name = store_config .uri .split ("/" )[- 1 ]
150+ prefix = store_config .collection_prefix
151+ if not db_name :
152+ raise self .BBOTServerError (f"{ store_name .title ()} database not found in config" )
167153 response = input (
168- f"Are you sure you want to clear the user store database : { user_store_db } ? This will permanently delete all BBOT user data, including presets and targets ! (y/N) "
154+ f"Are you sure you want to clear the { store_name } (prefix : { prefix } ) ? This will permanently delete { data_desc } ! (y/N) "
169155 )
170156 if response .lower () != "y" :
171157 raise self .BBOTServerError ("Aborting" )
172- self ._run_docker_compose (["exec" , "mongodb" , "mongosh" , "--eval" , "db.dropDatabase()" , user_store_db ])
173- self .log .info (f"Successfully cleared user store database: { user_store_db } " )
158+ drop_eval = f"db.getCollectionNames().filter(c => c.startsWith('{ prefix } ')).forEach(c => db[c].drop())"
159+ self ._run_docker_compose (["exec" , "mongodb" , "mongosh" , "--eval" , drop_eval , db_name ])
160+ self .log .info (f"Successfully cleared { store_name } collections (prefix: { prefix } )" )
174161
175162 def _run_docker_compose (self , args , ** kwargs ):
176163 kwargs ["cwd" ] = self .docker_compose_dir
0 commit comments