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
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
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)
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)
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()
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))
def server(): return Server( **{ "name": "test", "host": "localhost", "connect_username": "******", "connect_port": "22", } )
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')
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, '机器添加成功!'
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())
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()
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()
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()
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('')
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
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)
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))
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
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)
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)
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('')
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')
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()
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()
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))
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))
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)
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
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"
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('')
def inject_servers(): context = {} context['servers'] = Server.query() context['logout_url'] = users.create_logout_url("/") #template_values['is_admin'] = (account.role == "admin") return context
def index(account): return render_template('index.html', account=account, servers=Server.query())
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')
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)
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)
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)
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
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"
def setUp(self): self.s = Server(ip="127.0.0.1", username="******", name="localhost_test") self.s.save()
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()