@@ -128,49 +128,34 @@ 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) "
157- )
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 } " )
162-
142+ stores_to_clear .append (("asset store" , self .config .asset_store , "all BBOT asset data" ))
163143 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" )
144+ stores_to_clear .append (("user store" , self .config .user_store , "all BBOT user data, including presets and targets" ))
145+
146+ for store_name , store_config , data_desc in stores_to_clear :
147+ db_name = store_config .uri .split ("/" )[- 1 ]
148+ prefix = store_config .collection_prefix
149+ if not db_name :
150+ raise self .BBOTServerError (f"{ store_name .title ()} database not found in config" )
167151 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) "
152+ f"Are you sure you want to clear the { store_name } (prefix : { prefix } ) ? This will permanently delete { data_desc } ! (y/N) "
169153 )
170154 if response .lower () != "y" :
171155 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 } " )
156+ drop_eval = f"db.getCollectionNames().filter(c => c.startsWith('{ prefix } ')).forEach(c => db[c].drop())"
157+ self ._run_docker_compose (["exec" , "mongodb" , "mongosh" , "--eval" , drop_eval , db_name ])
158+ self .log .info (f"Successfully cleared { store_name } collections (prefix: { prefix } )" )
174159
175160 def _run_docker_compose (self , args , ** kwargs ):
176161 kwargs ["cwd" ] = self .docker_compose_dir
0 commit comments