def showprogress(task_id, server): # Need check the server t = PTemplate(env) conn = WebModel.connection() s = get_session() if check_login(): content_index = '' conn = WebModel.connection() task = Task(conn) menu = get_menu(config_admin.modules_admin) lang_selected = get_language(s) arr_task = task.select_a_row(task_id) if arr_task: server_model = Server(conn) server_model.set_conditions('where ip=%s', [server]) arr_server = server_model.select_a_row_where() if arr_server: #arr_task= content_index = t.load_template( 'pastafari/progress.phtml', name_task=arr_task['name_task'] + ' - ' + arr_server['hostname'], description_task=arr_task['description_task'], task_id=task_id, server=server, position=0) conn.close() return t.load_template('admin/content.html', title='Servers log', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: conn.close() return ""
def home(): if check_login(): s = get_session() #Load menu menu = get_menu(config_admin.modules_admin) lang_selected = get_language(s) t = PTemplate(env) conn = WebModel.connection() content_index = admin(t=t, connection=conn) if t.show_basic_template == True: return t.load_template('admin/content.html', title='Servers', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: return content_index else: redirect(make_url(config.admin_folder))
def home(): connection = WebModel.connection() #Fix, make local variable t = PTemplate(env) s = get_session() if check_login(): #Load menu menu = get_menu(config_admin.modules_admin) lang_selected = get_language(s) content_index = t.load_template('pastafari/dashboard.phtml') return t.load_template('admin/content.html', title='Dashboard', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: redirect(make_url(config.admin_folder))
def base_admin(func_view, env, title, **args): env.directories.insert(1, config.paramecio_root+'/modules/admin/templates') content_index='' connection=WebModel.connection() #Fix, make local variable t=PTemplate(env) s=get_session() if check_login(): #Load menu menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) content_index=func_view(connection, t, s, **args) return t.load_template('admin/content.html', title=title, content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: redirect(make_url(config.admin_folder))
def test_update_table(self): connection=WebModel.connection() model=ExampleModel(connection) print('Check modifications in table') sql=model.create_table() self.assertTrue(model.query(sql)) fields_to_modify=[] fields_to_add_index=[] fields_to_add_constraint=[] fields_to_add_unique=[] fields_to_delete_index=[] fields_to_delete_unique=[] fields_to_delete_constraint=[] fields_to_delete=[] model.register(corefields.CharField('description')) model.update_table(['description'], fields_to_modify, fields_to_add_index, fields_to_add_constraint, fields_to_add_unique, fields_to_delete_index, fields_to_delete_unique, fields_to_delete_constraint, fields_to_delete) model.register(corefields.IntegerField('description')) model.update_table([], ['description'], ['description'], [], ['description'], fields_to_delete_index, fields_to_delete_unique, fields_to_delete_constraint, fields_to_delete) model.update_table([], fields_to_modify, fields_to_add_index, fields_to_add_constraint, fields_to_add_unique, ['description'], ['description'], fields_to_delete_constraint, ['description']) self.assertTrue(model.drop()) connection.close()
def home(): if check_login(): s=get_session() #Load menu menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) t=PTemplate(env) conn=WebModel.connection() url=make_url(pastafari_folder+'/os') os=servers.OsServer(conn) admin=GenerateAdminClass(os, url, t) admin.list.fields_showed=['name', 'codename'] admin.list.s['order']='0' admin.list.s['order_field']='name' admin.list.yes_search=False content_index=admin.show() return t.load_template('admin/content.html', title='Os Servers', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: redirect(make_url(config.admin_folder))
def check(self, value): if type(value).__name__=='str': try: value=json.loads(value) except json.JSONDecodeError: value=[] self.error=True self.txt_error='Sorry, the json array is invalid' elif type(value).__name__!='list': value=[] self.error=True self.txt_error='Sorry, the json array is invalid' if type(self.field_type).__name__!='ArrayField': for k,v in enumerate(value): value[k]=self.field_type.check(v) final_value=json.dumps(value) final_value=WebModel.escape_sql(final_value) return final_value
def disk_status(server_id): if check_login(): s=get_session() conn=WebModel.connection() server=servers.Server(conn) arr_server=server.select_a_row(server_id) if arr_server: if 'ip' in arr_server: ip=arr_server['ip'] status_disk=servers.StatusDisk(conn) status_disk.set_conditions('where ip=%s', [ip]) arr_disk=status_disk.select_to_array(['disk', 'used', 'free', 'date']) return filter_ajax(arr_disk) return filter_ajax({})
def index(page_id=0, slug=''): conn = WebModel.connection() page = Page(conn) page.show_formatted = True if page_id: page.set_conditions('WHERE id=%s', [page_id]) if slug: page.set_conditions('WHERE slugify=%s', [slug]) arr_page = page.select_a_row_where() conn.close() if arr_page: return t.load_template('page.phtml', title_page=arr_page['title'], content_page=arr_page['text']) else: abort(404, "No page found")
def disk_status(server_id): if check_login(): s = get_session() conn = WebModel.connection() server = servers.Server(conn) arr_server = server.select_a_row(server_id) if arr_server: if 'ip' in arr_server: ip = arr_server['ip'] status_disk = servers.StatusDisk(conn) status_disk.set_conditions('where ip=%s', [ip]) arr_disk = status_disk.select_to_array( ['disk', 'used', 'free', 'date']) return filter_ajax(arr_disk) return filter_ajax({})
def execute_script(task_id): args=['%s launcher.py --task_id=%i' % (pastafari_py_command, task_id)] with Popen(args, bufsize=None, executable=None, stdin=None, stdout=PIPE, stderr=PIPE, preexec_fn=None, shell=True, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, threadpool=None) as proc: proc.wait() return_value=proc.returncode if return_value>0: connection=WebModel.connection() logtask=tasks.LogTask(connection) task=tasks.Task(connection) logtask.create_forms() task.create_forms() line=proc.stdout.read().decode('utf-8') line_error=proc.stderr.read().decode('utf-8') logtask.insert({'task_id': task_id, 'progress': 100, 'message': 'Error executing launcher.py: '+str(line)+"\n"+str(line_error), 'error': 1, 'status': 1}) #Status die task.set_conditions('where id=%s', [task_id]) task.reset_require() task.update({'status': 1, 'error': 1}) connection.close()
def home(): if check_login(): s=get_session() #Load menu menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) t=PTemplate(env) conn=WebModel.connection() content_index=admin(t=t, connection=conn) if t.show_basic_template==True: return t.load_template('admin/content.html', title='Servers', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: return content_index else: redirect(make_url(config.admin_folder))
def test_zcheck_1_foreignkeys(self): connection=WebModel.connection() model=ExampleModel(connection) foreignkey=ForeignKeyExampleModel(connection) print('Checking ForeignKeys models...') sql=model.create_table() sqlf=foreignkey.create_table() print('Creating foreignkey table...') self.assertTrue(model.query(sql)) self.assertTrue(foreignkey.query(sqlf)) for k_field, index in WebModel.arr_sql_index['foreignkeyexamplemodel'].items(): print("---Added index to "+k_field) foreignkey.query(index) for k_set, index_set in WebModel.arr_sql_set_index['foreignkeyexamplemodel'].items(): if index_set!="": connection.query(index_set) print("---Added constraint to "+k_set) model.create_forms() self.assertTrue(model.insert({'title': 'Foreign title', 'content': 'Foreign content'})) my_id=model.insert_id() foreignkey.create_forms() self.assertTrue(foreignkey.insert({'example_id': my_id, 'name': 'Relationship'})) print('Checking insert...') foreignkey.set_conditions('where example_id=%s', [my_id]) self.assertEqual(foreignkey.select_count(), 1) model.set_conditions('where id=%s', [my_id]) self.assertTrue(model.delete()) foreignkey.set_conditions('where example_id=%s', [my_id]) print('Checking automatic delete...') self.assertEqual(foreignkey.select_count(), 0) print('Dropping foreignkey table...') self.assertTrue(foreignkey.drop()) self.assertTrue(model.drop()) pass
def register(): getpostfiles=GetPostFiles() connection=WebModel.connection() user_admin=UserAdmin(connection) user_admin.conditions=['WHERE privileges=%s', [2]] c=user_admin.select_count() if c==0: getpostfiles.obtain_post() getpostfiles.post['privileges']=2 user_admin.valid_fields=['username', 'email', 'password', 'privileges'] user_admin.create_forms() if user_admin.insert(getpostfiles.post, False): error= {'error': 0} return error else: user_admin.check_all_fields(getpostfiles.post, False) pass_values_to_form(getpostfiles.post, user_admin.forms, yes_error=True) s=get_session() s['csrf_token']=create_key_encrypt() error={'error': 1, 'csrf_token': s['csrf_token']} for field in user_admin.valid_fields: error[field]=user_admin.forms[field].txt_error error['repeat_password']=user_admin.forms['repeat_password'].txt_error #error['password_repeat']=I18n.lang('common', 'password_no_match', 'Passwords doesn\'t match') s.save() return error else: return {'error': 1}
def tasklist(server_id): content_index='' if check_login(): conn=WebModel.connection() server=Server(conn) arr_server=server.select_a_row(server_id) if arr_server: s=get_session() menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) task=Task(conn) arr_task_id=[] with task.query('select DISTINCT task_id from logtask where server=%s', [arr_server['ip']]) as cursor: for arr_task in cursor: arr_task_id.append(arr_task['task_id']) task.set_conditions('WHERE id IN '+task.check_in_list_str('id', arr_task_id), []) task_list=SimpleList(task, make_url(pastafari_folder+'/tasklist/'+str(server_id), {}), t) task_list.fields_showed=['id', 'name_task', 'description_task', 'error', 'status'] task_list.yes_search=False task_list.order_field='id' task_list.order=1 request.environ['server_id']=arr_server['id'] task_list.arr_extra_options=[server_task_options] return_url=make_url('pastafari/servers') content_index=t.load_template('pastafari/admin/showtasks.phtml', task_list=task_list, server=arr_server, return_url=return_url) else: cont_index=I18n.lang('pastafari', 'sorry_i_cannot_find_the_server', 'Sorry, i cannot find the server') conn.close() return t.load_template('admin/content.html', title=I18n.lang('pastafari', 'task_list_of', 'Task list of')+ ' %s' % arr_server['hostname'], content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) return ""
def showprogress(task_id, server): # Need check the server t=PTemplate(env) conn=WebModel.connection() s=get_session() if check_login(): content_index='' conn=WebModel.connection() task=Task(conn) menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) arr_task=task.select_a_row(task_id) if arr_task: server_model=Server(conn) server_model.set_conditions('where ip=%s', [server]) arr_server=server_model.select_a_row_where() if arr_server: #arr_task= content_index=t.load_template('pastafari/progress.phtml', name_task=arr_task['name_task']+' - '+arr_server['hostname'], description_task=arr_task['description_task'], task_id=task_id, server=server, position=0) conn.close() return t.load_template('admin/content.html', title='Servers log', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: conn.close() return ""
def check_code_token(): t=PTemplate(env) if yes_recovery_login==True: getpost=GetPostFiles() getpost.obtain_post() connection=WebModel.connection() user_admin=UserAdmin(connection) token=getpost.post.get('token', '') token=user_admin.fields['token_recovery'].check(token) if token.strip()!='': user_admin.set_conditions('WHERE token_recovery=%s', [token]) user_admin.yes_reset_conditions=False arr_user=user_admin.select_a_row_where(['id', 'email']) if arr_user: new_password=create_key() user_admin.valid_fields=['password', 'token_recovery', 'num_tries'] user_admin.reset_require() user_admin.check_user=False if user_admin.update({'password': new_password, 'token_recovery': "", 'num_tries': 0}, False): send_mail=SendMail() content_mail=t.load_template('admin/recovery_password.phtml', password=new_password) if not send_mail.send(email_address, [arr_user['email']], I18n.lang('admin', 'send_password_email', 'Your new password'), content_mail): return {'token': 'Error: i cannot send mail', 'error': 1} return {'token': 'Error: cannot send the maild with the new password', 'error': 0} s=get_session() s['csrf_token']=create_key_encrypt() s.save() return {'token': 'Error: token is not valid', 'error': 1, 'csrf_token': s['csrf_token']}
def getservers(task_id, position): conn = WebModel.connection() s = get_session() if check_login(): task = Task(conn) logtask = LogTask(conn) server = Server(conn) arr_task = task.select_a_row(task_id) server.set_conditions( 'WHERE ip IN (select DISTINCT server from logtask where task_id=%s)', [task_id]) server.set_limit([position, num_tasks]) arr_server = server.select_to_array(['hostname', 'ip']) response.set_header('Content-type', 'text/plain') if arr_server: conn.close() return filter_ajax({'servers': arr_server, 'error': 0}) else: logtask.set_conditions('where task_id=%s and server=""', [task_id]) logtask.set_order({'id': 1}) arr_tasklog = logtask.select_a_row_where([], True) if arr_tasklog: if arr_tasklog['error'] == 1: conn.close() return arr_tasklog else: conn.close() return filter_ajax({'error': 0, 'servers': []}) else: conn.close() return filter_ajax({'error': 0, 'servers': []}) pass else: conn.close() return filter_ajax({})
def getservers(task_id, position): conn=WebModel.connection() s=get_session() if check_login(): task=Task(conn) logtask=LogTask(conn) server=Server(conn) arr_task=task.select_a_row(task_id) server.set_conditions('WHERE ip IN (select DISTINCT server from logtask where task_id=%s)', [task_id]) server.set_limit([position, num_tasks]) arr_server=server.select_to_array(['hostname', 'ip']) response.set_header('Content-type', 'text/plain') if arr_server: conn.close() return filter_ajax({'servers': arr_server, 'error': 0}) else: logtask.set_conditions('where task_id=%s and server=""', [task_id]) logtask.set_order({'id': 1}) arr_tasklog=logtask.select_a_row_where([], True) if arr_tasklog: if arr_tasklog['error']==1: conn.close() return arr_tasklog else: conn.close() return filter_ajax({'error': 0, 'servers': []}) else: conn.close() return filter_ajax({'error': 0, 'servers': []}) pass else: conn.close() return filter_ajax({})
def send_password(): connection=WebModel.connection() user_admin=UserAdmin(connection) t=PTemplate(env) getpost=GetPostFiles() getpost.obtain_post() email=getpost.post.get('email', '') email=user_admin.fields['email'].check(email) if user_admin.fields['email'].error: s=get_session() s['csrf_token']=create_key_encrypt() s.save() return {'email': user_admin.fields['email'].txt_error, 'error': 1, 'csrf_token': s['csrf_token']} else: user_admin.set_conditions('WHERE email=%s', [email]) user_admin.yes_reset_conditions=False if user_admin.select_count()==1: user_admin.reset_require() user_admin.valid_fields=['token_recovery'] user_admin.check_user=False token=create_key_encrypt_256() if user_admin.update({'token_recovery': token}): send_mail=SendMail() content_mail=t.load_template('admin/recovery_mail.phtml', token=token) if not send_mail.send(email_address, [email], I18n.lang('admin', 'send_email', 'Email for recovery your password'), content_mail): return {'email': 'Error: i cannot send mail', 'error': 1} return {'email': '', 'error': 0}
def execute_script(task_id): args = ['%s launcher.py --task_id=%i' % (pastafari_py_command, task_id)] with Popen(args, bufsize=None, executable=None, stdin=None, stdout=PIPE, stderr=PIPE, preexec_fn=None, shell=True, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, threadpool=None) as proc: proc.wait() return_value = proc.returncode if return_value > 0: connection = WebModel.connection() logtask = tasks.LogTask(connection) task = tasks.Task(connection) logtask.create_forms() task.create_forms() line = proc.stdout.read().decode('utf-8') line_error = proc.stderr.read().decode('utf-8') logtask.insert({ 'task_id': task_id, 'progress': 100, 'message': 'Error executing launcher.py: ' + str(line) + "\n" + str(line_error), 'error': 1, 'status': 1 }) #Status die task.set_conditions('where id=%s', [task_id]) task.reset_require() task.update({'status': 1, 'error': 1}) connection.close()
def home(): connection=WebModel.connection() #Fix, make local variable s=get_session() if check_login(): getpostfiles=GetPostFiles() getpostfiles.obtain_get() parent_id=getpostfiles.get.get('parent_id', '0') parent_id=int(parent_id) #Load menu menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) groups=servers.ServerGroup(connection) groups.create_forms() groups.forms['parent_id'].default_value=parent_id hierarchy=HierarchyModelLinks(groups, 'All groups', 'name', 'parent_id', make_url('pastafari/groups')) hierarchy.prepare() group_list=GenerateAdminClass(groups, make_url(pastafari_folder+'/groups', {'parent_id': str(parent_id)}), t) groups.set_conditions('WHERE parent_id=%s', [parent_id]) group_list.list.fields_showed=['name'] group_list.list.arr_extra_options=[task_options] group_list.list.s['order']='0' group_list.list.s['order_field']='name' group_list.list.yes_search=False content_index=t.load_template('pastafari/groups.phtml', group_list=group_list, hierarchy_links=hierarchy, son_id=parent_id) #group_list.show() return t.load_template('admin/content.html', title=I18n.lang('pastafari', 'servers_groups', 'Server\'s Group'), content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: redirect(make_url(config.admin_folder))
def index(api_key, task_id): connection=WebModel.connection() # Get the task to execute. if api_key==config_task.api_key: task=tasks.Task(connection) logtask=tasks.LogTask(connection) logtask.create_forms() """ task.set_conditions('where status=%s and id!=%s', [0, task_id]) c=task.select_count() if c==0: """ arr_task=task.select_a_row(task_id) if arr_task: # Add to queue greenlet = gevent.spawn( execute_script, task_id) """p = Process(target=execute_script, args=(task_id,)) p.start()""" # Close the connection response={'error': 0, 'code_error': 0, 'message': 'Begin task with id '+str(task_id), 'progress' : 0} return response else: response={'error': 1, 'code_error': 1, 'message': 'Doesnt exists task with id '+str(task_id), 'progress' : 100, 'status': 1} return response """ else: response={'error': 1, 'code_error': 1, 'message': 'Sorry, other task are in process', 'progress' : 100, 'status': 1} return response """ else: response={'error': 1, 'code_error': 1, 'message': 'No permission for make tasks', 'progress' : 100, 'status': 1} return response
def recovery_password(): t=PTemplate(env) connection=WebModel.connection() user_admin=UserAdmin(connection) post={} user_admin.create_forms(['email']) forms=show_form(post, user_admin.forms, t, yes_error=False) #connection.close() return t.load_template('admin/recovery.phtml', forms=forms)
def graphs(server_id): if check_login(): s = get_session() #Load menu menu = get_menu(config_admin.modules_admin) lang_selected = get_language(s) t = PTemplate(env) conn = WebModel.connection() server = servers.Server(conn) arr_server = server.select_a_row(server_id) if arr_server: content_index = t.load_template('pastafari/admin/graphs.phtml', server=arr_server, api_key=config_task.api_key) else: content_index = '' if t.show_basic_template == True: return t.load_template('admin/content.html', title='Servers', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: return content_index else: redirect(make_url(config.admin_folder))
def get_updates(ip, api_key): getpost=GetPostFiles() if config_task.api_key==api_key: ipcheck=IpField('', '') ip=ipcheck.check(ip) if ipcheck.error!=True: getpost.obtain_post(['num_updates'], True) try: num_updates=int(getpost.post.get('num_updates', '0')) except: num_updates=0 #if num_updates>0: conn=WebModel.connection() server=servers.Server(conn) server.valid_fields=['num_updates']; server.set_conditions('where ip=%s', [ip]) server.reset_require() server.update({'num_updates': num_updates}) return 'Ok' return "Ouch" """
def test_conditions(self): print('Test conditions') connection=WebModel.connection() model=ExampleModel(connection) sql=model.create_table() self.assertTrue(model.query(sql)) cur=model.set_conditions('where id=%s', [4]).select() self.assertTrue(cur) cur.close() self.assertTrue(model.drop()) connection.close()
def home(): if check_login(): s = get_session() #Load menu menu = get_menu(config_admin.modules_admin) lang_selected = get_language(s) t = PTemplate(env) conn = WebModel.connection() url = make_url(pastafari_folder + '/os') os = servers.OsServer(conn) admin = GenerateAdminClass(os, url, t) admin.list.fields_showed = ['name', 'codename'] admin.list.s['order'] = '0' admin.list.s['order_field'] = 'name' admin.list.yes_search = False content_index = admin.show() return t.load_template('admin/content.html', title='Os Servers', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: redirect(make_url(config.admin_folder))
def test_zcheck_connections(self): print('Check connection of models...') connection=WebModel.connection() model=ExampleModel(connection) model2=ExampleModel2(connection) sql=model.create_table() sql2=model2.create_table() #print(sql) self.assertTrue(model.query(sql)) self.assertTrue(model2.query(sql2)) self.assertTrue(model.drop()) self.assertTrue(model2.drop()) connection.close() pass
def graphs(server_id): if check_login(): s=get_session() #Load menu menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) t=PTemplate(env) conn=WebModel.connection() server=servers.Server(conn) arr_server=server.select_a_row(server_id) if arr_server: content_index=t.load_template('pastafari/admin/graphs.phtml', server=arr_server, api_key=config_task.api_key) else: content_index='' if t.show_basic_template==True: return t.load_template('admin/content.html', title='Servers', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: return content_index else: redirect(make_url(config.admin_folder))
def home(): connection=WebModel.connection() #Fix, make local variable t=PTemplate(env) s=get_session() if check_login(): #Load menu menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) content_index=t.load_template('pastafari/dashboard.phtml') return t.load_template('admin/content.html', title='Dashboard', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: redirect(make_url(config.admin_folder))
def home(server_id, task_id): connection=WebModel.connection() #Fix, make local variable t=PTemplate(env) s=get_session() if check_login(): task=Task(connection) logtask=LogTask(connection) server=Server(connection) getpost=GetPostFiles() getpost.obtain_get() #Load menu menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) # server_id=getpost.get.get('id', 0) server_hostname='' arr_server=server.select_a_row(server_id) if arr_server: server_hostname=' - '+arr_server['hostname'] ip=arr_server['ip'] logtask.set_conditions('WHERE server=%s', [ip]) logtask_list=SimpleList(logtask, make_url(pastafari_folder+'/serverslogs', {'id':str(server_id) }), t) logtask_list.limit_pages=100 logtask_list.yes_search=False logtask_list.order_field='id' logtask_list.order=1 logtask_list.fields_showed=['id', 'server', 'message', 'error', 'status'] logtask_list.arr_extra_fields=[] logtask_list.arr_extra_options=[] return_url=make_url('pastafari/servers') content_index=t.load_template('pastafari/admin/logs_list.phtml', logtask_list=logtask_list, server=arr_server, return_url=return_url) #logtask_list.show() # Send request to server else: content_index='Log no exists' connection.close() return t.load_template('admin/content.html', title='Servers log'+ server_hostname, content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: connection.close() redirect(make_url(config.admin_folder))
def getinfo(): if check_login(): connection=WebModel.connection() server=servers.Server(connection) status_disk=servers.StatusDisk(connection) status_net=servers.StatusNet(connection) status_cpu=servers.StatusCpu(connection) c=server.select_count() now=datetime.now(True) timestamp_now=datetime.obtain_timestamp(now) five_minutes=int(timestamp_now)-300 five_minutes_date=datetime.timestamp_to_datetime(five_minutes) server.set_conditions('WHERE date<%s', [five_minutes_date]) c_down=server.select_count() server.set_conditions('WHERE num_updates>%s', [0]) c_updates=server.select_count() with status_disk.query('select sum(used) as total_used, sum(free) as total_free from statusdisk') as cur: arr_disk=cur.fetchone() status_disk.set_conditions('WHERE percent>%s', [85]) c_bloated_disk=status_disk.select_count() # Network use twelve_hours=int(timestamp_now)-43200 twelve_hours_date=datetime.timestamp_to_datetime(twelve_hours) #status_net.set_conditions('WHERE date>%s', [twelve_hours_date]) #SELECT(t2.sub1 - t1.sub1) AS sub1, (t2.sub2 - t1.sub2) AS sub2 #FROM table t1 CROSS JOIN # table t2 #WHERE t1.date = '2014-11-08' AND t2.id = '2014-11-07'; # select (t1.bytes_sent+t2,bytes_sent) as bytes_sent from statusnet t1 CROSS JOIN statusnet t2 arr_net={'total_bytes_recv': 0, 'total_bytes_sent': 0} #status_net.set_conditions('WHERE date>%s', [twelve_hours_date]) #status_net.set_order('date', 'ASC') #select bytes_sent, bytes_recv, ip from statusnet WHERE date>'20160606093229' and last_updated=1 group by ip status_net.set_conditions('WHERE date>%s and last_updated=1 group by ip', [twelve_hours_date]) with status_net.select(['bytes_recv', 'bytes_sent']) as cur: # I think that this loop can be optimized for net in cur: arr_net['total_bytes_recv']+=net['bytes_recv'] arr_net['total_bytes_sent']+=net['bytes_sent'] arr_cpu={'0-30': 0, '30-70': 0, '70-100': 0} status_cpu.set_conditions('WHERE date>%s and last_updated=1 group by ip', [twelve_hours_date]) with status_cpu.select(['idle']) as cur: for cpu in cur: if cpu['idle']>70: arr_cpu['70-100']+=1 elif cpu['idle']>30: arr_cpu['30-70']+=1 else: arr_cpu['0-30']+=1 #print(c_net) arr_json={'num_servers': c, 'num_servers_down': c_down, 'num_servers_updates': c_updates, 'disk_info': arr_disk, 'num_servers_bloated': c_bloated_disk, 'net_info': arr_net, 'cpu_info': arr_cpu} return arr_json else: redirect(make_url(config.admin_folder))
arr_mail.append("SendMail.username='******'") arr_mail.append("SendMail.password='******'") arr_mail.append("SendMail.ssl="+ssl_email+"") arr_mail.append("email_address='"+email_address+"'") arr_mail.append("email_notification=['"+email_notification+"']") with open('settings/config.py', 'a') as f: f.write("\n\n".join(arr_mail)) print('Finishing config...') conn=WebModel.connection() os_server=servers.OsServer(conn) os_server.create_forms() os_server.insert({'name': 'Debian Jessie', 'codename': 'debian_jessie'}) os_server.insert({'name': 'Ubuntu Xenial', 'codename': 'ubuntu_xenial'}) os_server.insert({'name': 'CentOS6', 'codename': 'centos6'}) os_server.insert({'name': 'CentOS7', 'codename': 'centos7'}) # Deploy in nginx # deploy=input('Do you want deploy pastafari for production? you need Debian/Ubuntu Linux with systemd and nginx (yes/no) by default no: ').strip().lower()
def __init__(self, server, task_id=0): self.config = config_task self.server = server self.name_task = '' self.codename_task = '' self.description_task = '' self.txt_error = '' self.os_server = '' self.files = [] # Format first array element is command with the interpreter, the task is agnostic, the files in os directory. The commands are setted with 750 permission. # First element is the file, next elements are the arguments self.commands_to_execute = [] #THe files to delete self.delete_files = [] self.delete_directories = [] #The id of the task in db self.id = task_id self.user = '' self.password = '' self.connection = WebModel.connection() self.logtask = tasks.LogTask(self.connection) self.task = tasks.Task(self.connection) self.taskdone = ServerGroupTask(self.connection) self.ssh = paramiko.SSHClient() self.logtask.reset_require() self.task.reset_require() self.one_time = False self.version = '1.0' self.simultaneous = False self.error_post_task = '' self.extra_data = {} self.pre_task = None self.error_task = None self.post_task = None
def getinfo(): if check_login(): connection = WebModel.connection() server = servers.Server(connection) status_disk = servers.StatusDisk(connection) status_net = servers.StatusNet(connection) status_cpu = servers.StatusCpu(connection) c = server.select_count() now = datetime.now(True) timestamp_now = datetime.obtain_timestamp(now) five_minutes = int(timestamp_now) - 300 five_minutes_date = datetime.timestamp_to_datetime(five_minutes) server.set_conditions('WHERE date<%s', [five_minutes_date]) c_down = server.select_count() server.set_conditions('WHERE num_updates>%s', [0]) c_updates = server.select_count() with status_disk.query( 'select sum(used) as total_used, sum(free) as total_free from statusdisk' ) as cur: arr_disk = cur.fetchone() status_disk.set_conditions('WHERE percent>%s', [85]) c_bloated_disk = status_disk.select_count() # Network use twelve_hours = int(timestamp_now) - 43200 twelve_hours_date = datetime.timestamp_to_datetime(twelve_hours) #status_net.set_conditions('WHERE date>%s', [twelve_hours_date]) #SELECT(t2.sub1 - t1.sub1) AS sub1, (t2.sub2 - t1.sub2) AS sub2 #FROM table t1 CROSS JOIN # table t2 #WHERE t1.date = '2014-11-08' AND t2.id = '2014-11-07'; # select (t1.bytes_sent+t2,bytes_sent) as bytes_sent from statusnet t1 CROSS JOIN statusnet t2 arr_net = {'total_bytes_recv': 0, 'total_bytes_sent': 0} #status_net.set_conditions('WHERE date>%s', [twelve_hours_date]) #status_net.set_order('date', 'ASC') #select bytes_sent, bytes_recv, ip from statusnet WHERE date>'20160606093229' and last_updated=1 group by ip status_net.set_conditions( 'WHERE date>%s and last_updated=1 group by ip', [twelve_hours_date]) with status_net.select(['bytes_recv', 'bytes_sent']) as cur: # I think that this loop can be optimized for net in cur: arr_net['total_bytes_recv'] += net['bytes_recv'] arr_net['total_bytes_sent'] += net['bytes_sent'] arr_cpu = {'0-30': 0, '30-70': 0, '70-100': 0} status_cpu.set_conditions( 'WHERE date>%s and last_updated=1 group by ip', [twelve_hours_date]) with status_cpu.select(['idle']) as cur: for cpu in cur: if cpu['idle'] > 70: arr_cpu['70-100'] += 1 elif cpu['idle'] > 30: arr_cpu['30-70'] += 1 else: arr_cpu['0-30'] += 1 #print(c_net) arr_json = { 'num_servers': c, 'num_servers_down': c_down, 'num_servers_updates': c_updates, 'disk_info': arr_disk, 'num_servers_bloated': c_bloated_disk, 'net_info': arr_net, 'cpu_info': arr_cpu } return arr_json else: redirect(make_url(config.admin_folder))
def index(api_key, task_id): connection = WebModel.connection() # Get the task to execute. if api_key == config_task.api_key: task = tasks.Task(connection) logtask = tasks.LogTask(connection) logtask.create_forms() """ task.set_conditions('where status=%s and id!=%s', [0, task_id]) c=task.select_count() if c==0: """ arr_task = task.select_a_row(task_id) if arr_task: # Add to queue greenlet = gevent.spawn(execute_script, task_id) """p = Process(target=execute_script, args=(task_id,)) p.start()""" # Close the connection response = { 'error': 0, 'code_error': 0, 'message': 'Begin task with id ' + str(task_id), 'progress': 0 } return response else: response = { 'error': 1, 'code_error': 1, 'message': 'Doesnt exists task with id ' + str(task_id), 'progress': 100, 'status': 1 } return response """ else: response={'error': 1, 'code_error': 1, 'message': 'Sorry, other task are in process', 'progress' : 100, 'status': 1} return response """ else: response = { 'error': 1, 'code_error': 1, 'message': 'No permission for make tasks', 'progress': 100, 'status': 1 } return response
def getprogress(task_id): conn=WebModel.connection() s=get_session() if check_login(): getpost=GetPostFiles() getpost.obtain_post([], True) task=Task(conn) logtask=LogTask(conn) server=Server(conn) arr_task=task.select_a_row(task_id) try: servers=json.loads(getpost.post['servers']) except: servers={} #for ip in servers: if len(servers)>0: logtask.set_order({'id': 1}) logtask.set_conditions('WHERE task_id=%s and status=1 and error=1 and server=""', [task_id]) c_error=logtask.select_count() if c_error==0: logtask.set_order({'id': 1}) checked_servers=logtask.check_in_list_str('server', servers) logtask.set_conditions('WHERE task_id=%s and status=1 and server IN '+checked_servers+' and server!=""', [task_id]) arr_log=logtask.select_to_array(['status', 'error', 'server']) logtask.set_order({'id': 1}) logtask.set_conditions('WHERE task_id=%s and status=0 and server NOT IN '+checked_servers+' and server!=""', [task_id]) arr_log2=logtask.select_to_array(['status', 'error', 'server']) arr_log=arr_log2+arr_log #response.set_header('Content-type', 'text/plain') #return json.dumps(arr_log) else: arr_log=[] for server in servers: arr_log.append({'status':1, 'error':1, 'server': server}) response.set_header('Content-type', 'text/plain') conn.close() return filter_ajax(arr_log) response.set_header('Content-type', 'text/plain') arr_log=[] conn.close() return filter_ajax(arr_log) else: conn.close() return filter_ajax({})
def gettasks(): if check_login(): s=get_session() #Load menu menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) t=PTemplate(env) conn=WebModel.connection() getpostfiles=GetPostFiles() getpostfiles.obtain_get() getpostfiles.get['op']=getpostfiles.get.get('op', '') getpostfiles.get['task_id']=getpostfiles.get.get('task_id', '0') getpostfiles.get['position']=getpostfiles.get.get('position', '0') getpostfiles.get['server']=getpostfiles.get.get('server', '') try: task_id=int(getpostfiles.get['task_id']) except: task_id=0 try: position=int(getpostfiles.get['position']) except: position=0 task=Task(conn) logtask=LogTask(conn) arr_task=task.select_a_row(task_id) t.show_basic_template=False arr_rows={'wait': 1} if arr_task: logtask.set_limit([position, 20]) logtask.set_order({'id': 0}) logtask.conditions=['WHERE task_id=%s', [task_id]] if getpostfiles.get['server']!='': logtask.conditions=['WHERE task_id=%s and logtask.server=%s', [task_id, getpostfiles.get['server']]] #logtask.set_limit([position, 1]) #arr_row=logtask.select_a_row_where([], 1, position) logtask.yes_reset_conditions=False c=logtask.select_count() if c>0: arr_rows=[] with logtask.select([], True) as cursor: for arr_row in cursor: arr_rows.append(arr_row) else: arr_rows=[] with logtask.set_conditions('WHERE task_id=%s and logtask.error=1', [task_id]).select([], True) as cursor: for arr_row in cursor: arr_rows.append(arr_row) if arr_rows==0: arr_rows={'wait': 1} else: with logtask.set_conditions('WHERE task_id=%s and logtask.server=%s and logtask.error=1', [task_id, getpostfiles.get['server']]).select([], True) as cursor: for arr_row in cursor: arr_rows.append(arr_row) """ arr_rows=[] with logtask.select() as cursor: for arr_row in cursor: arr_rows.append(arr_row) if len(arr_rows)==0: logtask.set_limit([1]) logtask.set_order({'id': 0}) logtask.conditions=['WHERE task_id=%s and status=1 and error=1 and server=""', [task_id]] if logtask.select_count('id', True)==0: if arr_task['status']=='0' or arr_task['status']==0: conn.close() return filter_ajax({'wait': 1}) else: conn.close() return filter_ajax({}) else: logtask.set_limit([1]) logtask.set_order({'id': 0}) logtask.conditions=['WHERE task_id=%s and status=1 and error=1 and server=""', [task_id]] arr_rows=logtask.select_to_array([], True) #response.set_header('Content-type', 'text/plain') conn.close() return filter_ajax(arr_rows) else: conn.close() return filter_ajax({'wait': 1}) """ else: arr_task={'task_id': task_id, 'progress': 100, 'message': 'Error: no exists task', 'error': 1, 'status': 1} conn.close() return filter_ajax(arr_rows) else: redirect(make_url(config.admin_folder))
def home(server_id, task_id): connection = WebModel.connection() #Fix, make local variable t = PTemplate(env) s = get_session() if check_login(): task = Task(connection) logtask = LogTask(connection) server = Server(connection) getpost = GetPostFiles() getpost.obtain_get() #Load menu menu = get_menu(config_admin.modules_admin) lang_selected = get_language(s) # server_id=getpost.get.get('id', 0) server_hostname = '' arr_server = server.select_a_row(server_id) if arr_server: server_hostname = ' - ' + arr_server['hostname'] ip = arr_server['ip'] logtask.set_conditions('WHERE server=%s', [ip]) logtask_list = SimpleList( logtask, make_url(pastafari_folder + '/serverslogs', {'id': str(server_id)}), t) logtask_list.limit_pages = 100 logtask_list.yes_search = False logtask_list.order_field = 'id' logtask_list.order = 1 logtask_list.fields_showed = [ 'id', 'server', 'message', 'error', 'status' ] logtask_list.arr_extra_fields = [] logtask_list.arr_extra_options = [] return_url = make_url('pastafari/servers') content_index = t.load_template('pastafari/admin/logs_list.phtml', logtask_list=logtask_list, server=arr_server, return_url=return_url) #logtask_list.show() # Send request to server else: content_index = 'Log no exists' connection.close() return t.load_template('admin/content.html', title='Servers log' + server_hostname, content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: connection.close() redirect(make_url(config.admin_folder))
def post(ip, api_key): getpost=GetPostFiles() if config_task.api_key==api_key: conn=WebModel.connection() server=servers.Server(conn) data_server=servers.DataServer(conn) ipcheck=IpField('', '') ip=ipcheck.check(ip) server.set_conditions('WHERE ip=%s', [ip]) now=datetime.now() c=server.select_count() if ipcheck.error!=True and c>0: status_disk=servers.StatusDisk(conn) status_net=servers.StatusNet(conn) status_cpu=servers.StatusCpu(conn) status_mem=servers.StatusMemory(conn) server.set_conditions('where ip=%s', [ip]) server.yes_reset_conditions=False arr_server=server.select_a_row_where(['id']) if arr_server: arr_update={'status': 1, 'monitoring':1, 'date': now} getpost.obtain_post(['data_json'], True) try: arr_info=json.loads(getpost.post['data_json']) except: return 'Ouch' server_id=arr_server['id'] net_id=None memory_id=None cpu_id=None arr_disk_id=[] if 'net_info' in arr_info: net_info=arr_info['net_info'] if type(net_info).__name__=='list': post={'bytes_sent': net_info[0], 'bytes_recv': net_info[1], 'errin': net_info[2], 'errout': net_info[3], 'dropin': net_info[4], 'dropout': net_info[5], 'date': now, 'ip': ip, 'last_updated': 1} status_net.reset_require() status_net.create_forms() status_net.set_order({'id': 1}) status_net.set_limit([1]) status_net.set_conditions('WHERE ip=%s', [ip]) status_net.update({'last_updated': 0}) status_net.insert(post) net_id=status_net.insert_id() if 'mem_info' in arr_info: mem_info=arr_info['mem_info'] if type(mem_info).__name__=='list': #svmem(total=518418432, available=413130752, percent=20.3, used=208052224, free=310366208, active=137457664, inactive=40919040, buffers=20692992, cached=82071552, shared=4820992) post={'total': mem_info[0], 'available': mem_info[1], 'percent': mem_info[2], 'used': mem_info[3], 'free': mem_info[4], 'active': mem_info[5], 'inactive': mem_info[6], 'buffers': mem_info[7], 'cached': mem_info[8], 'shared': mem_info[9], 'date': now, 'ip': ip, 'last_updated': 1} status_mem.reset_require() status_mem.create_forms() status_mem.set_order({'id': 1}) status_mem.set_limit([1]) status_mem.set_conditions('WHERE ip=%s', [ip]) status_mem.update({'last_updated': 0}) status_mem.insert(post) memory_id=status_mem.insert_id() if 'cpu_idle' in arr_info: status_cpu.reset_require() status_cpu.create_forms() status_cpu.set_order({'id': 1}) status_cpu.set_limit([1]) status_cpu.set_conditions('WHERE ip=%s', [ip]) status_cpu.update({'last_updated': 0}) status_cpu.insert({'ip': ip, 'idle': arr_info['cpu_idle'], 'date': now, 'last_updated': 1, 'num_cpu': arr_info['cpu_number']}) arr_update['actual_idle']=arr_info['cpu_idle'] cpu_id=status_cpu.insert_id() # Need optimitation if 'disks_info' in arr_info: status_disk.create_forms() status_disk.set_conditions('WHERE ip=%s', [ip]) method_update=status_disk.insert if status_disk.select_count()>0: method_update=status_disk.update for disk, data in arr_info['disks_info'].items(): status_disk.set_conditions('where ip=%s and disk=%s', [ip, disk]) method_update({'ip' : ip, 'disk' : disk, 'date' : now, 'size' : data[0], 'used' : data[1], 'free' : data[2], 'percent' : data[3]}) status_disk.set_conditions('where ip=%s and disk=%s', [ip, disk]) arr_disk_id=status_disk.select_to_array(['id'], True) #Save status server.reset_require() server.create_forms() server.update(arr_update) # Save middle table for all statuses of a server data_server.create_forms() post={'server_id': server_id, 'net_id': net_id, 'memory_id': memory_id, 'cpu_id': cpu_id, 'ip': ip, 'date': now } z=0 final_id=0 for disk_id in arr_disk_id: if z<6: post['disk'+str(z)+'_id']=disk_id['id'] z+=1 #for z in range(z, 6): #post['disk'+str(z)+'_id']=final_id data_server.yes_reset_conditions=False method_data_update=data_server.insert data_server.set_conditions('where server_id=%s', [server_id]) if data_server.select_count()>0: method_data_update=data_server.update method_data_update(post) return 'Ok' return "Ouch"
def start(): parser = argparse.ArgumentParser(description='A daemon used for make a task in a server.The results are saved in a sql database using task class') parser.add_argument('--task_id', help='The task to execute', required=True) args = parser.parse_args() task_id=int(args.task_id) conn=WebModel.connection() task_model=tasks.Task(conn) logtask=tasks.LogTask(conn) arr_task=task_model.select_a_row(task_id) if arr_task: if arr_task['user']!='' and arr_task['password']!='' and arr_task['path']!='': config_task.remote_user=arr_task['user'] config_task.remote_password=arr_task['password'] config_task.remote_path=arr_task['path'] task_model.create_forms() task_model.reset_require() task_model.set_conditions('WHERE id=%s', [task_id]) task_model.update({'password': ''}) commands_to_execute=json.loads(arr_task['commands_to_execute']) if not commands_to_execute: print('Error: no task files') exit(1) if arr_task['where_sql_server']=='': task=generate_task(arr_task, task_id) task.exec() else: # Select the servers and make all tasks asynchronous server_model=servers.Server(conn) server_model.set_conditions(arr_task['where_sql_server'], []) server_model.yes_reset_conditions=False c=server_model.select_count() #Update task with number of servers task_model.set_conditions('WHERE id=%s', [task_id]) task_model.reset_require() task_model.valid_fields=['num_servers'] task_model.update({'num_servers': c}) z=0 while z<c: # Set the num of pools server_model.set_limit([z, num_tasks]) arr_servers=server_model.select_to_array() num_pools=len(arr_servers) with Pool(processes=num_pools) as pool: arr_task_exec=[] for server in arr_servers: arr_task_exec.append([arr_task, task_id, server['ip'], server['os_codename']]) pool.map(execute_multitask, arr_task_exec) #for x in range(num_pools) #pool. pass z+=num_tasks pass # Task done task_model.set_conditions('WHERE id=%s', [task_id]) task_model.reset_require() task_model.valid_fields=['status'] task_model.update({'num_servers': 1}) conn.close() exit(0)
def home(): connection = WebModel.connection() #Fix, make local variable s = get_session() if check_login(): getpostfiles = GetPostFiles() getpostfiles.obtain_get() parent_id = getpostfiles.get.get('parent_id', '0') parent_id = int(parent_id) #Load menu menu = get_menu(config_admin.modules_admin) lang_selected = get_language(s) groups = servers.ServerGroup(connection) groups.create_forms() groups.forms['parent_id'].default_value = parent_id hierarchy = HierarchyModelLinks(groups, 'All groups', 'name', 'parent_id', make_url('pastafari/groups')) hierarchy.prepare() group_list = GenerateAdminClass( groups, make_url(pastafari_folder + '/groups', {'parent_id': str(parent_id)}), t) groups.set_conditions('WHERE parent_id=%s', [parent_id]) group_list.list.fields_showed = ['name'] group_list.list.arr_extra_options = [task_options] group_list.list.s['order'] = '0' group_list.list.s['order_field'] = 'name' group_list.list.yes_search = False content_index = t.load_template('pastafari/groups.phtml', group_list=group_list, hierarchy_links=hierarchy, son_id=parent_id) #group_list.show() return t.load_template('admin/content.html', title=I18n.lang('pastafari', 'servers_groups', 'Server\'s Group'), content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: redirect(make_url(config.admin_folder))
def tasklist(server_id): content_index = '' if check_login(): conn = WebModel.connection() server = Server(conn) arr_server = server.select_a_row(server_id) if arr_server: s = get_session() menu = get_menu(config_admin.modules_admin) lang_selected = get_language(s) task = Task(conn) arr_task_id = [] with task.query( 'select DISTINCT task_id from logtask where server=%s', [arr_server['ip']]) as cursor: for arr_task in cursor: arr_task_id.append(arr_task['task_id']) task.set_conditions( 'WHERE id IN ' + task.check_in_list_str('id', arr_task_id), []) task_list = SimpleList( task, make_url(pastafari_folder + '/tasklist/' + str(server_id), {}), t) task_list.fields_showed = [ 'id', 'name_task', 'description_task', 'error', 'status' ] task_list.yes_search = False task_list.order_field = 'id' task_list.order = 1 request.environ['server_id'] = arr_server['id'] task_list.arr_extra_options = [server_task_options] return_url = make_url('pastafari/servers') content_index = t.load_template('pastafari/admin/showtasks.phtml', task_list=task_list, server=arr_server, return_url=return_url) else: cont_index = I18n.lang('pastafari', 'sorry_i_cannot_find_the_server', 'Sorry, i cannot find the server') conn.close() return t.load_template( 'admin/content.html', title=I18n.lang('pastafari', 'task_list_of', 'Task list of') + ' %s' % arr_server['hostname'], content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) return ""
def gettasks(): if check_login(): s = get_session() #Load menu menu = get_menu(config_admin.modules_admin) lang_selected = get_language(s) t = PTemplate(env) conn = WebModel.connection() getpostfiles = GetPostFiles() getpostfiles.obtain_get() getpostfiles.get['op'] = getpostfiles.get.get('op', '') getpostfiles.get['task_id'] = getpostfiles.get.get('task_id', '0') getpostfiles.get['position'] = getpostfiles.get.get('position', '0') getpostfiles.get['server'] = getpostfiles.get.get('server', '') try: task_id = int(getpostfiles.get['task_id']) except: task_id = 0 try: position = int(getpostfiles.get['position']) except: position = 0 task = Task(conn) logtask = LogTask(conn) arr_task = task.select_a_row(task_id) t.show_basic_template = False arr_rows = {'wait': 1} if arr_task: logtask.set_limit([position, 20]) logtask.set_order({'id': 0}) logtask.conditions = ['WHERE task_id=%s', [task_id]] if getpostfiles.get['server'] != '': logtask.conditions = [ 'WHERE task_id=%s and logtask.server=%s', [task_id, getpostfiles.get['server']] ] #logtask.set_limit([position, 1]) #arr_row=logtask.select_a_row_where([], 1, position) logtask.yes_reset_conditions = False c = logtask.select_count() if c > 0: arr_rows = [] with logtask.select([], True) as cursor: for arr_row in cursor: arr_rows.append(arr_row) else: arr_rows = [] with logtask.set_conditions( 'WHERE task_id=%s and logtask.error=1', [task_id]).select([], True) as cursor: for arr_row in cursor: arr_rows.append(arr_row) if arr_rows == 0: arr_rows = {'wait': 1} else: with logtask.set_conditions( 'WHERE task_id=%s and logtask.server=%s and logtask.error=1', [task_id, getpostfiles.get['server']]).select( [], True) as cursor: for arr_row in cursor: arr_rows.append(arr_row) """ arr_rows=[] with logtask.select() as cursor: for arr_row in cursor: arr_rows.append(arr_row) if len(arr_rows)==0: logtask.set_limit([1]) logtask.set_order({'id': 0}) logtask.conditions=['WHERE task_id=%s and status=1 and error=1 and server=""', [task_id]] if logtask.select_count('id', True)==0: if arr_task['status']=='0' or arr_task['status']==0: conn.close() return filter_ajax({'wait': 1}) else: conn.close() return filter_ajax({}) else: logtask.set_limit([1]) logtask.set_order({'id': 0}) logtask.conditions=['WHERE task_id=%s and status=1 and error=1 and server=""', [task_id]] arr_rows=logtask.select_to_array([], True) #response.set_header('Content-type', 'text/plain') conn.close() return filter_ajax(arr_rows) else: conn.close() return filter_ajax({'wait': 1}) """ else: arr_task = { 'task_id': task_id, 'progress': 100, 'message': 'Error: no exists task', 'error': 1, 'status': 1 } conn.close() return filter_ajax(arr_rows) else: redirect(make_url(config.admin_folder))
def getprogress(task_id): conn = WebModel.connection() s = get_session() if check_login(): getpost = GetPostFiles() getpost.obtain_post([], True) task = Task(conn) logtask = LogTask(conn) server = Server(conn) arr_task = task.select_a_row(task_id) try: servers = json.loads(getpost.post['servers']) except: servers = {} #for ip in servers: if len(servers) > 0: logtask.set_order({'id': 1}) logtask.set_conditions( 'WHERE task_id=%s and status=1 and error=1 and server=""', [task_id]) c_error = logtask.select_count() if c_error == 0: logtask.set_order({'id': 1}) checked_servers = logtask.check_in_list_str('server', servers) logtask.set_conditions( 'WHERE task_id=%s and status=1 and server IN ' + checked_servers + ' and server!=""', [task_id]) arr_log = logtask.select_to_array( ['status', 'error', 'server']) logtask.set_order({'id': 1}) logtask.set_conditions( 'WHERE task_id=%s and status=0 and server NOT IN ' + checked_servers + ' and server!=""', [task_id]) arr_log2 = logtask.select_to_array( ['status', 'error', 'server']) arr_log = arr_log2 + arr_log #response.set_header('Content-type', 'text/plain') #return json.dumps(arr_log) else: arr_log = [] for server in servers: arr_log.append({'status': 1, 'error': 1, 'server': server}) response.set_header('Content-type', 'text/plain') conn.close() return filter_ajax(arr_log) response.set_header('Content-type', 'text/plain') arr_log = [] conn.close() return filter_ajax(arr_log) else: conn.close() return filter_ajax({})
def home(): connection=WebModel.connection() #Fix, make local variable t=PTemplate(env) getpost=GetPostFiles() getpost.obtain_get() try: group_id=int(getpost.get.get('group_id', '0')) except: group_id=0 if request_type()=='POST': getpost.obtain_post() s=get_session() if 'login' in s: if s['privileges']==2: task=Task(connection) logtask=LogTask(connection) server=Server(connection) #Load menu menu=get_menu(config_admin.modules_admin) lang_selected=get_language(s) content_index='' # Send request to server arr_servers=[] where_sql='WHERE num_updates>0' for server_id in getpost.post.values(): try: server_id=int(server_id) if server_id>0: arr_servers.append(str(server_id)) except: pass if len(arr_servers)>0: where_sql='WHERE id IN (%s)' % ",".join(arr_servers) if group_id>0: where_sql+=' AND id IN (select server_id from servergroupitem where group_id='+str(group_id)+')' commands_to_execute=[['bin/upgrade.sh', '']] task.create_forms() if task.insert({'name_task': 'update_server','description_task': I18n.lang('pastafari', 'update_servers', 'Updating servers...'), 'url_return': '', 'commands_to_execute': commands_to_execute, 'server': '', 'where_sql_server': where_sql}): task_id=task.insert_id() try: r=requests.get(server_task+str(task_id)) arr_data=r.json() arr_data['task_id']=task_id logtask.create_forms() if not logtask.insert(arr_data): content_index="Error:Wrong format of json data..." #return t_admin.load_template('pastafari/ajax_progress.phtml', title='Adding monitoritation to the server...') #"Load template with ajax..." else: server.set_conditions(where_sql, []) num_servers=server.select_count() #content_index=t.load_template('pastafari/updates.phtml', task_id=task_id, title_task=I18n.lang('pastafari', 'servers_updating', 'Servers updating'), num_servers=num_servers) content_index=t.load_template('pastafari/updates.phtml', task_id=task_id, title_task=I18n.lang('pastafari', 'servers_updating', 'Servers updating'), description_task=I18n.lang('pastafari', 'servers_updating_txt', 'All servers selected will be updated...'), num_servers=num_servers) except: #logtask.conditions=['WHERE id=%s', [task_id]] task.update({'status': 1, 'error': 1}) content_index="Error:cannot connect to task server, check the url for it..."+traceback.format_exc() else: content_index="Error: cannot insert the task: "+task.show_errors() return t.load_template('admin/content.html', title='Updating servers', content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: redirect(make_url(config.admin_folder)) else: redirect(make_url(config.admin_folder))
def net_cpu_status(server_id): if check_login(): s = get_session() conn = WebModel.connection() server = servers.Server(conn) arr_server = server.select_a_row(server_id) if arr_server: if 'ip' in arr_server: ip = arr_server['ip'] now = datetime.obtain_timestamp(datetime.now(True)) hours12 = now - 21600 date_now = datetime.timestamp_to_datetime(now) date_hours12 = datetime.timestamp_to_datetime(hours12) status_cpu = servers.StatusCpu(conn) status_cpu.set_conditions( 'where ip=%s and date>=%s and date<=%s', [ip, date_hours12, date_now]) #arr_cpu=status_cpu.select_to_array(['idle', 'date']) cur = status_cpu.select(['idle', 'date']) x = 0 arr_cpu = [] cur.fetchone() for cpu_info in cur: arr_cpu.append(cpu_info['idle']) cur.close() status_mem = servers.StatusMemory(conn) status_mem.set_conditions( 'where ip=%s and date>=%s and date<=%s', [ip, date_hours12, date_now]) #status_mem.set_order(['id', 'ASC']) #arr_mem=status_mem.select_to_array(['used', 'free', 'date']) arr_mem = [] with status_mem.select(['used', 'free', 'cached', 'date']) as cur: #cur.fetchone() for mem_info in cur: mem_info['used'] = ( (mem_info['used'] / 1024) / 1024) / 1024 mem_info['free'] = ( (mem_info['free'] / 1024) / 1024) / 1024 mem_info['cached'] = ( (mem_info['cached'] / 1024) / 1024) / 1024 arr_mem.append(mem_info) if len(arr_mem) > 2: arr_mem.pop(0) #arr_cpu=status_cpu.select_to_array(['idle', 'date']) cur = status_cpu.select(['idle', 'date']) arr_net = {} status_net = servers.StatusNet(conn) status_net.set_conditions( 'where ip=%s and date>=%s and date<=%s', [ip, date_hours12, date_now]) arr_net = [] cur = status_net.select(['bytes_sent', 'bytes_recv', 'date']) substract_time = 0 #datetime.obtain_timestamp(datetime.now()) c_hours12 = now c_elements = 0 c_count = cur.rowcount if c_count > 0: data_net = cur.fetchone() first_recv = data_net['bytes_recv'] first_sent = data_net['bytes_sent'] if len(arr_cpu) < (c_count - 1): arr_cpu.append(arr_cpu[1:]) for data_net in cur: timestamp = datetime.obtain_timestamp( data_net['date'], True) diff_time = timestamp - substract_time if substract_time != 0 and diff_time > 300: count_time = timestamp while substract_time <= count_time: form_time = datetime.timestamp_to_datetime( substract_time) arr_net.append( {'date': datetime.format_time(form_time)}) substract_time += 60 bytes_sent = round( (data_net['bytes_sent'] - first_sent) / 1024) bytes_recv = round( (data_net['bytes_recv'] - first_recv) / 1024) cpu = arr_cpu[x] memory_used = arr_mem[x]['used'] memory_free = arr_mem[x]['free'] memory_cached = arr_mem[x]['cached'] arr_net.append({ 'bytes_sent': bytes_sent, 'bytes_recv': bytes_recv, 'date': datetime.format_time(data_net['date']), 'cpu': cpu, 'memory_used': memory_used, 'memory_free': memory_free, 'memory_cached': memory_cached }) first_sent = data_net['bytes_sent'] first_recv = data_net['bytes_recv'] c_hours12 = timestamp substract_time = int(timestamp) c_elements += 1 x += 1 # If the last time is more little that now make a loop while c_hours12 <= now: form_time = datetime.timestamp_to_datetime(c_hours12) seconds = form_time[-2:] #print(form_time) if seconds == '00': arr_net.append( {'date': datetime.format_time(form_time)}) # if secons is 00 and z=1 put value #arr_net.append({'date': datetime.format_time(form_time)}) pass c_hours12 += 1 cur.close() if c_elements > 2: return filter_ajax(arr_net) else: return filter_ajax({}) return filter_ajax({}) return filter_ajax({})