def do_showplot(environ,start_response): import config d = cgi.parse_qs(environ['QUERY_STRING']) if 'id' in d: from mod_flow import filedb import postgresops try : filedb.connect(); postgresops.check_evil(d['id'][0]) files = filedb.get_files(where = 'id = %s'%d['id'][0]) if ( len(files) != 1): raise Exception("Error 0 or >1 files matched!") else: f = tempfile.NamedTemporaryFile(delete = False) fname = f.name f.close(); cmdline = str(config.map['web']['plotcsvcmd'] + "-csvin %s -pngout %s -title \"Source:%s ID:%s Filters:%s\"" %(files[0].file_name,fname,files[0].source_name,files[0].source_id,files[0].steps)) cmds = shlex.split(cmdline) subprocess.call(cmds) if os.path.getsize(fname) == 0: raise Exception("Plot file not created. Error plotting?") start_response('200 OK',[('Content-Type','image/png')]) return TempFileWrapper(fname); except Exception,exp: import traceback start_response('500 ERROR',[('Content-Type','text/plain')]) return ["Exception "+str(exp)+" occured\n",traceback.format_exc()]
def flush_files(): scheduledb.connect() filedb.connect() idstokill = [] postgresops.dbcur.execute("select id from flows.files where status=%s",(filedb.FAIL,)) idstokill.extend([i[0] for i in postgresops.dbcur]) postgresops.dbcur.execute("select id,task_id from flows.files where status=%s",(filedb.INVALID,)) rows = postgresops.dbcur.fetchall() for id,task_id in rows: postgresops.dbcur.execute("select status from schedule.tasks where id=%s",(task_id,)) if ( postgresops.dbcur.rowcount <= 0 or postgresops.dbcur.fetchone()[0] >= scheduledb.ERROR_CRASH ): idstokill.append(id) if len(idstokill)==0: return if not autoconfirm: print "The following files will be removed from the cache: ",idstokill conf = raw_input("Confirm [y|n]? ") if ( conf != 'y' and conf != 'yes'): print "Cancelled by user" sys.exit(10) for id in idstokill: str = postgresops.dbcur.mogrify("DELETE FROM flows.files WHERE id=%s",(id,)) print str postgresops.dbcur.execute(str) postgresops.dbcon.commit() print "";
def flush_flows(): scheduledb.connect() filedb.connect() flowdb.connect() postgresops.dbcur.execute("select flowdef,time_from,time_to,source_name,source_id from flows.curflows where status=%s",(flowdb.ERROR,)) idstokill = [] idstokill.extend(postgresops.dbcur.fetchall()) postgresops.dbcur.execute("select flowdef,time_from,time_to,source_name,source_id,task_ids,file_ids from flows.curflows where status!=%s",(flowdb.DONE,)) rows = postgresops.dbcur.fetchall() for flowdef,time_from,time_to,source_name,source_id,task_ids,file_ids in rows: found_death= False for task_id in task_ids: postgresops.dbcur.execute("select status from schedule.tasks where id=%s",(task_id,)) if ( postgresops.dbcur.rowcount <= 0 or postgresops.dbcur.fetchone()[0] >= scheduledb.ERROR_CRASH ): idstokill.append((flowdef,time_from,time_to,source_name,source_id)) found_death = True break if found_death: continue for file_id in file_ids: postgresops.dbcur.execute("select status from flows.files where id=%s",(file_id,)) if ( postgresops.dbcur.rowcount <= 0 or postgresops.dbcur.fetchone()[0] == filedb.FAIL ): idstokill.append((flowdef,time_from,time_to,source_name,source_id)) found_death = True break if len(idstokill)==0: return if not autoconfirm: print "The following flows will be removed from the database:\n"+"\n\t".join([i.__str__() for i in idstokill]) conf = raw_input("Confirm [y|n]? ") if ( conf != 'y' and conf != 'yes'): print "Cancelled by user" sys.exit(10) for flowdef,time_from,time_to,source_name,source_id in idstokill: str = postgresops.dbcur.mogrify("DELETE FROM flows.curflows WHERE flowdef=%s and time_from=%s and time_to=%s and source_name=%s and source_id=%s", (flowdef,time_from,time_to,source_name,source_id)) print str postgresops.dbcur.execute(str) postgresops.dbcon.commit() print "";