Beispiel #1
0
 def init_servers(self):
     s = self._get_assets_servers()
     _ = lambda x: x.decode("utf8")
     for _server in s.servers:
         try:
             server = Server(hostname=_(_server['hostname']), sn=_(_server['sn']))
             server.save()
         except IntegrityError:
             print "hostname:%s duplicated" % _server['hostname']
             continue
Beispiel #2
0
def do_verify(request):
    #
    # getting if the uuid is assigned to a server.. if not create it
    #
    s = Server.objects(uuid=request.POST['server']).first()
    if s is None:
        s = Server(host=request.POST['host'], uuid=request.POST['server'])
        s.save()
        
    return s
Beispiel #3
0
def add(account):
    if request.method == 'POST':
        form = ServerForm(request.form)
        if form.validate():
            server = Server()
            form.populate_obj(server)
            server.put()
            flash(u'Server added!')
            return redirect(url_for('server.show',
                                     server_key=server.key.urlsafe()))
    else:
        form = ServerForm()

    return render_template('server/form.html', form=form, account=account)
Beispiel #4
0
    def post(self, request):
        ret = {'status': 0, 'errmsg': 'ok'}
        data = QueryDict(request.body)
        data = dict(data.items())
        try:
            server = Server(**data)
            server.save()
        except Exception as e:
            msg = "user {} add server error:{}".format(request.user.username,
                                                       e.args)
            logger.error(msg)
            ret['status'] = 1
            ret['errmsg'] = msg

        return JsonResponse(ret, safe=True)
Beispiel #5
0
    def handle(self, **kwargs):
        groups = ServerGroup.objects().order_by('name')

        i = 1
        for g in groups:
            print '%i) %s' % (i, g.name)
            i += 1
        
        print 'q) Quit'

        num = self._get_string('Enter number to edit')
        
        g = groups[int(num)-1]

        print
        print "Editing %s now..." % g
        print 
        
        servers = []

        i = 1
        for s in Server.objects().order_by('name'):
            if s.id in g.servers:
                print '%i) %s' % (i, s.host)
                i += 1l;s
                servers.append(s)
            
        num = self._get_string('Enter number to to delete from the group')
        
        g.servers.remove(servers[int(num)-1].id)
        g.save()
Beispiel #6
0
class SyncAssetsDaemon(SyncBaseDeamon):
    def __init__(self, interval=5):
        super(SyncAssetsDaemon, self).__init__(interval)
        if settings['DEBUG']:
            self.lock_path = ASSEST_LOCK_TEST_PATH
        else:
            self.lock_path = ASSEST_LOCK_PATH
        self.logger = logging.getLogger("assets_syncing_deamon")

    def sync(self, test=False):
        while not self.exit_flag.isSet():
            sig = self.channel.get()
            if sig == "exit":
                self.logger.info("receive exit signal from channel")
                break
            self.logger.info("sync start")
            self._sync(test)
            self.logger.info("sync finished")
            gevent.sleep(1)

    def _sync(self, test=False):
        old_server = self._get_db_servers()
        if not old_server.servers:
            self.init_servers()
        else:
            new_server = self._get_assets_servers()
            if not new_server:
                return
            for k in old_server.subkeys(new_server):
                server = Server.query.filter_by(sn=k).options(joinedload(Server.nodes)).first()
                if server.nodes:
                    for node in server.nodes:
                        if not test:
                            node.delete()
                        self.logger.info("delete server node %s" % node.id)
                try:
                    if not test:
                        server.delete()
                except Exception, e:
                    self.logger.error(e)
                self.logger.info("delete server %s sn %s" % (server.hostname, server.sn))
            for k in old_server.changedkeys(new_server):
                server = Server.query.filter_by(sn=k).first()
                new_name = new_server.servers[k]
                old_name = server.hostname
                server.hostname = new_name
                if not test:
                    try:
                        server.save()
                    except Exception, e:
                        self.logger.error(e)
                self.logger.info("chaneg server %s to %s" % (old_name, new_name))
            for k in new_server.subkeys(old_server):
                server = Server(hostname=new_server.servers[k], sn=k)
                if not test:
                    try:
                        server.save()
                    except Exception, e:
                        self.logger.error(e)
                self.logger.info("add server %s sn %s" % (server.hostname, server.sn))
Beispiel #7
0
def server():
    return Server(
        **{
            "name": "test",
            "host": "localhost",
            "connect_username": "******",
            "connect_port": "22",
        }
    )
Beispiel #8
0
def authorize_server(id, name, token):
    """Authorize a server to connect to the API"""
    server = Server(server_id=id, server_name=name, server_token=token)
    try:
        db.session.add(server)
        db.session.commit()
    except IntegrityError:
        db.session.rollback()
        app.logger.error('Server authentication token already in use')
Beispiel #9
0
    def add_server(form_data):
        """
        添加服务器
        :param form_data:
        :return:
        """
        server_name = form_data['server_name']
        server_ip = form_data['server_ip']
        server_description = form_data['server_description'] if form_data['server_description'] else ''  # 描述
        try:
            s = Server.objects.get(server_ip=server_ip)
            return False, '机器已经存在,请核实!'
        except Server.DoesNotExist:
            s = Server(server_name=server_name, server_ip=server_ip,
                       server_description=server_description)

            s.save()
            return True, '机器添加成功!'
Beispiel #10
0
def add(request):
    if request.method == "GET":
        server_form = AddServer()
        log.info('Into Add Server Page.')
        return render(request, 'server/add.html', locals())
    else:
        log.info("start submit Add Server Data.")
        server_form = AddServer(request.POST)

        if server_form.is_valid():
            try:
                data = server_form.cleaned_data
                srv = Server(
                    name=data['name'],
                    inner_ip=data['inner_ip'],
                    outer_ip=data['outer_ip'],
                    area=data['area'],
                    user=data['user'],
                    password=data['password'],
                    port=data['port'],
                    bandwidth=data['bandwidth'],
                    monitor=data['monitor'],
                    remark=data['remark']
                )
                if srv.insert(enc=True):
                    # 更新数据字典,增加机房(如果不存在)
                    DataOption(
                        category='area',
                        keyword=data['area']
                    ).insert()
                    # 连接到主机,拷贝公钥
                    connect_server.delay(srv.id)

                log.info("Insert Server data success!")
                message = {'result': True, 'message': 'Server添加成功!', 'title': '添加Serve结果'}
                return render(request, 'server/add-result.html', locals())
            except Exception as e:
                log.error('Insert Server get the ERROR: ' + traceback.format_exc())
                message = {'result': False, 'message': '服务器发生异常:'+e.message + " 请稍候重试!"}
                return render(request, 'server/add.html', locals())
        else:
            log.error("表单验证失败! " + str(server_form.errors))
            message = {'result': False, 'message': '表单验证失败!请检查您的填写。' + str(server_form.errors)}
            return render(request, 'server/add.html', locals())
Beispiel #11
0
    def handle(self, **kwargs):
        if kwargs['server']:
            objs = Server.objects()
        if kwargs['group']:
            
            i = 1
            for s in Server.objects():
                print '%i) %s' % (i, s.host)
                i += 1
    
            num = self._get_string('Enter number to add to')
            
            obj = servers[int(num)-1]
        
        if kwargs['group']:
            groups = ServerGroup.objects()
    
            i = 1
            for g in groups:
                print '%i) %s' % (i, g.name)
                i += 1
    
            num = self._get_string('Enter number to add to')
        
            obj = groups[int(num)-1]


        while True:
            #
            # list the logs for the server/group now
            #
            if len(obj.logs) == 0:
                break
            
            i = 1
            for l in obj.logs:
                print '%i) %s' % (i, l)
                i += 1
                
            num = int(self._get_string('Enter number to delete'))
            if num > 0:
                obj.logs.pop(num-1)
                obj.save()
Beispiel #12
0
    def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all()
        s = Server('192.168.1.1', 'Some Dev Server', True)

        db.session.add(s)
        db.session.commit()

        self.client = self.app.test_client()
Beispiel #13
0
    def setUp(self):
        BaseTestCase.setUp(self)
        self.server = Server(server_token="my-server-token",
                             server_id='my-server-id',
                             server_name='My Server Name')

        self.user = User(user_name='My name',
                         user_id='my-server-id/old-name',
                         user_email='*****@*****.**')

        self.server.users.append(self.user)
        db.session.add(self.server)
        db.session.commit()
Beispiel #14
0
def check_server_expire_date():
    today = current_datetime().date()
    first_min = datetime.datetime.combine(today, datetime.time(0, 0))
    last_min = datetime.datetime.combine(today, datetime.time(23, 59))

    servers = Server.query().filter(Server.expire_date<=last_min)\
                            .filter(Server.expire_date>=first_min)
    for server in servers:
        expired_url = url_for('server.server_expired')
        run_task_at(expired_url, server.expire_date,
                    server=server.key.urlsafe())

    return make_response('')
Beispiel #15
0
    def set_server_info(form_data):
        """
        添加服务器
        :param form_data:
        :return:
        """
        server_name = form_data['server_name']
        server_ip = form_data['server_ip']
        server_description = '自动'  # 描述
        try:
            s = Server.objects.get(server_ip=server_ip)
            s.server_name = server_name
            s.server_ip = server_ip
            s.save()
            msg = 'server information update success!'
        except Server.DoesNotExist:
            s = Server(server_name=server_name, server_ip=server_ip,
                       server_description=server_description)

            s.save()
            msg = 'server auto reg success!!'
        return True, msg
Beispiel #16
0
def edit_deploy_form(request, deploy_name):
    job = Job.objects(builders__name=deploy_name + '-deploy')[0]
    
    if request.user.is_superuser:
        server_list = Server.objects.all()
    else:
        server_list = Server.objects(users=str(request.user))
    
    context = {
        'job': job,
        'server_list': server_list,
    }
    
    return render(request, 'job/deploy/edit.html', context)
Beispiel #17
0
def show_index(request, group=False): 
    if group:
        #
        # getting the groups
        #
        groups = ServerGroup.objects()
        
        return render_to_response('server/index_group.html', {'groups': groups}, context_instance=RequestContext(request))
    else:
        #
        # getting all the servers
        #
        servers = Server.objects()

        return render_to_response('server/index.html', {'servers': servers}, context_instance=RequestContext(request))
Beispiel #18
0
 def add_server_fast(form_data, user_id):
     """
     批量增加主机
     :param form_data:
     :param user_id:
     :return:
     """
     server_list = form_data['server_list']
     msg = '新增结果:'
     flag = True
     for s in server_list.split('\n'):
         server_name = s.split(',')[0].strip()  # 主机名
         server_ip = s.split(',')[1].strip()  # 主机名
         try:
             s = Server.objects.get(server_ip=server_ip)
             flag = False
             msg = msg + '失败:' + server_name.strip() + '|' + server_ip.strip() + ''
         except Server.DoesNotExist:
             s = Server(server_name=server_name, server_ip=server_ip)
         s.save()
     if flag:
         return True, '机器添加成功!'
     else:
         return False, msg
Beispiel #19
0
def edit_build_form(request, build_name):
    job = Job.objects(builders__name=build_name  + '-build')[0]
    
    if request.user.is_superuser:
        server_list = Server.objects.all()
    else:
        server_list = Server.objects(users=str(request.user))
    
    context = {
        'builders': job.builders,
        'job': job,
        'schedulers': job.schedulers[0],
        'server_list': server_list,
    }
    
    return render(request, 'job/build/edit.html', context)
Beispiel #20
0
def index(request):
    if request.user.is_superuser:
        job_list = Job.objects.all()
        server_list = Server.objects.all()
    else:
        job_list = Job.objects(users=str(request.user))
        server_list = Server.objects(users=str(request.user))
    
    user_list = User.objects.all()
    
    context = {
        'job_list': job_list,
        'server_list': server_list,
        'user_list': user_list
    }
    
    return render(request, 'permission/index.html', context)
Beispiel #21
0
def check_connection():
    def fetch_and_populate_connectivity(ip, connectivity):
        result = fetch_server_url('http://%s/' % ip, retry_count=3)
        connectivity = connectivity or [0] * 30
        connectivity.append(1 if result and result.status_code == 200 else 0)
        del connectivity[:1]
        return connectivity

    for server in Server.query():
        # check radius server connection
        connectivity = fetch_and_populate_connectivity(server.ip_address,
                                                       server.radius_response)
        server.radius_response = connectivity
        # check cisco server connection
        connectivity = fetch_and_populate_connectivity(server.cisco_ip_address,
                                                       server.cisco_response)
        server.cisco_response = connectivity
        server.put()
    return make_response('')
Beispiel #22
0
def check_server_user_limit():
    sender = 'no-reply@' + get_application_id() + '.appspotmail.com'
    site_url = 'http://' + get_application_id() + '.appspot.com'
    servers = Server.query()
    accounts = Account.query()
    for server in servers:
        if server.user_limit:
            for account in accounts:
                message = mail.EmailMessage(sender=sender, to=account.email)
                message_body = ''
                show_url = url_for('server.show', server_key=server.key.urlsafe())
                url = 'http://%s/manager/user_count/%s'\
                      % (server.ip_address, server.token)
                result = fetch_server_url(url=url, retry_count=3)
                if result.status_code == 200:
                    user_count = result.content

                    if user_count > server.user_limit:
                        message.subject = "Server expire notification: %s" % server.server_name
                        message_body += "User limit reached on %s." \
                                        "User limit: %s, Current users: %s\n %s%s" \
                                        % (server.server_name, server.user_limit,
                                           user_count, site_url, show_url)

                        if server.blocked:
                            url = 'http://%s/manager/add_user_blocked/%s'\
                                  % (server.ip_address, server.token)
                            result = fetch_server_url(url=url, retry_count=3)

                            user_blocked = result.content
                            if user_blocked == 'TRUE':
                                message_body += "Server %s add user is restricted to %s" \
                                                % (server.server_name, server.user_limit)
                            else:
                                message_body += '\n %s' % user_blocked
                else:
                    message_body += 'Unable to reach %s to retrieve user count \
                                    upon user limit check' % server.server_name

                message.body = message_body
                message.send()

    return make_response('hello')
Beispiel #23
0
    def handle(self, **kwargs):
        if kwargs['group']:
            groups = ServerGroup.objects()
    
            i = 1
            for g in groups:
                print '%i) %s' % (i, g.name)
                i += 1
    
            num = self._get_string('Enter number to add to')
        
            obj = groups[int(num)-1]
        elif kwargs['server']:
            servers = Server.objects()
            
            i = 1
            for s in servers:
                print '%i) %s' % (i, s.host)
                i += 1
    
            print 'q) Quit'
    
            num = self._get_string('Enter number to add to')
            
            obj = servers[int(num)-1]


        while True:
            log = self._get_string('Enter full path to log (hit enter to exit)', required=False)

            if log == "":
                break
            else:
                #
                # append the log to it
                #
                if obj.logs is None:
                    obj.logs = [log]
                else:
                    obj.logs.append(log)
                
                obj.save()
Beispiel #24
0
def do_add(request):
    #
    # find the server
    #
    s = Server.objects(uuid=request.POST['server']).first()
    
    #
    # add the log
    #
    j = simplejson.loads(request.POST['log'])
    
    #
    # formatting the log
    #
    log = ""
    for l in j['line']:
        log += l.strip() + "\n"

    l = Log(server=s, log=j['log'], line=log)
    l.save()
    
Beispiel #25
0
def show_server(request, server=None):
    
    s = Server.objects(host=server).first()

    if request.GET.has_key('log'):
        if request.method == "POST":
            #
            # grabbing the last 50 logs from our search string
            #
            logs = Log.objects(server=s, log=request.GET['log'], line__icontains=request.POST['search']).limit(50)
        else:
            #
            # grabbing the last 50 logs
            #
            logs = Log.objects(server=s, log=request.GET['log']).limit(50)
        
        log = ""
        for l in logs:
            log += l.line
            
        return render_to_response('server/log.html', {'server': s, 'log': log}, context_instance=RequestContext(request))

    
    return render_to_response('server/server.html', {'server': s}, context_instance=RequestContext(request))
Beispiel #26
0
class TestRPCHandler(TestCase):
    """
    """

    def setUp(self):
        self.s = Server(ip="127.0.0.1", username="******", name="localhost_test")
        self.s.save()
        self.s.connect()

    def tearDown(self):
        self.s.close()

    def test_call_method(self):
        """
        Test remote call to a Server method.
        """
        self.rh = RPCHandler([self.s, ])
        r = self.rh.call_method(self.s.id, "show_processlist")
        self.assertTrue(len(r))
Beispiel #27
0
def add_build(request):
    if request.method == 'POST':
        build_name = request.POST.get('build-name', '') + '-build'
        
        scheduler = Scheduler(
            scheduler_type='SingleBranchScheduler',
            name=build_name,
            builder_names=[build_name],
            change_filter=SchedulerChangeFilter(category=build_name)
        )
        
        build_steps = []
        for typ, arg in zip(request.POST.getlist('build-step-type'), request.POST.getlist('build-step-arg')):
            if typ == 'Git':
                build_step = BuildStep(
                    type='Git',
                    repourl=request.POST.get('repourl', ''),
                    mode='incremental',
                    workdir=request.POST.get('repourl', '').split('/')[-1].split('.')[0],
                    branch=request.POST.get('branch', '')
                )
                if build_step.repourl.startswith('http://'):
                    build_step.repourl = ''.join([
                        'http://',
                        quote(request.POST.get('repo-username', '')),
                        ':',
                        quote(request.POST.get('repo-password', '')),
                        '@',
                        build_step.repourl[7:]
                    ])
            elif typ == 'ShellCommand':
                build_step = BuildStep(
                    type='ShellCommand',
                    workdir='.',
                    command=arg
                )
            build_steps.append(copy.deepcopy(build_step))
        
        # Get Buildmaster's IP Addr
        skt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        skt.connect(("ctripcorp.com", 80))
        
        builder = Builder(
            name=build_name,
            server_names=[skt.getsockname()[0]],
            factory=build_steps,
            builddir=build_name
        )
        
        job = Job(
            schedulers=[scheduler],
            builders=builder,
            users=[request.POST.get('operator', '')]
        )
        job.save()
        
        return HttpResponse()
    else:
        if request.user.is_superuser:
            server_list = Server.objects.all()
        else:
            server_list = Server.objects(users=str(request.user))
            
        context = {'server_list': server_list}
        
        return render(request, 'job/build/add.html', context)
Beispiel #28
0
	def handle(self, *args, **options):
		#pr = cProfile.Profile()
		#pr.enable()
		transaction.set_autocommit(False)
		
		self.Faker = Factory.create()
		
		dodemo = False
		dodemopassword = ''
		
		try:
			dodemo = True if args[0] == '1' else False
			dodemopassword = args[1]
		except:
			pass
		
		# Set up a default seed so developers can talk to eachother
		self.Faker.seed(10000)
		
		# First, spirit needs us to create some categories for it to work at all:
		
		self.stdout.write("Filling up the standard categories\n")
		
		cat = Category(title="Private",slug="private",description="The category for all private discussions", is_closed=0, is_removed=0, is_private=0)
		cat.save()
		transaction.commit()
		if(cat.pk != ST_TOPIC_PRIVATE_CATEGORY_PK):
			raise CommandError("The id for the private category does not match up with our default in the settings. Check ST_TOPIC_PRIVATE_CATEGORY_PK, should be %d but is %d " % (ST_TOPIC_PRIVATE_CATEGORY_PK, cat.pk))
		
		cat = Category(title="Uncategorized",slug="uncategorized",description="The category for all uncategorized discussions", is_closed=0, is_removed=0, is_private=0)
		cat.save()
		transaction.commit()
		if(cat.pk != ST_UNCATEGORIZED_CATEGORY_PK):
			raise CommandError("The id for the uncategorized category does not match up with our default in the settings. Check ST_UNCATEGORIZED_CATEGORY_PK, should be %d but is %d " % (ST_UNCATEGORIZED_CATEGORY_PK, cat.pk))

		cat = Category(title="Other",slug="other",description="The category for external (server) discussions", is_closed=0, is_removed=0, is_private=0)
		cat.save()
		transaction.commit()
		if(cat.pk != ST_OTHER_CATEGORY_PK):
			raise CommandError("The id for the other category does not match up with our default in the settings. Check ST_OTHER_CATEGORY_PK, should be %d but is %d " % (ST_OTHER_CATEGORY_PK, cat.pk))
			
		if dodemo:
			self.stdout.write("Starting the fill of demo data\n")
		
			# Here is where we generate some categories
			
			cat_list = []
			
			self.stdout.write("Creating some fake categories\n")
			
			for str in self.categories:
				cat = Category(title=str,description="The category for all discussions about " + str, is_closed=0, is_removed=0, is_private=0)
				cat.save()
				cat_list.append(cat)
			
			transaction.commit()
			
			# Here is where we generate a couple of servers
			
			self.stdout.write("Creating some fake servers\n")
			
			servers = []
			
			for i in range(0, 100):
				name = random.choice(self.animals) + "'s " + random.choice(self.words) + " " + random.choice(self.games)
				server = Server(name=name, description=self.Faker.sentence() + " " +self.Faker.sentence(), questions="questions here", image='tuxie.jpg', image_height=0, image_width=0, status=random.randint(1, 3))
				server.save()
				servers.append(server)

			transaction.commit()
			
			# Create three users. One Admin, two unpriviliged users
			
			mem = self.create_random_member(True)
			
			adminuser = mem["member"] # The admin generated
			admin_pass = mem["password"]
			
			mem = self.create_random_member()
			
			unpriv_user1 = mem["member"] # Two unpriviliged users
			unpriv_pass1 = mem["password"]
			
			mem = self.create_random_member()
			
			unpriv_user2 = mem["member"]
			unpriv_pass2 = mem["password"]
			
			# Now generate a motherload of them
			
			for i in range(0,1000):
				self.create_random_member()
			
			self.stdout.write("Creating some fake members (may take a while)\n")
			
			transaction.commit()
			
			self.stdout.write("Creating some fake volunteers\n")
			
			# Here is where we generate a couple of volunteers
			statuscodes = ["OK", "WAITING", "DENIED"]
			
			for i in range(0, 300):
				vol = Volunteer(member=random.choice(self.members),
					server=random.choice(servers),
					answer=self.Faker.text(),
					role=self.Faker.word(),
					status=random.choice(statuscodes),
					sec_edit=self.Faker.boolean(),
					sec_accept=self.Faker.boolean()
				)
				vol.save()
				
			# Finally some topics
			
			transaction.commit()
			
			self.stdout.write("Creating some fake threads (may take a while!)\n")
			
			for i in range(0, 1000):
				top = Topic(user=random.choice(self.members),
					category=random.choice(cat_list),
					title=self.Faker.sentence(),
					is_pinned=self.Faker.boolean(5),
					is_closed=self.Faker.boolean(5),
					is_removed=self.Faker.boolean(5)
				)
				
				top.save()
				
				# Aaand some comments
				for z in range(0, random.randint(1, 500)):
					text = self.Faker.text()
					comm = Comment(user=random.choice(self.members),
						topic=top,
						comment=text,
						comment_html=text
					)
					comm.save()
			
			transaction.commit()
			
			self.stdout.write("Done! Below are three sample users of the 1003 we created:")
			self.stdout.write("Admin username:			"******"		Admin password: "******"\n")
			self.stdout.write("Unprivileged username sample 1:	"+unpriv_user1.username+"		Unprivileged user 1 password: "******"\n")
			self.stdout.write("Unprivileged username sample 1:	"+unpriv_user2.username+"	Unprivileged user 2 password: "******"\n")
			#pr.disable()
			#s = StringIO.StringIO()
			#sortby = 'cumulative'
			#ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
			#ps.print_stats()
			#self.stdout.write(s.getvalue())
		return
Beispiel #29
0
def savedata(request, result):

    if (result['status'] == "timeout"):
        print result['ip'] + ' ' + result['data']
        return "timeout"

    if 'server_sn' not in result['data']:
        print result['ip'] + ' ' + "sn error"
        return "sn error"

    server = result['data']
    sn = server['server_sn']
    ip = server['server_ip']
    brand = server['server_brand']
    model = server['server_model']
    cpu = server['server_cpu']
    memory = server['server_memory']
    network = server['server_default_ipv4']
    all_ip = server['server_all_ipv4_address']
    system = server['server_system']
    hostname = server['server_hostname']
    user = '******'
    status = 'product'

    # 如果序列号已经存在,只做更新
    if Server.objects.filter(sn=sn):

        olddata = Server.objects.filter(sn=sn)
        id = olddata[0].id

        server_update = Server.objects.get(id=id)
        server_update.ip = ip
        server_update.brand = brand
        server_update.model = model
        server_update.cpu = cpu
        server_update.memory = memory
        server_update.network = network
        server_update.all_ip = all_ip
        server_update.system = system
        server_update.hostname = hostname
        server_update.user = user
        server_update.status = status
        server_update.save()

        print ip + ' is update >>>>'
        return "update"
    # 插入数据库
    server_add = Server(
        sn=sn,
        ip=ip,
        brand=brand,
        model=model,
        cpu=cpu,
        memory=memory,
        network=network,
        all_ip=all_ip,
        system=system,
        hostname=hostname,
        user=user,
        status=status,
    )

    server_add.save()

    print ip + ' is add ****'
    return "add"
Beispiel #30
0
def get_server_user(request):
    try:
        server = Server.objects(server_name=request.POST.get(server_name, '')).first()
        return HttpResponse(', '.join([str(user) for user in server.users]))
    except:
        return HttpResponse('')
Beispiel #31
0
def inject_servers():
    context = {}
    context['servers'] = Server.query()
    context['logout_url'] = users.create_logout_url("/")
    #template_values['is_admin'] = (account.role == "admin")
    return context
Beispiel #32
0
def index(account):
    return render_template('index.html', account=account, servers=Server.query())
Beispiel #33
0
def add(request):
    if request.POST:
        nocid = request.POST.get('org.nocid', None)
        nocname = request.POST.get('org.nocname', None)
        elementid = request.POST.get('org.elementid', None)
        in_ip = request.POST.get('org.in_ip', None)
        out_ip = request.POST.get('org.out_ip', None)
        manage_account = request.POST.get('org.manage_account', None)
        manage_password = request.POST.get('org.manage_password', None)
        manage_port = request.POST.get('org.manage_port', None)
        virtual_flag = request.POST.get('org.virtual_flag', None)
        
        saltid = request.POST.get('saltid', None)
        service_name = request.POST.get('service_name', None)
        ids = request.POST.get('org.softid', None)
        
        agent_flag = request.POST.get('agent_flag', None)
        agent_saltid = request.POST.get('org.agent_saltid', None)
        
        
        '''验证机房编号,内网IP,saltid是否为空'''
        if not nocid or not in_ip or not saltid:
            return HttpResponse(simplejson.dumps({"statusCode":302, "navTabId":request.POST.get('navTabId','serverindex'), "callbackType":request.POST.get('callbackType',None), "message":u'机房编号或内网IP为空不能添加'}), mimetype='application/json')
        
#        '''验证重复资产编号'''
#        servers = Server.objects.filter(elementid__iexact=elementid)
#        if servers:
#            return HttpResponse(simplejson.dumps({"statusCode":302, "navTabId":request.POST.get('navTabId','serverindex'), "callbackType":request.POST.get('callbackType',None), "message":u'资产编号已经存在不能添加'}), mimetype='application/json')
        
        '''验证机房编号+内网IP是否唯一'''
        servers = Server.objects.filter(nocid__iexact=nocid, in_ip__iexact=in_ip)
        if servers:
            return HttpResponse(simplejson.dumps({"statusCode":302, "navTabId":request.POST.get('navTabId','serverindex'), "callbackType":request.POST.get('callbackType',None), "message":u'当前服务器已经存在不能添加'}), mimetype='application/json')
        
        '''验证saltid是否唯一'''
        servers = Server.objects.filter(saltid__iexact=saltid)
        if servers:
            return HttpResponse(simplejson.dumps({"statusCode":302, "navTabId":request.POST.get('navTabId','serverindex'), "callbackType":request.POST.get('callbackType',None), "message":u'saltid已经存在不能添加'}), mimetype='application/json')
        
        server = Server(nocid=nocid, 
                        nocname=nocname, 
                        elementid=elementid, 
                        in_ip=in_ip, 
                        out_ip=out_ip, 
                        manage_account=manage_account, 
                        manage_password=manage_password, 
                        saltid=saltid, 
                        service_name=service_name, 
                        salt_status=1)
        
        if agent_flag != None and agent_flag != '':
            server.agent_flag = agent_flag
            if agent_flag == '1':
                try:
                    agent_server = Server.objects.get(saltid=agent_saltid)
                    server.agent_server = agent_server
                    server.save()
                except:
                    return HttpResponse(simplejson.dumps({"statusCode":302, "navTabId":request.POST.get('navTabId','serverindex'), "callbackType":request.POST.get('callbackType',None), "message":u'代理服务器选择错误请重新选择'}), mimetype='application/json')
                
        server.save()
        if manage_port != None and manage_port != '':
            server.manage_port = manage_port
        else:
            server.manage_port = None
        if virtual_flag != None and virtual_flag != '':
            server.virtual_flag = virtual_flag
        else:
            server.virtual_flag = None
        server.save()
        
        # 添加基础应用
        if ids != None and ids != '':
            id_list = ids.split(',')
            for softid in id_list:
                softform = get_object_or_404(SoftForm, pk = int(softid))
                server.softforms.add(softform)
        server.save()
        
        
        Log(username=request.user.username, content=u"添加服务器:" + server.elementid + u" 成功!", level=1).save()
        return HttpResponse(simplejson.dumps({"statusCode":200, "navTabId":request.POST.get('navTabId','serverindex'), "callbackType":request.POST.get('callbackType','closeCurrent'), "message":u'添加成功'}), mimetype='application/json')
    else:
        return render_to_response('server/add.html')
Beispiel #34
0
def upload(request):
    if request.method == "GET":
        uf = FileForm()
        log.info("Into Server CSV upload page.")
        return render(request, 'server/upload.html', locals())

    log.info("CSV file uploaded and analyze...")
    uf = FileForm(request.POST, request.FILES)
    table_header = [
        '主机名', '内网IP', '外网IP', '用户名', '密码', '端口', '机房', '机架', '带宽', '监控', '备注'
        ]

    message = {}
    if uf.is_valid():
        upload_file = uf.cleaned_data['upload_file']
        if upload_file.name.lower().endswith('.csv'):
            saved_path = os.path.join(settings.UPLOAD_URL, 'server_template')
            if not os.path.exists(saved_path):
                os.makedirs(saved_path)
            now = datetime.datetime.now()
            saved_file = os.path.join(saved_path, now.strftime('%Y%m%d%H%M%S_%f') + '.csv')
            with open(saved_file, 'wb') as f:
                f.write(upload_file.read())
            log.info("file saved in: " + saved_file)
            try:
                data = csv.reader(open(saved_file, 'rb'))

                i = 0
                # 添加数量和未添加server列表
                added_count = 0
                ignore_list = []
                for row in data:
                    row = [x.decode("GBK") for x in row]
                    i += 1
                    if i == 1:
                        csv_header = row
                        diff = set(table_header) - set(csv_header)
                        if diff:
                            missing_header = ','.join(diff)
                            log.error("CSV file's table header not Support. Missing: " + missing_header)
                            return JsonResponse({'result': False, 'message': '表头信息不符!缺少表头:' + missing_header})
                        continue

                    srv = Server(
                        name=row[csv_header.index('主机名')],
                        inner_ip=row[csv_header.index('内网IP')],
                        outer_ip=row[csv_header.index('外网IP')],
                        # domain=row[csv_header.index(u'域名')],
                        area=row[csv_header.index('机房')],
                        rack=row[csv_header.index('机架')],
                        user=row[csv_header.index('用户名')],
                        password=row[csv_header.index('密码')],
                        port=row[csv_header.index('端口')],
                        bandwidth=row[csv_header.index('带宽')],
                        monitor=row[csv_header.index('监控')],
                        remark=row[csv_header.index('备注')]
                    )
                    if srv.insert(enc=True):
                        # 更新数据字典,增加机房(如果不存在)
                        DataOption(
                            category='area',
                            keyword=row[csv_header.index('机房')]
                        ).insert()
                        added_count += 1
                        # 连接到主机,拷贝公钥
                        connect_server.delay(srv.id)
                    else:
                        ignore_list.append(srv.to_dict())

                message = {'result': True, 'message': '文件上传成功!',
                           'added_count': added_count, 'ignore_list': ignore_list}
                log.info("file upload success and save to database.")
            except Exception:
                traceback.print_exc()
        else:
            log.error("file upload success But File Format not Support!")
            message = {'result': False, 'message': '文件上传失败!仅支持CSV格式'}
    else:
        message = {'result': False, 'message': '请先选择文件上传'}
        log.error('no file found.')
    log.info("upload result: " + str(message))
    return JsonResponse(message)
Beispiel #35
0
def add_deploy(request):
    if request.method == 'POST':
        deploy_name = request.POST.get('deploy-name', '') + '-deploy'
        
        scheduler = Scheduler(
            scheduler_type='SingleBranchScheduler',
            name=deploy_name,
            builder_names=[deploy_name],
            change_filter=SchedulerChangeFilter(category=deploy_name)
        )
        
        '''
        ID | Deploy Type
        1  | Deploy a Existed Build
        2  | Deploy From Git Repository
        '''
        
        if request.POST.get('deploy-type', '') == '1':
            deploy_type = 1
        elif request.POST.get('deploy-type', '') == '2':
            deploy_type = 2
        
        build_steps = []
        for typ, arg in zip(request.POST.getlist('build-step-type'), request.POST.getlist('build-step-arg')):
            if typ == 'Git':
                build_step = BuildStep(
                    type='Git',
                    repourl=request.POST.get('repourl', ''),
                    mode='incremental',
                    workdir=request.POST.get('repourl', '').split('/')[-1].split('.')[0],
                    branch=request.POST.get('branch', '')
                )
                if build_step.repourl.startswith('http://'):
                    build_step.repourl = ''.join([
                        'http://',
                        quote(request.POST.get('repo-username', '')),
                        ':',
                        quote(request.POST.get('repo-password', '')),
                        '@',
                        build_step.repourl[7:]
                    ])
            elif typ == 'ShellCommand':
                build_step = BuildStep(
                    type='ShellCommand',
                    workdir='.',
                    command=arg
                )
            elif typ == 'FileDownload':
                build_step = BuildStep(
                    type='FileDownload',
                    mastersrc='/home/op1/buildbot-slave/' + request.POST.get('build-select', '') + '-build/' + arg,
                    slavedest=arg.split('/')[-1],
                    workdir='.',
                    build=request.POST.get('build-select', ''),
                    path=arg
                )
            build_steps.append(copy.deepcopy(build_step))
        
        builder = Builder(
            name=deploy_name,
            server_names=[request.POST.get('server', '')],
            factory=build_steps,
            builddir=deploy_name,
            deploy_type=deploy_type
        )
        
        job = Job(
            schedulers=[scheduler],
            builders=builder,
            users=[request.POST.get('operator', '')]
        )
        job.save()
        
        return HttpResponse()
    else:
        if request.user.is_superuser:
            server_list = Server.objects.all()
        else:
            server_list = Server.objects(users=str(request.user))
            
        try:
            build_list = sorted(set([str(job.builders.name[:-6]) for job in Job.objects(builders__name__endswith='-build')]))
        except:
            build_list = []
            
        context = {
            'build_list': build_list,
            'server_list': server_list
        }
        
        return render(request, 'job/deploy/add.html', context)
Beispiel #36
0
class ServerTest(TestCase):
    """
    Testing for Server model.
    """

    def setUp(self):
        self.s = Server(ip="127.0.0.1", username="******", name="localhost_test")
        self.s.save()

    def teatDown(self):
        """
        """
        self.s.close()

    def test_connect(self):
        """
        Testing 'connection' method for Server class.
        """
        self.s.close()
        self.assertIn(self.s.connect(), [True, False])

    def test_doquery(self):
        """
        Testing query request and result format.
        """
        self.s.restart()

        sql = "SELECT NOW();"
        r = self.s.doquery(sql)
        self.assertTrue(r)

    def test_show_status(self):
        """
        Testing status query for server.
        """
        self.s.restart()
        r = self.s.show_status(pattern='Threads_running')
        self.assertTrue(r)
Beispiel #37
0
 def _get_db_servers(self):
     Server.flush()
     servers = Server.query.filter_by(validity=True)
     s = ServerHelper(dict([[s.sn, s.hostname] for s in servers]))
     return s
Beispiel #38
0
def savedata(request, result):

    if(result['status'] == "timeout"):
        print result['ip'] + ' ' + result['data']
        return "timeout"

    if 'server_sn' not in result['data']:
        print result['ip'] + ' ' + "sn error"
        return "sn error"

    server = result['data']
    sn = server['server_sn']
    ip = server['server_ip']
    brand = server['server_brand']
    model = server['server_model']
    cpu = server['server_cpu']
    memory = server['server_memory']
    network = server['server_default_ipv4']
    all_ip = server['server_all_ipv4_address']
    system = server['server_system']
    hostname = server['server_hostname']
    user = '******'
    status = 'product'

    # 如果序列号已经存在,只做更新
    if Server.objects.filter(sn = sn):

        olddata = Server.objects.filter(sn = sn)
        id = olddata[0].id

        server_update = Server.objects.get(id = id)
        server_update.ip = ip
        server_update.brand = brand
        server_update.model = model
        server_update.cpu = cpu
        server_update.memory = memory
        server_update.network = network
        server_update.all_ip = all_ip
        server_update.system = system
        server_update.hostname = hostname
        server_update.user = user
        server_update.status = status
        server_update.save()

        print ip+' is update >>>>'
        return "update"
    # 插入数据库
    server_add = Server(
        sn = sn,
        ip = ip,
        brand = brand,
        model = model,
        cpu = cpu,
        memory = memory,
        network = network,
        all_ip = all_ip,
        system = system,
        hostname = hostname,
        user = user,
        status = status,
        )

    server_add.save()

    print ip+' is add ****'
    return "add"
Beispiel #39
0
 def setUp(self):
     self.s = Server(ip="127.0.0.1", username="******", name="localhost_test")
     self.s.save()
Beispiel #40
0
def edit_server_user(request):
    if request.method == 'POST':
        Server.objects(server_name=request.POST.get('server_name', '')).\
            update_one(set__users=list(request.POST.getlist('server_users[]')))
    
    return HttpResponse()