From 07856f31193022664890b8440b95f331b7e91da3 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 24 Aug 2016 11:32:48 +0200 Subject: [PATCH 01/13] Added script module-dataflow-graph + fixed bug in module.cfg preventing the credential module to receive data. --- bin/packages/modules.cfg | 2 +- doc/generate_graph_data.py | 62 ++++++++++++++++++++++++ doc/generate_modules_data_flow_graph.sh | 3 ++ doc/module-data-flow.png | Bin 0 -> 155381 bytes installing_deps.sh | 3 ++ 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100755 doc/generate_graph_data.py create mode 100755 doc/generate_modules_data_flow_graph.sh create mode 100644 doc/module-data-flow.png diff --git a/bin/packages/modules.cfg b/bin/packages/modules.cfg index 7434def8..0243038a 100644 --- a/bin/packages/modules.cfg +++ b/bin/packages/modules.cfg @@ -34,7 +34,7 @@ subscribe = Redis_Global publish = Redis_CreditCards,Redis_Mail,Redis_Onion,Redis_Web,Redis_Credential,Redis_SourceCode,Redis_Cve [CreditCards] -subscribe = Redis_CreditCard +subscribe = Redis_CreditCards publish = Redis_Duplicate,Redis_ModuleStats,Redis_BrowseWarningPaste [Mail] diff --git a/doc/generate_graph_data.py b/doc/generate_graph_data.py new file mode 100755 index 00000000..cff1f538 --- /dev/null +++ b/doc/generate_graph_data.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python2 +# -*-coding:UTF-8 -* + +content = "" +modules = {} +all_modules = [] +curr_module = "" +streamingPub = {} +streamingSub = {} + +with open('../bin/packages/modules.cfg', 'r') as f: + for line in f: + if line[0] != '#': + if line[0] == '[': + curr_name = line.replace('[','').replace(']','').replace('\n', '').replace(' ', '') + all_modules.append(curr_name) + modules[curr_name] = {'sub': [], 'pub': []} + curr_module = curr_name + elif curr_module != "": # searching for sub or pub + if line.startswith("subscribe"): + curr_subscribers = [w for w in line.replace('\n', '').replace(' ', '').split('=')[1].split(',')] + modules[curr_module]['sub'] = curr_subscribers + for sub in curr_subscribers: + streamingSub[sub] = curr_module + + elif line.startswith("publish"): + curr_publishers = [w for w in line.replace('\n', '').replace(' ', '').split('=')[1].split(',')] + modules[curr_module]['pub'] = curr_publishers + for pub in curr_publishers: + streamingPub[pub] = curr_module + else: + continue + + output_set_graph = set() + + for module in modules.keys(): + for stream_in in modules[module]['sub']: + if stream_in not in streamingPub.keys(): + output_set_graph.add("\"" + stream_in + "\" [color=darkorange1] ;\n") + output_set_graph.add("\"" + stream_in + "\"" + "->" + module + ";\n") + else: + output_set_graph.add("\"" + streamingPub[stream_in] + "\"" + "->" + module + ";\n") + + for stream_out in modules[module]['pub']: + if stream_out not in streamingSub.keys(): + output_set_graph.add("\"" + stream_out + "\" [color=darkorange1] ;\n") + output_set_graph.add("\"" + stream_out + "\"" + "->" + module + ";\n") + else: + output_set_graph.add("\"" + module + "\"" + "->" + streamingSub[stream_out] + ";\n") + + + output_text_graph = "" + output_text_graph += "digraph unix {\n"\ + "graph [pad=\"0.5\"];\n"\ + "size=\"25,25\";\n"\ + "node [color=lightblue2, style=filled];\n" + + for elem in output_set_graph: + output_text_graph += elem + + output_text_graph += "}" + print output_text_graph diff --git a/doc/generate_modules_data_flow_graph.sh b/doc/generate_modules_data_flow_graph.sh new file mode 100755 index 00000000..90a578e0 --- /dev/null +++ b/doc/generate_modules_data_flow_graph.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +python generate_graph_data.py | dot -T png -o module-data-flow.png diff --git a/doc/module-data-flow.png b/doc/module-data-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..73ed3b1d6d0cc57a125415352bd41fe13d03f82e GIT binary patch literal 155381 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%0AqkF^G3eK@y-^bx7;TM>a3w*Z&!Alv_g*d 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 literal 0 HcmV?d00001 diff --git a/installing_deps.sh b/installing_deps.sh index 6af62795..1f6d8c68 100755 --- a/installing_deps.sh +++ b/installing_deps.sh @@ -17,6 +17,9 @@ sudo apt-get install libadns1 libadns1-dev #Needed for redis-lvlDB sudo apt-get install libev-dev libgmp-dev +#Need for generate-data-flow graph +sudo apt-get install graphviz + #needed for mathplotlib test ! -L /usr/include/ft2build.h && sudo ln -s freetype2/ft2build.h /usr/include/ sudo easy_install -U distribute From deeebec2f56f21bbdb4ee3e3cd6640ea7fd72182 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 24 Aug 2016 15:21:41 +0200 Subject: [PATCH 02/13] Added new module 'ModuleInformation' which gives real time information on running module --- bin/Curve_manage_top_sets.py | 14 ++++++---- bin/Helper.py | 22 +++++++++++++++- bin/ModuleInformations.py | 47 ++++++++++++++++++++++++++++++++++ doc/screenshots/sentiment.png | Bin 57790 -> 0 bytes 4 files changed, 77 insertions(+), 6 deletions(-) create mode 100755 bin/ModuleInformations.py delete mode 100644 doc/screenshots/sentiment.png diff --git a/bin/Curve_manage_top_sets.py b/bin/Curve_manage_top_sets.py index 34c1c238..a88ff8b4 100755 --- a/bin/Curve_manage_top_sets.py +++ b/bin/Curve_manage_top_sets.py @@ -22,8 +22,7 @@ from pubsublogger import publisher from packages import lib_words import datetime import calendar - -from Helper import Process +import ConfigParser # Config Variables Refresh_rate = 60*5 #sec @@ -96,8 +95,14 @@ if __name__ == '__main__': # Script is the default channel used for the modules. publisher.channel = 'Script' - config_section = 'CurveManageTopSets' - p = Process(config_section) + configfile = os.path.join(os.environ['AIL_BIN'], 'packages/config.cfg') + if not os.path.exists(configfile): + raise Exception('Unable to find the configuration file. \ + Did you set environment variables? \ + Or activate the virtualenv.') + + cfg = ConfigParser.ConfigParser() + cfg.read(configfile) server_term = redis.StrictRedis( host=p.config.get("Redis_Level_DB_TermFreq", "host"), @@ -113,7 +118,6 @@ if __name__ == '__main__': while True: # Get one message from the input queue (module only work if linked with a queue) - message = p.get_from_set() if message is None: publisher.debug("{} queue is empty, waiting".format(config_section)) print 'sleeping' diff --git a/bin/Helper.py b/bin/Helper.py index 78a1c94f..124083b3 100755 --- a/bin/Helper.py +++ b/bin/Helper.py @@ -16,6 +16,7 @@ import ConfigParser import os import zmq import time +import datetime import json @@ -132,7 +133,26 @@ class Process(object): in_set = self.subscriber_name + 'in' self.r_temp.hset('queues', self.subscriber_name, int(self.r_temp.scard(in_set))) - return self.r_temp.spop(in_set) + message = self.r_temp.spop(in_set) + timestamp = int(time.mktime(datetime.datetime.utcnow().timetuple())) + dir_name = os.environ['AIL_HOME']+self.config.get('Directories', 'pastes') + + if message is None: + return None + + else: + try: + #path = message[message.index(dir_name)+len(dir_name):message.index(".gz")] + path = message.split(".")[-2].split("/")[-1] + value = str(timestamp) + ", " + path + self.r_temp.set("MODULE_"+self.subscriber_name, value) + return message + + except: + path = "?" + value = str(timestamp) + ", " + path + self.r_temp.set("MODULE_"+self.subscriber_name, value) + return message def populate_set_out(self, msg, channel=None): # multiproc diff --git a/bin/ModuleInformations.py b/bin/ModuleInformations.py new file mode 100755 index 00000000..f63099eb --- /dev/null +++ b/bin/ModuleInformations.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python2 +# -*-coding:UTF-8 -* + + +import time +import datetime +import calendar +import redis +import os +import ConfigParser +from prettytable import PrettyTable + +if __name__ == "__main__": + + configfile = os.path.join(os.environ['AIL_BIN'], 'packages/config.cfg') + if not os.path.exists(configfile): + raise Exception('Unable to find the configuration file. \ + Did you set environment variables? \ + Or activate the virtualenv.') + + cfg = ConfigParser.ConfigParser() + cfg.read(configfile) + + # REDIS # + server = redis.StrictRedis( + host=cfg.get("Redis_Queues", "host"), + port=cfg.getint("Redis_Queues", "port"), + db=cfg.getint("Redis_Queues", "db")) + + while True: + + table = PrettyTable(['#', 'Queue', 'Amount', 'Paste start time', 'Processing time for current paste (H:M:S)', 'Paste hash'], sortby="Processing time for current paste (H:M:S)", reversesort=True) + num = 0 + for queue, card in server.hgetall("queues").iteritems(): + key = "MODULE_" + queue + value = server.get(key) + if value is not None: + timestamp, path = value.split(", ") + if timestamp is not None and path is not None: + num += 1 + startTime_readable = datetime.datetime.utcfromtimestamp(int(timestamp)) + processed_time_readable = str((datetime.datetime.now() - startTime_readable)).split('.')[0] + table.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) + + os.system('clear') + print table + time.sleep(1) diff --git a/doc/screenshots/sentiment.png b/doc/screenshots/sentiment.png deleted file mode 100644 index c4edee90680a19d50a9f19e020b0a7f344049462..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57790 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 From ff6dcaf456140f5e842020f4195f3df2de09cd5f Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 24 Aug 2016 15:35:23 +0200 Subject: [PATCH 03/13] Fixed typo in creditcard + fixed bug in ModuleInformation (relative to date). --- bin/CreditCard.py | 2 +- bin/Helper.py | 3 +-- bin/ModuleInformations.py | 15 ++++++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/bin/CreditCard.py b/bin/CreditCard.py index 430c6d7a..04ce9c62 100755 --- a/bin/CreditCard.py +++ b/bin/CreditCard.py @@ -66,7 +66,7 @@ if __name__ == "__main__": publisher.warning('{}Checked {} valid number(s)'.format( to_print, len(creditcard_set))) #Send to duplicate - p.populate_set_out(filepath, 'Duplicate') + p.populate_set_out(filename, 'Duplicate') #send to Browse_warning_paste p.populate_set_out('creditcard;{}'.format(filename), 'BrowseWarningPaste') else: diff --git a/bin/Helper.py b/bin/Helper.py index 124083b3..66d7766a 100755 --- a/bin/Helper.py +++ b/bin/Helper.py @@ -134,7 +134,7 @@ class Process(object): self.r_temp.hset('queues', self.subscriber_name, int(self.r_temp.scard(in_set))) message = self.r_temp.spop(in_set) - timestamp = int(time.mktime(datetime.datetime.utcnow().timetuple())) + timestamp = int(time.mktime(datetime.datetime.now().timetuple())) dir_name = os.environ['AIL_HOME']+self.config.get('Directories', 'pastes') if message is None: @@ -142,7 +142,6 @@ class Process(object): else: try: - #path = message[message.index(dir_name)+len(dir_name):message.index(".gz")] path = message.split(".")[-2].split("/")[-1] value = str(timestamp) + ", " + path self.r_temp.set("MODULE_"+self.subscriber_name, value) diff --git a/bin/ModuleInformations.py b/bin/ModuleInformations.py index f63099eb..b6b22504 100755 --- a/bin/ModuleInformations.py +++ b/bin/ModuleInformations.py @@ -29,7 +29,8 @@ if __name__ == "__main__": while True: - table = PrettyTable(['#', 'Queue', 'Amount', 'Paste start time', 'Processing time for current paste (H:M:S)', 'Paste hash'], sortby="Processing time for current paste (H:M:S)", reversesort=True) + table1 = PrettyTable(['#', 'Queue', 'Amount', 'Paste start time', 'Processing time for current paste (H:M:S)', 'Paste hash'], sortby="Processing time for current paste (H:M:S)", reversesort=True) + table2 = PrettyTable(['#', 'Queue', 'Amount', 'Paste start time', 'Time since idle (H:M:S)', 'Last paste hash'], sortby="Time since idle (H:M:S)", reversesort=True) num = 0 for queue, card in server.hgetall("queues").iteritems(): key = "MODULE_" + queue @@ -38,10 +39,14 @@ if __name__ == "__main__": timestamp, path = value.split(", ") if timestamp is not None and path is not None: num += 1 - startTime_readable = datetime.datetime.utcfromtimestamp(int(timestamp)) + startTime_readable = datetime.datetime.fromtimestamp(int(timestamp)) processed_time_readable = str((datetime.datetime.now() - startTime_readable)).split('.')[0] - table.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) + if int(card) > 0: + table1.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) + else: + table2.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) os.system('clear') - print table - time.sleep(1) + print table1 + print table2 + time.sleep(5) From 3e88d0911d0b7d695917cabf2548b01035c7ba15 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 24 Aug 2016 15:53:00 +0200 Subject: [PATCH 04/13] ModuleInfo now support logs. --- bin/ModuleInformations.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/bin/ModuleInformations.py b/bin/ModuleInformations.py index b6b22504..5cab6590 100755 --- a/bin/ModuleInformations.py +++ b/bin/ModuleInformations.py @@ -8,8 +8,15 @@ import calendar import redis import os import ConfigParser +import json from prettytable import PrettyTable +# CONFIG VARIABLES +threshold_stucked_module = 60*60*1 #1 hour +log_filename = "../logs/moduleInfo.log" + + + if __name__ == "__main__": configfile = os.path.join(os.environ['AIL_BIN'], 'packages/config.cfg') @@ -41,12 +48,20 @@ if __name__ == "__main__": num += 1 startTime_readable = datetime.datetime.fromtimestamp(int(timestamp)) processed_time_readable = str((datetime.datetime.now() - startTime_readable)).split('.')[0] + + if int((datetime.datetime.now() - startTime_readable).total_seconds()) > threshold_stucked_module: + log = open(log_filename, 'a') + log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") + if int(card) > 0: table1.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) else: table2.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) os.system('clear') + print 'Working queues:\n' print table1 + print '\n' + print 'Ideling queues:\n' print table2 time.sleep(5) From 8fb552b7da1947e4baaced10562f4fd41792e1af Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 24 Aug 2016 16:52:01 +0200 Subject: [PATCH 05/13] ModuleInfo support autokill and auto restart after logging. --- bin/ModuleInformations.py | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/bin/ModuleInformations.py b/bin/ModuleInformations.py index 5cab6590..535e06b2 100755 --- a/bin/ModuleInformations.py +++ b/bin/ModuleInformations.py @@ -7,13 +7,33 @@ import datetime import calendar import redis import os +import signal +from subprocess import PIPE, Popen import ConfigParser import json from prettytable import PrettyTable # CONFIG VARIABLES -threshold_stucked_module = 60*60*1 #1 hour +threshold_stucked_module = 1*60*1 #1 hour log_filename = "../logs/moduleInfo.log" +command_search_pid = "ps a -o pid,cmd | grep {}" +command_restart_module = "screen -S \"Script\" -X screen -t \"{}\" bash -c \"./{}.py; read x\"" + + +def kill_module(module): + print 'trying to kill module:', module + time.sleep(8) + + time.sleep(1) + p = Popen([command_search_pid.format(module+".py")], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + + for line in p.stdout: + splittedLine = line.split() + if 'python2' in splittedLine: + pid = int(splittedLine[0]) + os.kill(pid, signal.SIGUSR1) + time.sleep(15) + p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) @@ -49,12 +69,14 @@ if __name__ == "__main__": startTime_readable = datetime.datetime.fromtimestamp(int(timestamp)) processed_time_readable = str((datetime.datetime.now() - startTime_readable)).split('.')[0] - if int((datetime.datetime.now() - startTime_readable).total_seconds()) > threshold_stucked_module: - log = open(log_filename, 'a') - log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") - if int(card) > 0: + if int((datetime.datetime.now() - startTime_readable).total_seconds()) > threshold_stucked_module: + log = open(log_filename, 'a') + log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") + kill_module(queue) + table1.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) + else: table2.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) From 64bf4814803e10f9d1c0b571b5068a4e1eddf095 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 24 Aug 2016 17:28:39 +0200 Subject: [PATCH 06/13] Added moduleInfo + Renamed modules --- bin/{Attribute.py => Attributes.py} | 0 bin/{CreditCard.py => CreditCards.py} | 0 ...nage_top_sets.py => CurveManageTopSets.py} | 1 + bin/Duplicate_ssdeep.py | 182 ------------------ bin/{Duplicate_ssdeep_v2.py => Duplicates.py} | 0 bin/{Duplicate.py => Duplicates_old.py} | 0 bin/LAUNCH.sh | 18 +- bin/{Line.py => Lines.py} | 0 ...leInformations.py => ModuleInformation.py} | 43 +++-- ...timentAnalyser.py => SentimentAnalysis.py} | 0 bin/{Url.py => Web.py} | 0 bin/launch_scripts.sh | 96 ++++----- 12 files changed, 92 insertions(+), 248 deletions(-) rename bin/{Attribute.py => Attributes.py} (100%) rename bin/{CreditCard.py => CreditCards.py} (100%) rename bin/{Curve_manage_top_sets.py => CurveManageTopSets.py} (99%) delete mode 100755 bin/Duplicate_ssdeep.py rename bin/{Duplicate_ssdeep_v2.py => Duplicates.py} (100%) rename bin/{Duplicate.py => Duplicates_old.py} (100%) rename bin/{Line.py => Lines.py} (100%) rename bin/{ModuleInformations.py => ModuleInformation.py} (77%) rename bin/{SentimentAnalyser.py => SentimentAnalysis.py} (100%) rename bin/{Url.py => Web.py} (100%) diff --git a/bin/Attribute.py b/bin/Attributes.py similarity index 100% rename from bin/Attribute.py rename to bin/Attributes.py diff --git a/bin/CreditCard.py b/bin/CreditCards.py similarity index 100% rename from bin/CreditCard.py rename to bin/CreditCards.py diff --git a/bin/Curve_manage_top_sets.py b/bin/CurveManageTopSets.py similarity index 99% rename from bin/Curve_manage_top_sets.py rename to bin/CurveManageTopSets.py index a88ff8b4..a49d0a7d 100755 --- a/bin/Curve_manage_top_sets.py +++ b/bin/CurveManageTopSets.py @@ -22,6 +22,7 @@ from pubsublogger import publisher from packages import lib_words import datetime import calendar +import os import ConfigParser # Config Variables diff --git a/bin/Duplicate_ssdeep.py b/bin/Duplicate_ssdeep.py deleted file mode 100755 index 1b173eca..00000000 --- a/bin/Duplicate_ssdeep.py +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/env python2 -# -*-coding:UTF-8 -* - -""" -The Duplicate module -==================== - -This huge module is, in short term, checking duplicates. - -Requirements: -------------- - - -""" -import redis -import os -import time -import datetime -import json -import ssdeep -from packages import Paste -from pubsublogger import publisher - -from Helper import Process - -if __name__ == "__main__": - publisher.port = 6380 - publisher.channel = "Script" - - config_section = 'Duplicates' - save_dico_and_reload = 1 #min - time_1 = time.time() - flag_reload_from_disk = True - flag_write_to_disk = False - - p = Process(config_section) - - # REDIS # - # DB OBJECT & HASHS ( DISK ) - # FIXME increase flexibility - dico_redis = {} - for year in xrange(2013, datetime.date.today().year+1): - for month in xrange(0, 16): - dico_redis[str(year)+str(month).zfill(2)] = redis.StrictRedis( - host=p.config.get("Redis_Level_DB", "host"), port=year, - db=month) - #print("dup: "+str(year)+str(month).zfill(2)+"\n") - - # FUNCTIONS # - publisher.info("Script duplicate started") - - dicopath = os.path.join(os.environ['AIL_HOME'], - p.config.get("Directories", "dicofilters")) - - dico_path_set = set() - while True: - try: - hash_dico = {} - dupl = [] - - x = time.time() - - message = p.get_from_set() - if message is not None: - path = message - PST = Paste.Paste(path) - else: - publisher.debug("Script Attribute is idling 10s") - time.sleep(10) - continue - - PST._set_p_hash_kind("ssdeep") - - # Assignate the correct redis connexion - r_serv1 = dico_redis[PST.p_date.year + PST.p_date.month] - - # Creating the dicor name: dicoyyyymm - filedicopath = os.path.join(dicopath, 'dico' + PST.p_date.year + - PST.p_date.month) - filedicopath_today = filedicopath - - # Save I/O - if time.time() - time_1 > save_dico_and_reload*60: - flag_write_to_disk = True - - if os.path.exists(filedicopath): - if flag_reload_from_disk == True: - flag_reload_from_disk = False - print 'Reloading' - with open(filedicopath, 'r') as fp: - today_dico = json.load(fp) - else: - today_dico = {} - with open(filedicopath, 'w') as fp: - json.dump(today_dico, fp) - - # For now, just use monthly dico - dico_path_set.add(filedicopath) - - # UNIQUE INDEX HASHS TABLE - yearly_index = str(datetime.date.today().year)+'00' - r_serv0 = dico_redis[yearly_index] - r_serv0.incr("current_index") - index = r_serv0.get("current_index")+str(PST.p_date) - - # For each dico - opened_dico = [] - for dico in dico_path_set: - # Opening dico - if dico == filedicopath_today: - opened_dico.append([dico, today_dico]) - else: - with open(dico, 'r') as fp: - opened_dico.append([dico, json.load(fp)]) - - - #retrieve hash from paste - paste_hash = PST._get_p_hash() - - # Go throught the Database of the dico (of the month) - threshold_dup = 99 - for dico_name, dico in opened_dico: - for dico_key, dico_hash in dico.items(): - percent = ssdeep.compare(dico_hash, paste_hash) - if percent > threshold_dup: - db = dico_name[-6:] - # Go throught the Database of the dico filter (month) - r_serv_dico = dico_redis[db] - - # index of paste - index_current = r_serv_dico.get(dico_hash) - paste_path = r_serv_dico.get(index_current) - if paste_path != None: - hash_dico[dico_hash] = (paste_path, percent) - - #print 'comparing: ' + str(dico_hash[:20]) + ' and ' + str(paste_hash[:20]) + ' percentage: ' + str(percent) - print ' '+ PST.p_path[44:] +', '+ paste_path[44:] + ', ' + str(percent) - - # Add paste in DB to prevent its analyse twice - # HASHTABLES PER MONTH (because of r_serv1 changing db) - r_serv1.set(index, PST.p_path) - r_serv1.sadd("INDEX", index) - # Adding the hash in Redis - r_serv1.set(paste_hash, index) - r_serv1.sadd("HASHS", paste_hash) - ##################### Similarity found ####################### - - # if there is data in this dictionnary - if len(hash_dico) != 0: - for dico_hash, paste_tuple in hash_dico.items(): - paste_path, percent = paste_tuple - dupl.append((paste_path, percent)) - - # Creating the object attribute and save it. - to_print = 'Duplicate;{};{};{};'.format( - PST.p_source, PST.p_date, PST.p_name) - if dupl != []: - PST.__setattr__("p_duplicate", dupl) - PST.save_attribute_redis("p_duplicate", dupl) - publisher.info('{}Detected {}'.format(to_print, len(dupl))) - print '{}Detected {}'.format(to_print, len(dupl)) - - y = time.time() - - publisher.debug('{}Processed in {} sec'.format(to_print, y-x)) - - - # Adding the hash in the dico of the month - today_dico[index] = paste_hash - - if flag_write_to_disk: - time_1 = time.time() - flag_write_to_disk = False - flag_reload_from_disk = True - print 'writing' - with open(filedicopath, 'w') as fp: - json.dump(today_dico, fp) - except IOError: - to_print = 'Duplicate;{};{};{};'.format( - PST.p_source, PST.p_date, PST.p_name) - print "CRC Checksum Failed on :", PST.p_path - publisher.error('{}CRC Checksum Failed'.format(to_print)) diff --git a/bin/Duplicate_ssdeep_v2.py b/bin/Duplicates.py similarity index 100% rename from bin/Duplicate_ssdeep_v2.py rename to bin/Duplicates.py diff --git a/bin/Duplicate.py b/bin/Duplicates_old.py similarity index 100% rename from bin/Duplicate.py rename to bin/Duplicates_old.py diff --git a/bin/LAUNCH.sh b/bin/LAUNCH.sh index fef9c3ce..75a3a0a5 100755 --- a/bin/LAUNCH.sh +++ b/bin/LAUNCH.sh @@ -114,31 +114,31 @@ function launching_scripts { screen -S "Script" -X screen -t "Global" bash -c './Global.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "Duplicate" bash -c './Duplicate_ssdeep_v2.py; read x' + screen -S "Script" -X screen -t "Duplicates" bash -c './Duplicates.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "Attribute" bash -c './Attribute.py; read x' + screen -S "Script" -X screen -t "Attributes" bash -c './Attributes.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "Line" bash -c './Line.py; read x' + screen -S "Script" -X screen -t "Lines" bash -c './Lines.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "DomainClassifier" bash -c './DomClassifier.py; read x' + screen -S "Script" -X screen -t "DomClassifier" bash -c './DomClassifier.py; read x' sleep 0.1 screen -S "Script" -X screen -t "Categ" bash -c './Categ.py; read x' sleep 0.1 screen -S "Script" -X screen -t "Tokenize" bash -c './Tokenize.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "CreditCard" bash -c './CreditCard.py; read x' + screen -S "Script" -X screen -t "CreditCards" bash -c './CreditCards.py; read x' sleep 0.1 screen -S "Script" -X screen -t "Onion" bash -c './Onion.py; read x' sleep 0.1 screen -S "Script" -X screen -t "Mail" bash -c './Mail.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "Url" bash -c './Url.py; read x' + screen -S "Script" -X screen -t "Web" bash -c './Web.py; read x' sleep 0.1 screen -S "Script" -X screen -t "Credential" bash -c './Credential.py; read x' sleep 0.1 screen -S "Script" -X screen -t "Curve" bash -c './Curve.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "Curve_topsets_manager" bash -c './Curve_manage_top_sets.py; read x' + screen -S "Script" -X screen -t "CurveManageTopSets" bash -c './CurveManageTopSets.py; read x' sleep 0.1 screen -S "Script" -X screen -t "Indexer" bash -c './Indexer.py; read x' sleep 0.1 @@ -158,7 +158,9 @@ function launching_scripts { sleep 0.1 screen -S "Script" -X screen -t "Browse_warning_paste" bash -c './Browse_warning_paste.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "SentimentAnalyser" bash -c './SentimentAnalyser.py; read x' + screen -S "Script" -X screen -t "SentimentAnalysis" bash -c './SentimentAnalysis.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "ModuleInformation" bash -c './ModuleInformation.py; read x' } diff --git a/bin/Line.py b/bin/Lines.py similarity index 100% rename from bin/Line.py rename to bin/Lines.py diff --git a/bin/ModuleInformations.py b/bin/ModuleInformation.py similarity index 77% rename from bin/ModuleInformations.py rename to bin/ModuleInformation.py index 535e06b2..dce855b0 100755 --- a/bin/ModuleInformations.py +++ b/bin/ModuleInformation.py @@ -14,27 +14,48 @@ import json from prettytable import PrettyTable # CONFIG VARIABLES -threshold_stucked_module = 1*60*1 #1 hour +threshold_stucked_module = 60*60*1 #1 hour +refreshRate = 1 log_filename = "../logs/moduleInfo.log" command_search_pid = "ps a -o pid,cmd | grep {}" command_restart_module = "screen -S \"Script\" -X screen -t \"{}\" bash -c \"./{}.py; read x\"" -def kill_module(module): - print 'trying to kill module:', module - time.sleep(8) - - time.sleep(1) +def getPid(module): p = Popen([command_search_pid.format(module+".py")], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) - for line in p.stdout: splittedLine = line.split() if 'python2' in splittedLine: - pid = int(splittedLine[0]) - os.kill(pid, signal.SIGUSR1) - time.sleep(15) + return int(splittedLine[0]) + else: + return None + + +def kill_module(module): + print '' + print '-> trying to kill module:', module + + pid = getPid(module) + if pid is not None: + os.kill(pid, signal.SIGUSR1) + time.sleep(1) + if getPid(module) is None: + print module, 'has been killed' + print 'restarting', module, '...' p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + else: + print 'killing failed, retrying...' + time.sleep(3) + os.kill(pid, signal.SIGUSR1) + time.sleep(1) + if getPid(module) is None: + print module, 'has been killed' + print 'restarting', module, '...' + p2 = Popen([command_restart_module.format(module, module)], stdin=PIPE, stdout=PIPE, bufsize=1, shell=True) + else: + print 'killing failed!' + time.sleep(7) if __name__ == "__main__": @@ -86,4 +107,4 @@ if __name__ == "__main__": print '\n' print 'Ideling queues:\n' print table2 - time.sleep(5) + time.sleep(refreshRate) diff --git a/bin/SentimentAnalyser.py b/bin/SentimentAnalysis.py similarity index 100% rename from bin/SentimentAnalyser.py rename to bin/SentimentAnalysis.py diff --git a/bin/Url.py b/bin/Web.py similarity index 100% rename from bin/Url.py rename to bin/Web.py diff --git a/bin/launch_scripts.sh b/bin/launch_scripts.sh index ad55244a..1cdde370 100755 --- a/bin/launch_scripts.sh +++ b/bin/launch_scripts.sh @@ -8,50 +8,52 @@ sleep 0.1 echo -e $GREEN"\t* Launching ZMQ scripts"$DEFAULT -screen -S "Script" -X screen -t "Global" bash -c './Global.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Duplicate" bash -c './Duplicate_ssdeep_v2.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Attribute" bash -c './Attribute.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Line" bash -c './Line.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "DomainClassifier" bash -c './DomClassifier.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Categ" bash -c './Categ.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Tokenize" bash -c './Tokenize.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "CreditCard" bash -c './CreditCard.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Onion" bash -c './Onion.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Mail" bash -c './Mail.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Url" bash -c './Url.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Credential" bash -c './Credential.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Curve" bash -c './Curve.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Curve_topsets_manager" bash -c './Curve_manage_top_sets.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Indexer" bash -c './Indexer.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Keys" bash -c './Keys.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Phone" bash -c './Phone.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Release" bash -c './Release.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Cve" bash -c './Cve.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "WebStats" bash -c './WebStats.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "ModuleStats" bash -c './ModuleStats.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "SQLInjectionDetection" bash -c './SQLInjectionDetection.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "Browse_warning_paste" bash -c './Browse_warning_paste.py; read x' -sleep 0.1 -screen -S "Script" -X screen -t "SentimentAnalyser" bash -c './SentimentAnalyser.py; read x' + screen -S "Script" -X screen -t "Global" bash -c './Global.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Duplicates" bash -c './Duplicates.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Attributes" bash -c './Attributes.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Lines" bash -c './Lines.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "DomClassifier" bash -c './DomClassifier.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Categ" bash -c './Categ.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Tokenize" bash -c './Tokenize.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "CreditCards" bash -c './CreditCards.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Onion" bash -c './Onion.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Mail" bash -c './Mail.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Web" bash -c './Web.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Credential" bash -c './Credential.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Curve" bash -c './Curve.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "CurveManageTopSets" bash -c './CurveManageTopSets.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Indexer" bash -c './Indexer.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Keys" bash -c './Keys.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Phone" bash -c './Phone.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Release" bash -c './Release.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Cve" bash -c './Cve.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "WebStats" bash -c './WebStats.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "ModuleStats" bash -c './ModuleStats.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "SQLInjectionDetection" bash -c './SQLInjectionDetection.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "Browse_warning_paste" bash -c './Browse_warning_paste.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "SentimentAnalysis" bash -c './SentimentAnalysis.py; read x' + sleep 0.1 + screen -S "Script" -X screen -t "ModuleInformation" bash -c './ModuleInformation.py; read x' From 61621d51512a3f3af7a013e8d908b293be9b8d7c Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 24 Aug 2016 17:32:02 +0200 Subject: [PATCH 07/13] Added pip dependency --- pip_packages_requirement.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/pip_packages_requirement.txt b/pip_packages_requirement.txt index bd734175..818017aa 100644 --- a/pip_packages_requirement.txt +++ b/pip_packages_requirement.txt @@ -10,6 +10,7 @@ textblob numpy matplotlib networkx +prettytable #Tokeniser nltk From 3313064e5142558ce4e07a1f142e7d812ea22665 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 24 Aug 2016 17:32:50 +0200 Subject: [PATCH 08/13] removed useless import. --- bin/ModuleInformation.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/ModuleInformation.py b/bin/ModuleInformation.py index dce855b0..3838d5c3 100755 --- a/bin/ModuleInformation.py +++ b/bin/ModuleInformation.py @@ -4,7 +4,6 @@ import time import datetime -import calendar import redis import os import signal From 611454ba82fe446b2216efe010b2efaae3149194 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Wed, 24 Aug 2016 18:00:05 +0200 Subject: [PATCH 09/13] Added color in web-index reprenting modules states. --- var/www/Flask_server.py | 18 ++++++++++++++++-- var/www/static/js/indexjavascript.js | 8 +++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/var/www/Flask_server.py b/var/www/Flask_server.py index 45efd8f1..8b6e05e3 100755 --- a/var/www/Flask_server.py +++ b/var/www/Flask_server.py @@ -81,8 +81,22 @@ def event_stream(): def get_queues(r): # We may want to put the llen in a pipeline to do only one query. - return [(queue, int(card)) for queue, card in - r.hgetall("queues").iteritems()] + data = [(queue, int(card)) for queue, card in r.hgetall("queues").iteritems()] + newData = [] + for queue, card in data: + key = "MODULE_" + queue + value = r.get(key) + if value is not None: + timestamp, path = value.split(", ") + if timestamp is not None: + startTime_readable = datetime.datetime.fromtimestamp(int(timestamp)) + processed_time_readable = str((datetime.datetime.now() - startTime_readable)).split('.')[0] + seconds = int((datetime.datetime.now() - startTime_readable).total_seconds()) + newData.append( (queue, card, seconds) ) + else: + newData.append( (queue, cards, 0) ) + + return newData def list_len(s): diff --git a/var/www/static/js/indexjavascript.js b/var/www/static/js/indexjavascript.js index f0cd101f..d50e098a 100644 --- a/var/www/static/js/indexjavascript.js +++ b/var/www/static/js/indexjavascript.js @@ -221,11 +221,17 @@ function create_queue_table() { for(i = 0; i < (glob_tabvar.row1).length;i++){ var tr = document.createElement('TR') - for(j = 0; j < (glob_tabvar.row1[i]).length; j++){ + for(j = 0; j < 2; j++){ var td = document.createElement('TD') td.appendChild(document.createTextNode(glob_tabvar.row1[i][j])); tr.appendChild(td) } + if (parseInt(glob_tabvar.row1[i][2]) > 60*1 && parseInt(glob_tabvar.row1[i][1]) > 2) + tr.className += " danger"; + else if (parseInt(glob_tabvar.row1[i][2]) > 60*1) + tr.className += " warning"; + else + tr.className += " success"; tableBody.appendChild(tr); } Tablediv.appendChild(table); From 9146feab8831c00acffe4d00af35565e7011538c Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Thu, 25 Aug 2016 10:43:04 +0200 Subject: [PATCH 10/13] Fixed bug in WebStats not deleting correct key + fixed typo in CurveSetManager preventing connecting to redis + modified display in moduleInfo --- bin/CurveManageTopSets.py | 14 +++---- bin/ModuleInformation.py | 76 +++++++++++++++++++++++++++++------- bin/WebStats.py | 6 ++- pip_packages_requirement.txt | 2 +- 4 files changed, 71 insertions(+), 27 deletions(-) diff --git a/bin/CurveManageTopSets.py b/bin/CurveManageTopSets.py index a49d0a7d..8f316333 100755 --- a/bin/CurveManageTopSets.py +++ b/bin/CurveManageTopSets.py @@ -106,9 +106,9 @@ if __name__ == '__main__': cfg.read(configfile) server_term = redis.StrictRedis( - host=p.config.get("Redis_Level_DB_TermFreq", "host"), - port=p.config.get("Redis_Level_DB_TermFreq", "port"), - db=p.config.get("Redis_Level_DB_TermFreq", "db")) + host=cfg.get("Redis_Level_DB_TermFreq", "host"), + port=cfg.getint("Redis_Level_DB_TermFreq", "port"), + db=cfg.getint("Redis_Level_DB_TermFreq", "db")) publisher.info("Script Curve_manage_top_set started") @@ -119,10 +119,6 @@ if __name__ == '__main__': while True: # Get one message from the input queue (module only work if linked with a queue) - if message is None: - publisher.debug("{} queue is empty, waiting".format(config_section)) - print 'sleeping' - time.sleep(Refresh_rate) # sleep a long time then manage the set - manage_top_set() - continue + time.sleep(Refresh_rate) # sleep a long time then manage the set + manage_top_set() diff --git a/bin/ModuleInformation.py b/bin/ModuleInformation.py index 3838d5c3..42e901c2 100755 --- a/bin/ModuleInformation.py +++ b/bin/ModuleInformation.py @@ -1,20 +1,20 @@ #!/usr/bin/env python2 # -*-coding:UTF-8 -* - import time import datetime import redis import os import signal +import argparse from subprocess import PIPE, Popen import ConfigParser import json -from prettytable import PrettyTable +from terminaltables import AsciiTable +import textwrap # CONFIG VARIABLES threshold_stucked_module = 60*60*1 #1 hour -refreshRate = 1 log_filename = "../logs/moduleInfo.log" command_search_pid = "ps a -o pid,cmd | grep {}" command_restart_module = "screen -S \"Script\" -X screen -t \"{}\" bash -c \"./{}.py; read x\"" @@ -59,12 +59,18 @@ def kill_module(module): if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Show info concerning running modules and log suspected stucked modules. May be use to automatically kill and restart stucked one.') + parser.add_argument('-r', '--refresh', type=int, required=False, default=1, help='Refresh rate') + parser.add_argument('-k', '--autokill', type=int, required=True, default=1, help='Enable auto kill option (1 for TRUE, anything else for FALSE)') + + args = parser.parse_args() + configfile = os.path.join(os.environ['AIL_BIN'], 'packages/config.cfg') if not os.path.exists(configfile): raise Exception('Unable to find the configuration file. \ Did you set environment variables? \ Or activate the virtualenv.') - + cfg = ConfigParser.ConfigParser() cfg.read(configfile) @@ -76,9 +82,9 @@ if __name__ == "__main__": while True: - table1 = PrettyTable(['#', 'Queue', 'Amount', 'Paste start time', 'Processing time for current paste (H:M:S)', 'Paste hash'], sortby="Processing time for current paste (H:M:S)", reversesort=True) - table2 = PrettyTable(['#', 'Queue', 'Amount', 'Paste start time', 'Time since idle (H:M:S)', 'Last paste hash'], sortby="Time since idle (H:M:S)", reversesort=True) num = 0 + printarray1 = [] + printarray2 = [] for queue, card in server.hgetall("queues").iteritems(): key = "MODULE_" + queue value = server.get(key) @@ -93,17 +99,57 @@ if __name__ == "__main__": if int((datetime.datetime.now() - startTime_readable).total_seconds()) > threshold_stucked_module: log = open(log_filename, 'a') log.write(json.dumps([queue, card, str(startTime_readable), str(processed_time_readable), path]) + "\n") - kill_module(queue) + if args.autokill == 1: + kill_module(queue) - table1.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) + printarray1.append([str(num), str(queue), str(card), str(startTime_readable), str(processed_time_readable), str(path)]) else: - table2.add_row([num, queue, card, startTime_readable, processed_time_readable, path]) + printarray2.append([str(num), str(queue), str(card), str(startTime_readable), str(processed_time_readable), str(path)]) - os.system('clear') - print 'Working queues:\n' - print table1 + printarray1.sort(lambda x,y: cmp(x[4], y[4]), reverse=True) + printarray2.sort(lambda x,y: cmp(x[4], y[4]), reverse=True) + printarray1.insert(0,["#", "Queue", "Amount", "Paste start time", "Processing time for current paste (H:M:S)", "Paste hash"]) + printarray2.insert(0,["#", "Queue", "Amount", "Paste start time", "Time since idle (H:M:S)", "Last paste hash"]) + + os.system('clear') + t1 = AsciiTable(printarray1, title="Working queues") + t1.column_max_width(1) + if not t1.ok: + longest_col = t1.column_widths.index(max(t1.column_widths)) + max_length_col = t1.column_max_width(longest_col) + if max_length_col > 0: + for i, content in enumerate(t1.table_data): + if len(content[longest_col]) > max_length_col: + temp = '' + for l in content[longest_col].splitlines(): + if len(l) > max_length_col: + temp += '\n'.join(textwrap.wrap(l, max_length_col)) + '\n' + else: + temp += l + '\n' + content[longest_col] = temp.strip() + t1.table_data[i] = content + + t2 = AsciiTable(printarray2, title="Iddeling queues") + t2.column_max_width(1) + if not t2.ok: + longest_col = t2.column_widths.index(max(t2.column_widths)) + max_length_col = t2.column_max_width(longest_col) + if max_length_col > 0: + for i, content in enumerate(t2.table_data): + if len(content[longest_col]) > max_length_col: + temp = '' + for l in content[longest_col].splitlines(): + if len(l) > max_length_col: + temp += '\n'.join(textwrap.wrap(l, max_length_col)) + '\n' + else: + temp += l + '\n' + content[longest_col] = temp.strip() + t2.table_data[i] = content + + + print t1.table print '\n' - print 'Ideling queues:\n' - print table2 - time.sleep(refreshRate) + print t2.table + + time.sleep(args.refresh) diff --git a/bin/WebStats.py b/bin/WebStats.py index 6fdd9ee3..20c1f489 100755 --- a/bin/WebStats.py +++ b/bin/WebStats.py @@ -77,12 +77,14 @@ def compute_progression(server, field_name, num_day, url_parsed): member_set = [] for keyw in server.smembers(redis_progression_name_set): member_set.append((keyw, int(server.hget(redis_progression_name, keyw)))) - print member_set member_set.sort(key=lambda tup: tup[1]) if member_set[0][1] < keyword_increase: + print 'removing', member_set[0][0] + '('+str(member_set[0][1])+')', 'and adding', keyword, str(keyword_increase) #remove min from set and add the new one - server.srem(redis_progression_name_set, member_set[0]) + server.srem(redis_progression_name_set, member_set[0][0]) server.sadd(redis_progression_name_set, keyword) + server.hdel(redis_progression_name, member_set[0][0]) + server.hset(redis_progression_name, keyword, keyword_increase) if __name__ == '__main__': diff --git a/pip_packages_requirement.txt b/pip_packages_requirement.txt index 818017aa..b80d14bd 100644 --- a/pip_packages_requirement.txt +++ b/pip_packages_requirement.txt @@ -10,7 +10,7 @@ textblob numpy matplotlib networkx -prettytable +terminaltables #Tokeniser nltk From b708cf555ef347c15b361bde1dfecbd832e514c1 Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Thu, 25 Aug 2016 10:59:32 +0200 Subject: [PATCH 11/13] Added directory creation --- installing_deps.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/installing_deps.sh b/installing_deps.sh index 1f6d8c68..8b790f1f 100755 --- a/installing_deps.sh +++ b/installing_deps.sh @@ -72,6 +72,7 @@ echo export AIL_LEVELDB=$(pwd)/redis-leveldb/ >> ./AILENV/bin/activate mkdir -p $AIL_HOME/{PASTES,Blooms,dumps} mkdir -p $AIL_HOME/LEVEL_DB_DATA/2016 +mkdir -p $AIL_HOME/LEVEL_DB_DATA/3016 pip install -U pip pip install -r pip_packages_requirement.txt From 2f136595fb7071ab113c6314eb5a8a07e1424e8e Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Thu, 25 Aug 2016 11:05:18 +0200 Subject: [PATCH 12/13] Removed autokill feature if not specified --- bin/LAUNCH.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/LAUNCH.sh b/bin/LAUNCH.sh index 75a3a0a5..024b22e4 100755 --- a/bin/LAUNCH.sh +++ b/bin/LAUNCH.sh @@ -160,7 +160,7 @@ function launching_scripts { sleep 0.1 screen -S "Script" -X screen -t "SentimentAnalysis" bash -c './SentimentAnalysis.py; read x' sleep 0.1 - screen -S "Script" -X screen -t "ModuleInformation" bash -c './ModuleInformation.py; read x' + screen -S "Script" -X screen -t "ModuleInformation" bash -c './ModuleInformation.py -k 0; read x' } From f9bf00f02255c28e7688f27b7e082e79488e72bd Mon Sep 17 00:00:00 2001 From: Mokaddem Date: Thu, 25 Aug 2016 11:09:31 +0200 Subject: [PATCH 13/13] Removed autokill feature if not specified --- bin/ModuleInformation.py | 2 +- var/www/static/js/indexjavascript.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/ModuleInformation.py b/bin/ModuleInformation.py index 42e901c2..8fcd8c78 100755 --- a/bin/ModuleInformation.py +++ b/bin/ModuleInformation.py @@ -130,7 +130,7 @@ if __name__ == "__main__": content[longest_col] = temp.strip() t1.table_data[i] = content - t2 = AsciiTable(printarray2, title="Iddeling queues") + t2 = AsciiTable(printarray2, title="Idling queues") t2.column_max_width(1) if not t2.ok: longest_col = t2.column_widths.index(max(t2.column_widths)) diff --git a/var/www/static/js/indexjavascript.js b/var/www/static/js/indexjavascript.js index d50e098a..359a1e56 100644 --- a/var/www/static/js/indexjavascript.js +++ b/var/www/static/js/indexjavascript.js @@ -226,7 +226,7 @@ function create_queue_table() { td.appendChild(document.createTextNode(glob_tabvar.row1[i][j])); tr.appendChild(td) } - if (parseInt(glob_tabvar.row1[i][2]) > 60*1 && parseInt(glob_tabvar.row1[i][1]) > 2) + if (parseInt(glob_tabvar.row1[i][2]) > 60*2 && parseInt(glob_tabvar.row1[i][1]) > 2) tr.className += " danger"; else if (parseInt(glob_tabvar.row1[i][2]) > 60*1) tr.className += " warning";