Ejemplo n.º 1
0
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 ""
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
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))
Ejemplo n.º 5
0
    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()
Ejemplo n.º 6
0
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))
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
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({})
Ejemplo n.º 9
0
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")
Ejemplo n.º 10
0
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({})
Ejemplo n.º 11
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()
Ejemplo n.º 12
0
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))
Ejemplo n.º 13
0
 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
Ejemplo n.º 14
0
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}
Ejemplo n.º 15
0
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 ""
Ejemplo n.º 16
0
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 ""
Ejemplo n.º 17
0
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']}
Ejemplo n.º 18
0
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({})
Ejemplo n.º 19
0
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({})
Ejemplo n.º 20
0
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}
Ejemplo n.º 21
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()
Ejemplo n.º 22
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))
Ejemplo n.º 23
0
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
Ejemplo n.º 24
0
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)
Ejemplo n.º 25
0
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))
Ejemplo n.º 26
0
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"
    
    """
Ejemplo n.º 27
0
 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()
Ejemplo n.º 28
0
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))
Ejemplo n.º 29
0
 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
Ejemplo n.º 30
0
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))
Ejemplo n.º 31
0
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))
Ejemplo n.º 32
0
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))
Ejemplo n.º 33
0
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))
Ejemplo n.º 34
0
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()

Ejemplo n.º 35
0
    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
Ejemplo n.º 36
0
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))
Ejemplo n.º 37
0
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
Ejemplo n.º 38
0
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({})
Ejemplo n.º 39
0
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))
Ejemplo n.º 40
0
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))
Ejemplo n.º 41
0
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"
Ejemplo n.º 42
0
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)
Ejemplo n.º 43
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))
Ejemplo n.º 44
0
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 ""
Ejemplo n.º 45
0
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))
Ejemplo n.º 46
0
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({})
Ejemplo n.º 47
0
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))
Ejemplo n.º 48
0
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({})