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(): 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 run_task(self, url, name_task, codename_task, description_task, files, commands_to_execute, delete_files, delete_directories, server, pre_func, post_func, error_func, extra_data): logtask=LogTask(self.connection) self.create_forms() logtask.create_forms() if self.insert({'name_task': name_task,'description_task': description_task, 'url_return': url, 'files': files, 'commands_to_execute': commands_to_execute, 'delete_files': delete_files, 'delete_directories': delete_directories, 'server': server, 'where_sql_server':'', 'pre_func': pre_func, 'post_func': post_func, 'error_func': error_func, 'extra_data': extra_data }): task_id=self.insert_id() #try: r=requests.get(server_task+str(task_id)) arr_data=r.json() arr_data['task_id']=task_id if not logtask.insert(arr_data): self.error=True self.txt_error="Error:Wrong format of json data..." else: redirect(make_url(pastafari_folder+'/showprogress/'+str(task_id)+'/'+server)) else: self.error=True self.txt_error="Cannot insert the task"
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 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 run_task(self, url, name_task, codename_task, description_task, files, commands_to_execute, delete_files, delete_directories, server, pre_func, post_func, error_func, extra_data): logtask = LogTask(self.connection) self.create_forms() logtask.create_forms() if self.insert({ 'name_task': name_task, 'description_task': description_task, 'url_return': url, 'files': files, 'commands_to_execute': commands_to_execute, 'delete_files': delete_files, 'delete_directories': delete_directories, 'server': server, 'where_sql_server': '', 'pre_func': pre_func, 'post_func': post_func, 'error_func': error_func, 'extra_data': extra_data }): task_id = self.insert_id() #try: r = requests.get(server_task + str(task_id)) arr_data = r.json() arr_data['task_id'] = task_id if not logtask.insert(arr_data): self.error = True self.txt_error = "Error:Wrong format of json data..." else: redirect( make_url(pastafari_folder + '/showprogress/' + str(task_id) + '/' + server)) else: self.error = True self.txt_error = "Cannot insert the task"
def index(lang): if lang in I18n.dict_i18n: s = get_session() s["lang"] = lang redirect_url = request.headers.get("Referer") if redirect_url != None: # if not re.match('.*\/change_lang\/.*', request.path): redirect(redirect_url) return ""
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 logout(): s=get_session() if 'login' in s.keys(): del s['login'] del s['privileges'] #s.save() s.delete() if request.get_cookie("remember_login", secret=key_encrypt): # delete cookie response.delete_cookie("remember_login", path="/") #return "" redirect(make_url(config.admin_folder))
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 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 form_task(connection, t, s, **args): task=Task(connection) arr_task=task.select_a_row(args['task_id']) if arr_task: task_execute=import_module(arr_task['path']) if config.reloader: reload(task_execute) task_first=task_execute.MakeTask(connection) if task_first.yes_form: return t.load_template('pastafari/maketask.phtml', form=task_first.form(t), task_id=args['task_id']) else: redirect(make_url('pastafari/executetask/'+str(task_id))) else: return 'Task no exists'
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 show(self): getpostfiles=GetPostFiles() getpostfiles.obtain_get() getpostfiles.get['op_admin']=getpostfiles.get.get('op_admin', '0') getpostfiles.get['id']=getpostfiles.get.get('id', '0') if len(self.model.forms)==0: self.model.create_forms() edit_forms=OrderedDict() for key_form in self.arr_fields_edit: edit_forms[key_form]=self.model.forms[key_form] if getpostfiles.get['op_admin']=='1': post=None title_edit=I18n.lang('common', 'add_new_item', 'Add new item') if getpostfiles.get['id']!='0': post=self.model.select_a_row(getpostfiles.get['id'], [], True) title_edit=I18n.lang('common', 'edit_new_item', 'Edit item') if post==None or post==False: if getpostfiles.get['id']=='0': post={} else: return "" form=show_form(post, edit_forms, self.t, False) return self.t.load_template(self.template_insert, admin=self, title_edit=title_edit, form=form, model=self.model, id=getpostfiles.get['id']) elif getpostfiles.get['op_admin']=='2': getpostfiles.obtain_post() #post=getpostfiles.post self.model.reset_conditions() insert_row=self.model.insert try: getpostfiles.get['id']=str(int(getpostfiles.get['id'])) except: getpostfiles.get['id']='0' title_edit=I18n.lang('common', 'add_new_item', 'Add new item') if getpostfiles.get['id']!='0': insert_row=self.model.update title_edit=I18n.lang('common', 'edit_new_item', 'Edit item') self.model.conditions=['WHERE `'+self.model.name+'`.`'+self.model.name_field_id+'`=%s', [getpostfiles.get['id']]] if insert_row(getpostfiles.post): set_flash_message(I18n.lang('common', 'task_successful', 'Task successful')) redirect(self.url) else: form=show_form(getpostfiles.post, edit_forms, self.t, True) return self.t.load_template(self.template_insert, admin=self, title_edit=title_edit, form=form, model=self.model, id=getpostfiles.get['id']) pass elif getpostfiles.get['op_admin']=='3': verified=getpostfiles.get.get('verified', '0') if verified=='1': if getpostfiles.get['id']!='0': self.model.conditions=['WHERE `'+self.model.name+'`.`'+self.model.name_field_id+'`=%s', [getpostfiles.get['id']]] self.model.delete() set_flash_message(I18n.lang('common', 'task_successful', 'Task successful')) redirect(self.url) else: return self.t.load_template(self.template_verify_delete, url=self.url, item_id=getpostfiles.get['id'], op_admin=3, verified=1) else: return self.t.load_template(self.template_admin, admin=self)
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 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 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 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 home(module='', submodule=''): # A simple boolean used for show or not the code of admin module in standard template connection=WebModel.connection() #Fix, make local variable t=PTemplate(env) t.add_filter(make_admin_url) t.show_basic_template=True if submodule!='': module+='/'+submodule #t.clean_header_cache() #check if login user_admin=UserAdmin(connection) s=get_session() if check_login(): s['id']=s.get('id', 0) lang_selected=get_language(s) user_admin.set_conditions('WHERE id=%s', [s['id']]) # Check if user id exists in session c=user_admin.select_count() if c>0: if s['privileges']==2: #pass if module in menu: #Load module try: #new_module=import_module(menu[module][1]) #t.inject_folder=path.dirname(new_module.__file__).replace('/admin', '') #t.env=t.env_theme(path.dirname(__file__)) t.env.directories.insert(1, path.dirname(module_imported[module].__file__).replace('/admin', '')+'/templates') #print(t.env.directories) #if config.reloader: #reload(new_module) except ImportError: print("Exception in user code:") print("-"*60) traceback.print_exc(file=sys.stdout) print("-"*60) return "No exists admin module" #args={'t': t, 'connection': connection} content_index=module_imported[module].admin(t=t, connection=connection) if t.show_basic_template==True: return t.load_template('admin/content.html', title=menu[module][0], content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: return content_index else: return t.load_template('admin/index.html', title=I18n.lang('admin', 'welcome_to_paramecio', 'Welcome to Paramecio Admin!!!'), menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: logout() else: user_admin.conditions=['WHERE privileges=%s', [2]] c=user_admin.select_count() if c>0: if request.get_cookie("remember_login", secret=key_encrypt): #check login token_login=request.get_cookie("remember_login", secret=key_encrypt) user_admin.conditions=['WHERE token_login=%s', [token_login]] arr_user=user_admin.select_a_row_where(['id', 'privileges']) if arr_user==False: # delete cookioe response.delete_cookie("remember_login") else: s=get_session() s['id']=arr_user['id'] s['login']=1 s['privileges']=arr_user['privileges'] s.save() redirect(make_url(config.admin_folder)) else: post={} user_admin.yes_repeat_password=False user_admin.fields['password'].required=True user_admin.create_forms(['username', 'password']) forms=show_form(post, user_admin.forms, t, yes_error=False) #connection.close() return t.load_template('admin/login.phtml', forms=forms, yes_recovery_login=yes_recovery_login) else: post={} set_extra_forms_user(user_admin) forms=show_form(post, user_admin.forms, t, yes_error=False) return t.load_template('admin/register.phtml', forms=forms)
def send_task(connection, t, s, **args): task=Task(connection) logtask=LogTask(connection) arr_task=task.select_a_row(args['task_id']) getpost=GetPostFiles() getpost.obtain_post() if arr_task: task_execute=import_module(arr_task['path']) if config.reloader: reload(task_execute) task_first=task_execute.MakeTask(connection) yes_redirect=False if task_first.yes_form: if task_first.update_task(getpost.post, arr_task['id']): yes_redirect=True else: return t.load_template('pastafari/maketask.phtml', form=task_first.form(t, yes_error=True, pass_values=True, **getpost.post), task_id=args['task_id']) else: yes_redirect=True if yes_redirect: #try: r=requests.get(server_task+str(arr_task['id'])) arr_data=r.json() arr_data['task_id']=arr_task['id'] logtask.create_forms() if not logtask.insert(arr_data): return "Error:Wrong format of json data..." else: # Redirect to show multiples tasks. redirect(make_url('pastafari/showmultiprogress/'+str(arr_task['id']))) #return make_url('pastafari/showmultiprogress/'+str(arr_task['id'])) #content_index=t.load_template('pastafari/updates.phtml', task_id=task_id, title_task=name_task, description_task=description_task, num_servers=num_servers) """ except: task_first.task.update({'status': 1, 'error': 1}) return "Error:cannot connect to task server, check the url for it..."+traceback.format_exc() """ else: return 'Task no exists'
def admin(**args): t=args['t'] conn=args['connection'] server=servers.Server(conn) os_model=servers.OsServer(conn) task=tasks.Task(conn) logtask=tasks.LogTask(conn) group_server=servers.ServerGroup(conn) group_server_item=servers.ServerGroupItem(conn) getpostfiles=GetPostFiles() getpostfiles.obtain_get() getpostfiles.get['op']=getpostfiles.get.get('op', '') getpostfiles.get['group_id']=getpostfiles.get.get('group_id', '0') request_type=formsutils.request_type() server.fields['os_codename'].name_form=SelectForm server.create_forms(['hostname', 'ip', 'os_codename']) arr_os={} with os_model.select() as cur: arr_os = { v['codename'] : v['name'] for v in cur } server.fields['date'].label=I18n.lang('pastafari', 'server_status', 'Server status') server.forms['os_codename'].arr_select=arr_os server.forms['password']=PasswordForm('password', '') server.forms['password'].required=True server.forms['password'].label=I18n.lang('pastafari', 'password', 'Password') server.forms['delete_root_password']=SelectForm('delete_root_password', '1', {'0': 'No', '1': 'Yes'}) server.forms['delete_root_password'].label=I18n.lang('pastafari', 'delete_root_password', 'Disable root password') server.forms['clean_gcc']=SelectForm('clean_gcc', '1', {'0': 'No', '1': 'Yes'}) server.forms['clean_gcc'].label=I18n.lang('pastafari', 'clean_gcc', 'Clean build dependencies for soft monitoring install?,if you want gcc in your server, answer NO') server.forms['group_id']=SelectModelForm('group_id', getpostfiles.get['group_id'], group_server, 'name', 'id', 'parent_id') server.forms['group_id'].field=group_server_item.fields['server_id'] server.forms['group_id'].required=True server.forms['group_id'].label=label=I18n.lang('pastafari', 'principal_group', 'Principal group') if getpostfiles.get['op']=='1': if request_type!="POST": forms=formsutils.show_form({}, server.forms, t, False, False) return t.load_template('pastafari/admin/add_servers.phtml', group_id=getpostfiles.get['group_id'], form_server=forms, url=url+'?op=1&group_id='+getpostfiles.get['group_id']) else: #if insert then send task to servertask getpostfiles.obtain_post() post={} post['password']=getpostfiles.post.get('password', '') post['delete_root_password']=getpostfiles.post.get('delete_root_password', '0') post['ip']=getpostfiles.post.get('ip', '') post['clean_gcc']=getpostfiles.post.get('clean_gcc', '1') try: post['group_id']=getpostfiles.post.get('group_id', '0') except: post['group_id']='0' check_form=formsutils.CheckForm() (post, pass_form)=check_form.check(post, {'password': server.forms['password'], 'delete_root_password': server.forms['delete_root_password'], 'ip': server.forms['ip'], 'group_id': server.forms['group_id']}) server.set_conditions('WHERE ip=%s', [post['ip']]) c_ip=server.select_count() if c_ip==0: if check_form.error==0: #try connect to the server task_ssh=Task(post['ip']) testing_task=copy.copy(config_task) testing_task.remote_user='******' testing_task.remote_password=post['password'] task_ssh.config=testing_task if task_ssh.prepare_connection(): task_ssh.ssh.close() if not server.insert(getpostfiles.post): forms=formsutils.show_form(getpostfiles.post, server.forms, t, True) return t.load_template('pastafari/admin/add_servers.phtml', group_id=getpostfiles.get['group_id'], form_server=forms, url=url+'?op=1') else: server_id=server.insert_id() # Insert in server group group_server_item.valid_fields=['group_id', 'server_id'] if group_server_item.insert({'group_id': post['group_id'], 'server_id': server_id}): task.create_forms() os_server=getpostfiles.post['os_codename'].replace('/', '').replace('.', '') ip=server.fields['ip'].check(getpostfiles.post['ip']) files=[] files.append(['modules/pastafari/scripts/standard/'+os_server+'/install_python.sh', 0o750]) files.append(['modules/pastafari/scripts/standard/'+os_server+'/install_curl.sh', 0o750]) files.append(['modules/pastafari/scripts/standard/'+os_server+'/install_psutil.sh', 0o750]) files.append(['modules/pastafari/scripts/standard/'+os_server+'/upgrade.sh', 0o750]) files.append(['modules/pastafari/scripts/standard/'+os_server+'/clean_gcc.sh', 0o750]) files.append(['modules/pastafari/scripts/monit/'+os_server+'/alive.py', 0o750]) #files.append(['monit/'+os_server+'/files/alive.sh', 0o750]; files.append(['modules/pastafari/scripts/monit/'+os_server+'/files/get_info.py', 0o750]) files.append(['modules/pastafari/scripts/monit/'+os_server+'/files/get_updates.py', 0o750]) files.append(['modules/pastafari/scripts/monit/'+os_server+'/files/crontab/alive', 0o640]) files.append(['modules/pastafari/scripts/monit/'+os_server+'/files/sudoers.d/spanel', 0o640]) files.append([config_task.public_key, 0o600]) commands_to_execute=[] commands_to_execute.append(['modules/pastafari/scripts/standard/'+os_server+'/install_curl.sh', '']) commands_to_execute.append(['modules/pastafari/scripts/standard/'+os_server+'/install_python.sh', '']) commands_to_execute.append(['modules/pastafari/scripts/standard/'+os_server+'/install_psutil.sh', '']) commands_to_execute.append(['modules/pastafari/scripts/monit/'+os_server+'/alive.py', '--url='+config_task.url_monit+'/'+ip+'/'+config_task.api_key+' --user='******' --pub_key='+config_task.public_key]) delete_files=[] delete_files.append('modules/pastafari/scripts/standard/'+os_server+'/install_python.sh') delete_files.append('modules/pastafari/scripts/standard/'+os_server+'/install_curl.sh') delete_files.append('modules/pastafari/scripts/standard/'+os_server+'/install_psutil.sh') delete_files.append(config_task.public_key) delete_directories=['modules/pastafari'] delete_directories=[os.path.dirname(config_task.public_key)] if post['delete_root_password']=='1': #delete_root_passwd.sh files.append(['modules/pastafari/scripts/standard/'+os_server+'/delete_root_passwd.sh', 0o750]) commands_to_execute.append(['modules/pastafari/scripts/standard/'+os_server+'/delete_root_passwd.sh', '']) if post['clean_gcc']=='1': #delete_root_passwd.sh files.append(['modules/pastafari/scripts/standard/'+os_server+'/clean_gcc.sh', 0o750]) commands_to_execute.append(['modules/pastafari/scripts/standard/'+os_server+'/clean_gcc.sh', '']) #'modules.pastafari.tasks.system.install.task_functions' if task.insert({'name_task': 'monit_server','description_task': I18n.lang('pastafari', 'add_monit', 'Adding monitoritation to the server...'), 'url_return': url, 'files': files, 'commands_to_execute': commands_to_execute, 'delete_files': delete_files, 'delete_directories': delete_directories, 'server': ip, 'user': '******', 'password': post['password'], 'path': '/root', 'error_func': '', 'extra_data': {'server_id': server_id}}): 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): return "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..." except: logtask.conditions=['WHERE id=%s', [task_id]] task.update({'status': 1, 'error': 1}) server.conditions=['WHERE id=%s', [server_id]] group_server_item.conditions=['WHERE server_id=%s', [server_id]] group_server_item.delete() server.delete() return "Error:cannot connect to task server, check the url for it..." #return t.load_template('pastafari/progress.phtml', name_task=I18n.lang('pastafari', 'add_monit', 'Adding monitoritation to the server...'), description_task=I18n.lang('pastafari', 'add_monit_explain', 'Installing the basic scripts for send info from server to monit module'), task_id=task_id, server=ip, position=0) #return "Server is building..." #redirect('servers?op=2&task_id='+str(task_id)) #@get('/'+pastafari_folder+'/showprogress/<task_id:int>/<server>') redirect(make_url(pastafari_folder+'/showprogress/'+str(task_id)+'/'+ip)) else: server.conditions=['WHERE id=%s', [server_id]] server.delete() group_server_item.conditions=['WHERE server_id=%s', [server_id]] group_server_item.delete() return "Error: cannot create the new task" else: server.conditions=['WHERE id=%s', [server_id]] server.delete() return "Error: you need a initial group for your server" else: task_ssh.ssh.close() return "Cannot connect to the new server "+task_ssh.txt_error else: forms=formsutils.show_form(getpostfiles.post, server.forms, t, True) return t.load_template('pastafari/admin/add_servers.phtml', group_id=getpostfiles.get['group_id'], form_server=forms, url=url+'?op=1&group_id='+getpostfiles.get['group_id']) else: server.fields['ip'].duplicated_ip=True forms=formsutils.show_form(getpostfiles.post, server.forms, t, True) return t.load_template('pastafari/admin/add_servers.phtml', group_id=getpostfiles.get['group_id'], form_server=forms, url=url+'?op=1&group_id='+getpostfiles.get['group_id']) #elif getpostfiles.get['op']=='2': #return "" elif getpostfiles.get['op']=='2': getpostfiles=GetPostFiles() getpostfiles.obtain_get() server_id=int(getpostfiles.get.get('id', '0')) arr_server=server.select_a_row(server_id) if arr_server: return t.load_template('pastafari/admin/graphs.phtml', server=arr_server, api_key=config_task.api_key) else: return "" elif getpostfiles.get['op']=='5': getpostfiles.get['id']=getpostfiles.get.get('id', '0') getpostfiles.get['delete']=getpostfiles.get.get('delete', '0') try: getpostfiles.get['id']=int(getpostfiles.get['id']) except: getpostfiles.get['id']=0 if getpostfiles.get['delete']!='0': group_server_item.set_conditions('WHERE server_id=%s', [ getpostfiles.get['id']]) group_server_item.delete() server.set_conditions('WHERE id=%s', [ getpostfiles.get['id']]) server.delete() set_flash_message('Deleted the server sucessfully') redirect(make_url(pastafari_folder+'/servers')) pass else: return "It deleted the server in database <strong>only</strong><p>You need delete the server with the tool of your election: <input type=\"button\" value=\"Do you are sure?\" onclick=\"javascript:location.href='"+make_url(pastafari_folder+'/servers', {'op': '5', 'id': str(getpostfiles.get['id']), 'delete': '1'})+"';\"></p>" pass else: getpost=GetPostFiles() getpost.obtain_get() try: group_id=int(getpost.get.get('group_id', '0')) except: group_id=0 select_form_group=SelectModelForm('group_id', group_id, servers.ServerGroup(conn), 'name', 'id', 'parent_id') select_form_group.name_field_id='change_group_id_form' servers_list=SimpleList(server, url, t) yes_form=0 type_op='' #servers_list.arr_extra_fields=[I18n.lang('common', 'options', 'Options')] servers_list.arr_extra_options=[server_options] servers_list.yes_search=False select_task=None if 'type' in getpost.get: if getpost.get['type']=='down': actual_timestamp=datetime.obtain_timestamp(datetime.now()) past_timestamp=actual_timestamp-300 actual_time=datetime.timestamp_to_datetime(actual_timestamp) past_time=datetime.timestamp_to_datetime(past_timestamp) servers_list.model.set_conditions('WHERE date<%s', [past_time]) elif getpost.get['type']=='heavy': servers_list.model.set_conditions("where actual_idle>%s", [80]) elif getpost.get['type']=='disks': servers_list.model.set_conditions("where ip IN (select ip from statusdisk where percent>90)", []) elif getpost.get['type']=='update_servers': servers_list.model.set_conditions("where num_updates>0", []) servers_list.arr_extra_fields=[I18n.lang('common', 'update_server', 'Update server')] servers_list.arr_extra_options=[server_update_options] servers_list.yes_search=False yes_form=1 elif getpost.get['type']=='task_servers': servers_list.arr_extra_fields=[I18n.lang('pastafari', 'choose_server', 'Choose server')] servers_list.arr_extra_options=[server_update_options] servers_list.yes_search=False yes_form=2 # Get tasks and put in select_task # Folders are tasks/ and modules/pastafari/tasks base_path='modules/pastafari/tasks' config_parser = configparser.ConfigParser() select_task=scandir(base_path, config_parser, OrderedDict(), 'tasks') #OrderedDict([('tasks', {'servers': [['Servers', 'tasks', 0]]}), ('servers', {'databases': [['Database servers', 'servers', 0]], 'mail': [['Mail', 'servers', 0], ['Standalone postfix server, Install on your servers a simple and secure postfix mail server', 'mail', 'modules/pastafari/tasks/servers/mail/postfix/standalone_postfix.py', 1]]})]) type_op=getpost.get['type'] if group_id>0: servers_list.model.conditions[0]+=' AND id IN (select server_id from servergroupitem where group_id=%s)' servers_list.model.conditions[1].append(group_id) servers_list.fields_showed=['hostname', 'ip', 'num_updates', 'date'] servers_list.limit_pages=100 servers_list.s['order']='0' servers_list.s['order_field']='hostname' show_servers=servers_list.show() return t.load_template('pastafari/admin/servers.phtml', show_servers=show_servers, type_op=type_op, yes_form=yes_form, csrf_token=csrf_token(), select_form_group=select_form_group, group_id=group_id, select_task=select_task) return ""
def admin_task(connection, t, s, **args): task=Task(connection) getpost=GetPostFiles() getpost.obtain_get() if request_type()=='POST': getpost.obtain_post() #Load task worker task_first, task_path=checktask(getpost.post, connection) if task_first is not None: post={'name_task': task_first.name_task, 'description_task': task_first.description_task, 'codename_task': task_first.codename_task, 'files': task_first.files, 'commands_to_execute': task_first.commands_to_execute, 'delete_files': task_first.delete_files, 'delete_directories': task_first.delete_directories, 'url_return': task_first.url_return, 'one_time': task_first.one_time, 'version': task_first.one_time} #post_task={'task': getpost.post['task']} where_sql_server='WHERE 1=1' post_task=[] try: group_id=int(getpost.get.get('group_id', '0')) except: group_id=0 if group_id>0: where_sql_server+=' AND id IN (select server_id from servergroupitem where group_id='+str(group_id)+')' pattern=re.compile('^server_.*$') for k, server_id in getpost.post.items(): if pattern.match(k): try: server_id=int(server_id) if server_id>0: post_task.append(str(server_id)) except: pass #Create where if len(post_task)>0: where_sql_server+=' AND id IN ('+','.join(post_task)+')' post['where_sql_server']=where_sql_server #Create pàth post['path']=task_path #Insert task task.create_forms() if task.insert(post): task_id=task.insert_id() if task_first.yes_form: redirect(make_url('pastafari/formtask/'+str(task_id))) else: redirect(make_url('pastafari/executetask/'+str(task_id))) else: print(task.show_errors()) return "Error: cannot insert the task"
def admin(**args): t = args['t'] conn = args['connection'] server = servers.Server(conn) os_model = servers.OsServer(conn) task = tasks.Task(conn) logtask = tasks.LogTask(conn) group_server = servers.ServerGroup(conn) group_server_item = servers.ServerGroupItem(conn) getpostfiles = GetPostFiles() getpostfiles.obtain_get() getpostfiles.get['op'] = getpostfiles.get.get('op', '') getpostfiles.get['group_id'] = getpostfiles.get.get('group_id', '0') request_type = formsutils.request_type() server.fields['os_codename'].name_form = SelectForm server.create_forms(['hostname', 'ip', 'os_codename']) arr_os = {} with os_model.select() as cur: arr_os = {v['codename']: v['name'] for v in cur} server.fields['date'].label = I18n.lang('pastafari', 'server_status', 'Server status') server.forms['os_codename'].arr_select = arr_os server.forms['password'] = PasswordForm('password', '') server.forms['password'].required = True server.forms['password'].label = I18n.lang('pastafari', 'password', 'Password') server.forms['delete_root_password'] = SelectForm('delete_root_password', '1', { '0': 'No', '1': 'Yes' }) server.forms['delete_root_password'].label = I18n.lang( 'pastafari', 'delete_root_password', 'Disable root password') server.forms['clean_gcc'] = SelectForm('clean_gcc', '1', { '0': 'No', '1': 'Yes' }) server.forms['clean_gcc'].label = I18n.lang( 'pastafari', 'clean_gcc', 'Clean build dependencies for soft monitoring install?,if you want gcc in your server, answer NO' ) server.forms['group_id'] = SelectModelForm('group_id', getpostfiles.get['group_id'], group_server, 'name', 'id', 'parent_id') server.forms['group_id'].field = group_server_item.fields['server_id'] server.forms['group_id'].required = True server.forms['group_id'].label = label = I18n.lang('pastafari', 'principal_group', 'Principal group') if getpostfiles.get['op'] == '1': if request_type != "POST": forms = formsutils.show_form({}, server.forms, t, False, False) return t.load_template('pastafari/admin/add_servers.phtml', group_id=getpostfiles.get['group_id'], form_server=forms, url=url + '?op=1&group_id=' + getpostfiles.get['group_id']) else: #if insert then send task to servertask getpostfiles.obtain_post() post = {} post['password'] = getpostfiles.post.get('password', '') post['delete_root_password'] = getpostfiles.post.get( 'delete_root_password', '0') post['ip'] = getpostfiles.post.get('ip', '') post['clean_gcc'] = getpostfiles.post.get('clean_gcc', '1') try: post['group_id'] = getpostfiles.post.get('group_id', '0') except: post['group_id'] = '0' check_form = formsutils.CheckForm() (post, pass_form) = check_form.check( post, { 'password': server.forms['password'], 'delete_root_password': server.forms['delete_root_password'], 'ip': server.forms['ip'], 'group_id': server.forms['group_id'] }) server.set_conditions('WHERE ip=%s', [post['ip']]) c_ip = server.select_count() if c_ip == 0: if check_form.error == 0: #try connect to the server task_ssh = Task(post['ip']) testing_task = copy.copy(config_task) testing_task.remote_user = '******' testing_task.remote_password = post['password'] task_ssh.config = testing_task if task_ssh.prepare_connection(): task_ssh.ssh.close() if not server.insert(getpostfiles.post): forms = formsutils.show_form( getpostfiles.post, server.forms, t, True) return t.load_template( 'pastafari/admin/add_servers.phtml', group_id=getpostfiles.get['group_id'], form_server=forms, url=url + '?op=1') else: server_id = server.insert_id() # Insert in server group group_server_item.valid_fields = [ 'group_id', 'server_id' ] if group_server_item.insert({ 'group_id': post['group_id'], 'server_id': server_id }): task.create_forms() os_server = getpostfiles.post[ 'os_codename'].replace('/', '').replace( '.', '') ip = server.fields['ip'].check( getpostfiles.post['ip']) files = [] files.append([ 'modules/pastafari/scripts/standard/' + os_server + '/install_python.sh', 0o750 ]) files.append([ 'modules/pastafari/scripts/standard/' + os_server + '/install_curl.sh', 0o750 ]) files.append([ 'modules/pastafari/scripts/standard/' + os_server + '/install_psutil.sh', 0o750 ]) files.append([ 'modules/pastafari/scripts/standard/' + os_server + '/upgrade.sh', 0o750 ]) files.append([ 'modules/pastafari/scripts/standard/' + os_server + '/clean_gcc.sh', 0o750 ]) files.append([ 'modules/pastafari/scripts/monit/' + os_server + '/alive.py', 0o750 ]) #files.append(['monit/'+os_server+'/files/alive.sh', 0o750]; files.append([ 'modules/pastafari/scripts/monit/' + os_server + '/files/get_info.py', 0o750 ]) files.append([ 'modules/pastafari/scripts/monit/' + os_server + '/files/get_updates.py', 0o750 ]) files.append([ 'modules/pastafari/scripts/monit/' + os_server + '/files/crontab/alive', 0o640 ]) files.append([ 'modules/pastafari/scripts/monit/' + os_server + '/files/sudoers.d/spanel', 0o640 ]) files.append([config_task.public_key, 0o600]) commands_to_execute = [] commands_to_execute.append([ 'modules/pastafari/scripts/standard/' + os_server + '/install_curl.sh', '' ]) commands_to_execute.append([ 'modules/pastafari/scripts/standard/' + os_server + '/install_python.sh', '' ]) commands_to_execute.append([ 'modules/pastafari/scripts/standard/' + os_server + '/install_psutil.sh', '' ]) commands_to_execute.append([ 'modules/pastafari/scripts/monit/' + os_server + '/alive.py', '--url=' + config_task.url_monit + '/' + ip + '/' + config_task.api_key + ' --user='******' --pub_key=' + config_task.public_key ]) delete_files = [] delete_files.append( 'modules/pastafari/scripts/standard/' + os_server + '/install_python.sh') delete_files.append( 'modules/pastafari/scripts/standard/' + os_server + '/install_curl.sh') delete_files.append( 'modules/pastafari/scripts/standard/' + os_server + '/install_psutil.sh') delete_files.append(config_task.public_key) delete_directories = ['modules/pastafari'] delete_directories = [ os.path.dirname(config_task.public_key) ] if post['delete_root_password'] == '1': #delete_root_passwd.sh files.append([ 'modules/pastafari/scripts/standard/' + os_server + '/delete_root_passwd.sh', 0o750 ]) commands_to_execute.append([ 'modules/pastafari/scripts/standard/' + os_server + '/delete_root_passwd.sh', '' ]) if post['clean_gcc'] == '1': #delete_root_passwd.sh files.append([ 'modules/pastafari/scripts/standard/' + os_server + '/clean_gcc.sh', 0o750 ]) commands_to_execute.append([ 'modules/pastafari/scripts/standard/' + os_server + '/clean_gcc.sh', '' ]) #'modules.pastafari.tasks.system.install.task_functions' if task.insert({ 'name_task': 'monit_server', 'description_task': I18n.lang( 'pastafari', 'add_monit', 'Adding monitoritation to the server...' ), 'url_return': url, 'files': files, 'commands_to_execute': commands_to_execute, 'delete_files': delete_files, 'delete_directories': delete_directories, 'server': ip, 'user': '******', 'password': post['password'], 'path': '/root', 'error_func': '', 'extra_data': { 'server_id': server_id } }): 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): return "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..." except: logtask.conditions = [ 'WHERE id=%s', [task_id] ] task.update({'status': 1, 'error': 1}) server.conditions = [ 'WHERE id=%s', [server_id] ] group_server_item.conditions = [ 'WHERE server_id=%s', [server_id] ] group_server_item.delete() server.delete() return "Error:cannot connect to task server, check the url for it..." #return t.load_template('pastafari/progress.phtml', name_task=I18n.lang('pastafari', 'add_monit', 'Adding monitoritation to the server...'), description_task=I18n.lang('pastafari', 'add_monit_explain', 'Installing the basic scripts for send info from server to monit module'), task_id=task_id, server=ip, position=0) #return "Server is building..." #redirect('servers?op=2&task_id='+str(task_id)) #@get('/'+pastafari_folder+'/showprogress/<task_id:int>/<server>') redirect( make_url(pastafari_folder + '/showprogress/' + str(task_id) + '/' + ip)) else: server.conditions = [ 'WHERE id=%s', [server_id] ] server.delete() group_server_item.conditions = [ 'WHERE server_id=%s', [server_id] ] group_server_item.delete() return "Error: cannot create the new task" else: server.conditions = [ 'WHERE id=%s', [server_id] ] server.delete() return "Error: you need a initial group for your server" else: task_ssh.ssh.close() return "Cannot connect to the new server " + task_ssh.txt_error else: forms = formsutils.show_form(getpostfiles.post, server.forms, t, True) return t.load_template( 'pastafari/admin/add_servers.phtml', group_id=getpostfiles.get['group_id'], form_server=forms, url=url + '?op=1&group_id=' + getpostfiles.get['group_id']) else: server.fields['ip'].duplicated_ip = True forms = formsutils.show_form(getpostfiles.post, server.forms, t, True) return t.load_template('pastafari/admin/add_servers.phtml', group_id=getpostfiles.get['group_id'], form_server=forms, url=url + '?op=1&group_id=' + getpostfiles.get['group_id']) #elif getpostfiles.get['op']=='2': #return "" elif getpostfiles.get['op'] == '2': getpostfiles = GetPostFiles() getpostfiles.obtain_get() server_id = int(getpostfiles.get.get('id', '0')) arr_server = server.select_a_row(server_id) if arr_server: return t.load_template('pastafari/admin/graphs.phtml', server=arr_server, api_key=config_task.api_key) else: return "" elif getpostfiles.get['op'] == '5': getpostfiles.get['id'] = getpostfiles.get.get('id', '0') getpostfiles.get['delete'] = getpostfiles.get.get('delete', '0') try: getpostfiles.get['id'] = int(getpostfiles.get['id']) except: getpostfiles.get['id'] = 0 if getpostfiles.get['delete'] != '0': group_server_item.set_conditions('WHERE server_id=%s', [getpostfiles.get['id']]) group_server_item.delete() server.set_conditions('WHERE id=%s', [getpostfiles.get['id']]) server.delete() set_flash_message('Deleted the server sucessfully') redirect(make_url(pastafari_folder + '/servers')) pass else: return "It deleted the server in database <strong>only</strong><p>You need delete the server with the tool of your election: <input type=\"button\" value=\"Do you are sure?\" onclick=\"javascript:location.href='" + make_url( pastafari_folder + '/servers', { 'op': '5', 'id': str(getpostfiles.get['id']), 'delete': '1' }) + "';\"></p>" pass else: getpost = GetPostFiles() getpost.obtain_get() try: group_id = int(getpost.get.get('group_id', '0')) except: group_id = 0 select_form_group = SelectModelForm('group_id', group_id, servers.ServerGroup(conn), 'name', 'id', 'parent_id') select_form_group.name_field_id = 'change_group_id_form' servers_list = SimpleList(server, url, t) yes_form = 0 type_op = '' #servers_list.arr_extra_fields=[I18n.lang('common', 'options', 'Options')] servers_list.arr_extra_options = [server_options] servers_list.yes_search = False select_task = None if 'type' in getpost.get: if getpost.get['type'] == 'down': actual_timestamp = datetime.obtain_timestamp(datetime.now()) past_timestamp = actual_timestamp - 300 actual_time = datetime.timestamp_to_datetime(actual_timestamp) past_time = datetime.timestamp_to_datetime(past_timestamp) servers_list.model.set_conditions('WHERE date<%s', [past_time]) elif getpost.get['type'] == 'heavy': servers_list.model.set_conditions("where actual_idle>%s", [80]) elif getpost.get['type'] == 'disks': servers_list.model.set_conditions( "where ip IN (select ip from statusdisk where percent>90)", []) elif getpost.get['type'] == 'update_servers': servers_list.model.set_conditions("where num_updates>0", []) servers_list.arr_extra_fields = [ I18n.lang('common', 'update_server', 'Update server') ] servers_list.arr_extra_options = [server_update_options] servers_list.yes_search = False yes_form = 1 elif getpost.get['type'] == 'task_servers': servers_list.arr_extra_fields = [ I18n.lang('pastafari', 'choose_server', 'Choose server') ] servers_list.arr_extra_options = [server_update_options] servers_list.yes_search = False yes_form = 2 # Get tasks and put in select_task # Folders are tasks/ and modules/pastafari/tasks base_path = 'modules/pastafari/tasks' config_parser = configparser.ConfigParser() select_task = scandir(base_path, config_parser, OrderedDict(), 'tasks') #OrderedDict([('tasks', {'servers': [['Servers', 'tasks', 0]]}), ('servers', {'databases': [['Database servers', 'servers', 0]], 'mail': [['Mail', 'servers', 0], ['Standalone postfix server, Install on your servers a simple and secure postfix mail server', 'mail', 'modules/pastafari/tasks/servers/mail/postfix/standalone_postfix.py', 1]]})]) type_op = getpost.get['type'] if group_id > 0: servers_list.model.conditions[ 0] += ' AND id IN (select server_id from servergroupitem where group_id=%s)' servers_list.model.conditions[1].append(group_id) servers_list.fields_showed = ['hostname', 'ip', 'num_updates', 'date'] servers_list.limit_pages = 100 servers_list.s['order'] = '0' servers_list.s['order_field'] = 'hostname' show_servers = servers_list.show() return t.load_template('pastafari/admin/servers.phtml', show_servers=show_servers, type_op=type_op, yes_form=yes_form, csrf_token=csrf_token(), select_form_group=select_form_group, group_id=group_id, select_task=select_task) 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 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))