def cuckoo_clean(): """Clean up cuckoo setup. It deletes logs, all stored data from file system and configured databases (SQL and MongoDB). """ # Init logging (without writing to file). init_console_logging() try: # Initialize the database connection. db = Database() db.connect(schema_check=False) # Drop all tables. db.drop() except (CuckooDependencyError, CuckooDatabaseError) as e: # If something is screwed due to incorrect database migrations or bad # database SqlAlchemy would be unable to connect and operate. log.warning( "Error connecting to database: it is suggested to check " "the connectivity, apply all migrations if needed or purge " "it manually. Error description: %s", e) # Check if MongoDB reporting is enabled and drop the database if it is. if mongo.init(): try: mongo.connect() mongo.drop() mongo.close() except Exception as e: log.warning("Unable to drop MongoDB database: %s", e) # Check if ElasticSearch reporting is enabled and drop its data if it is. if elastic.init(): elastic.connect() # TODO This should be moved to the elastic abstract. # TODO We should also drop historic data, i.e., from pervious days, # months, and years. date_index = datetime.datetime.utcnow().strftime({ "yearly": "%Y", "monthly": "%Y-%m", "daily": "%Y-%m-%d", }[elastic.index_time_pattern]) dated_index = "%s-%s" % (elastic.index, date_index) elastic.client.indices.delete(index=dated_index, ignore=[400, 404]) template_name = "%s_template" % dated_index if elastic.client.indices.exists_template(template_name): elastic.client.indices.delete_template(template_name) # Paths to clean. paths = [ cwd("cuckoo.db"), cwd("log"), cwd("storage", "analyses"), cwd("storage", "baseline"), cwd("storage", "binaries"), ] # Delete the various files and directories. In case of directories, keep # the parent directories, so to keep the state of the CWD in tact. for path in paths: if os.path.isdir(path): try: shutil.rmtree(path) os.mkdir(path) except (IOError, OSError) as e: log.warning("Error removing directory %s: %s", path, e) elif os.path.isfile(path): try: os.unlink(path) except (IOError, OSError) as e: log.warning("Error removing file %s: %s", path, e)
def cuckoo_clean(): """Clean up cuckoo setup. It deletes logs, all stored data from file system and configured databases (SQL and MongoDB). """ # Init logging (without writing to file). init_console_logging() try: # Initialize the database connection. db = Database() db.connect(schema_check=False) # Drop all tables. db.drop() except (CuckooDependencyError, CuckooDatabaseError) as e: # If something is screwed due to incorrect database migrations or bad # database SqlAlchemy would be unable to connect and operate. log.warning("Error connecting to database: it is suggested to check " "the connectivity, apply all migrations if needed or purge " "it manually. Error description: %s", e) # Check if MongoDB reporting is enabled and drop the database if it is. if mongo.init(): try: mongo.connect() mongo.drop() mongo.close() except Exception as e: log.warning("Unable to drop MongoDB database: %s", e) # Check if ElasticSearch reporting is enabled and drop its data if it is. if elastic.init(): elastic.connect() # TODO This should be moved to the elastic abstract. # TODO We should also drop historic data, i.e., from pervious days, # months, and years. date_index = datetime.datetime.utcnow().strftime({ "yearly": "%Y", "monthly": "%Y-%m", "daily": "%Y-%m-%d", }[elastic.index_time_pattern]) dated_index = "%s-%s" % (elastic.index, date_index) elastic.client.indices.delete( index=dated_index, ignore=[400, 404] ) template_name = "%s_template" % dated_index if elastic.client.indices.exists_template(template_name): elastic.client.indices.delete_template(template_name) # Paths to clean. paths = [ cwd("cuckoo.db"), cwd("log"), cwd("storage", "analyses"), cwd("storage", "baseline"), cwd("storage", "binaries"), ] # Delete the various files and directories. In case of directories, keep # the parent directories, so to keep the state of the CWD in tact. for path in paths: if os.path.isdir(path): try: shutil.rmtree(path) os.mkdir(path) except (IOError, OSError) as e: log.warning("Error removing directory %s: %s", path, e) elif os.path.isfile(path): try: os.unlink(path) except (IOError, OSError) as e: log.warning("Error removing file %s: %s", path, e)