Esempio n. 1
0
def collect(request):
    req = request
    if req.POST:
        vendor = req.POST.get('vendor')
        product = req.POST.get('product')
        cpu_model = req.POST.get('cpu_model')
        cpu_num = req.POST.get('cpu_num')
        memory = req.POST.get('memory')
        sn = req.POST.get('sn')
        osver = req.POST.get('osver')
        hostname = req.POST.get('hostname')
        try:
            host = Host.objects.get(hostname=hostname)
        except:
            host = Host()
        host.hostname=hostname
        host.product=product
        host.cpu_num=int(cpu_num)
        host.cpu_model=cpu_model
        host.memory = int(memory)
        host.sn = sn
        host.osver = osver
        host.vendor = vendor
        host.ipaddr = req.POST.get('ip')
        host.save()
        return HttpResponse("ok")
    else:
        return HttpResponse("no post data")
Esempio n. 2
0
def collect(request):
    req = request
    if req.POST:
        vendor = req.POST.get('Product_Name')
        sn = req.POST.get('Serial_Number')
        product = req.POST.get('Manufacturer')
        cpu_model = req.POST.get('Model_Name')
        cpu_num = req.POST.get('Cpu_Cores')
        cpu_vendor = req.POST.get('Vendor_Id')
        memory_part_number = req.POST.get('Part_Number')
        memory_manufacturer = req.POST.get('Manufacturer')
        memory_size = req.POST.get('Size')
        #uuid = req.POST.get('UUID')
        identity = req.POST.get('identity')
        device_model = req.POST.get('Device_Model')
        device_version = req.POST.get('Firmware_Version')
        device_sn = req.POST.get('Serial_Number')
        device_size = req.POST.get('User_Capacity')
        osver = req.POST.get('os_version')
        hostname = req.POST.get('os_name')
        os_release = req.POST.get('os_release')
        ipaddrs = req.POST.get('Ipaddr')
        mac = req.POST.get('Device')
        link = req.POST.get('Link')
        mask = req.POST.get('Mask')
        device = req.POST.get('Device')

        host = Host()
        host.hostname = hostname
        host.product = product
        host.cpu_num = cpu_num
        host.cpu_model = cpu_model
        host.cpu_vendor = cpu_vendor
        host.memory_part_number = memory_part_number
        host.memory_manufacturer = memory_manufacturer
        host.memory_size = memory_size
        host.device_model = device_model
        host.device_version = device_version
        host.device_sn = device_sn
        host.device_size = device_size
        host.osver = osver
        host.os_release = os_release
        host.vendor = vendor
        #host.uuid = uuid
        host.identity = identity
        host.sn = sn
        host.ipaddr = ipaddrs
        host.save()

        #for ip in ipaddrs.split(';'):
        #    o_ip = IPaddr()
        #    o_ip.ipaddr = ip
        #    o_ip.host = host
        #    o_ip.save()

        return HttpResponse('OK')
    else:
        return HttpResponse('no post data')
Esempio n. 3
0
def collect(request):
    asset_info = json.loads(request.body)
    if request.method == 'POST':
        vendor = asset_info['vendor']
        # group = asset_info['group']
        disk = asset_info['disk']
        cpu_model = asset_info['cpu_model']
        cpu_num = asset_info['cpu_num']
        memory = asset_info['memory']
        sn = asset_info['sn']
        osver = asset_info['osver']
        hostname = asset_info['hostname']
        ip = asset_info['ip']
        mgm_ip = asset_info['mgm_ip']
        terminal_user = asset_info['terminal_user']
        # asset_type = ""
        # status = ""
        try:
            host = Host.objects.get(hostname=hostname)
        except Exception as msg:
            print(msg)
            host = Host()
            level = get_dir("log_level")
            ssh_pwd = get_dir("ssh_pwd")
            log_path = get_dir("log_path")
            log("cmdb.log", level, log_path)
            logging.info("==========sshkey deploy start==========")
            data = deploy_key(ip, ssh_pwd)
            logging.info(data)
            logging.info("==========sshkey deploy end==========")

        # if req.POST.get('identity'):
        #     identity = req.POST.get('identity')
        #     try:
        #         host = Host.objects.get(identity=identity)
        #     except:
        #         host = Host()
        host.hostname = hostname
        # host.group = group
        host.cpu_num = int(cpu_num)
        host.cpu_model = cpu_model
        host.memory = int(memory)
        host.sn = sn
        host.disk = disk
        host.os = osver
        host.vendor = vendor
        host.ip = ip
        host.mgm_ip = mgm_ip
        host.terminal_user = terminal_user
        # host.asset_type = asset_type
        # host.status = status
        host.save()
        return HttpResponse("Post asset data to server successfully!")
    else:
        return HttpResponse("No any post data!")
Esempio n. 4
0
def new_host():
    """
    Add a new album
    """
    form = HostForm(request.form)
    if request.method == 'POST' and form.validate():
        # save the album
        host = Host()
        save_host(host, form, new=True)
        flash('Host created successfully!')
        return redirect('/')
    return render_template('new_host.html', form=form)
Esempio n. 5
0
def check_add():
    host_type = request.form.get('type')
    cluster = request.form.get('cluster')
    hosts_temp = request.form.get('hostname')
    add_hosts = hosts_temp.split('|')
    for hostname in add_hosts:
        add_host = Host(type=host_type, cluster=cluster, hostname=hostname)
        db.session.add(add_host)
    try:
        db.session.commit()
        return "success"
    except:
        return "fail"
Esempio n. 6
0
def collect(request):
    req = request
    if req.POST:
        vendor = req.POST.get('vendor')
        product = req.POST.get('product')
        cpu_model = req.POST.get('cpu_model')
        cpu_num = req.POST.get('cpu_num')
        memory = req.POST.get('memory')
        sn = req.POST.get('sn')
        osver = req.POST.get('osver')
        hostname = req.POST.get('hostname')
        try:
            host = Host.objects.get(hostname=hostname)
        except:
            host = Host()
        ipaddrs = req.POST.get('ipaddrs')
        identity = req.POST.get('identity')
        try:
            host = Host.objects.get(identity=identity)
        except:
            host = Host()
        host.hostname = hostname
        host.product = product
        host.cpu_num = int(cpu_num)
        host.cpu_model = cpu_model
        host.memory = int(memory)
        host.sn = sn
        host.osver = osver
        host.vendor = vendor
        host.save()
        for ip in ipaddrs.split(';'):
            o_ip = Ipaddr()
            o_ip.ipaddr = ip
            o_ip.host = host
            o_ip.save()
        return HttpResponse("post data successfully!")
    else:
        return HttpResponse("no any post data!")
Esempio n. 7
0
def create_host():
    if request.methods == 'POST':
        ip = (request.json['ip'])
    
        try:
            host = Host.query.filter(Host.ip == ip).first()
            if host is not None:
                return jsonify({'success': False, "error": "this host already exists with id " + host.id})
            host = Host(ip=ip)
            db.session.add(host)
            db.session.commit()
            return jsonify({'success': True, "error": null})
        except:
            error ='ip upload error'
            return jsonify({'success': False, "error": error})
Esempio n. 8
0
def create_or_update_host(db_session,
                          hostname,
                          region_id,
                          location,
                          roles,
                          software_profile_id,
                          connection_type,
                          host_or_ip,
                          username,
                          password,
                          enable_password,
                          port_number,
                          jump_host_id,
                          created_by,
                          host=None):

    hostname = check_acceptable_string(hostname)
    """ Create a new host in the Database """
    if host is None:
        host = Host(created_by=created_by)
        host.inventory_job.append(InventoryJob())
        host.context.append(HostContext())
        db_session.add(host)

    host.hostname = hostname
    host.region_id = region_id if region_id > 0 else None
    host.software_profile_id = software_profile_id if software_profile_id > 0 else None
    host.location = '' if location is None else remove_extra_spaces(location)
    host.roles = '' if roles is None else remove_extra_spaces(roles)
    host.connection_param = [
        ConnectionParam(
            # could have multiple IPs, separated by comma
            host_or_ip=''
            if host_or_ip is None else remove_extra_spaces(host_or_ip),
            username='' if username is None else remove_extra_spaces(username),
            password='' if password is None else remove_extra_spaces(password),
            enable_password='' if enable_password is None else
            remove_extra_spaces(enable_password),
            jump_host_id=jump_host_id if jump_host_id > 0 else None,
            connection_type=connection_type,
            # could have multiple ports, separated by comma
            port_number=''
            if port_number is None else remove_extra_spaces(port_number))
    ]

    db_session.commit()

    return host
Esempio n. 9
0
 def host_add(self, name, groups=[]):
     # does this host exist?
     try:
         host = self.session.query(Host).filter(Host.name == name).one()
     except:
         host = Host(name=name)
         # if we have to make a host, add it to [all]
         host.groups.append(
             self.session.query(Group).filter(Group.name == 'all').one())
     if groups:
         for group in groups:
             # does the group exist? this throws an exception if the group wasnt found
             group = self.session.query(Group).filter(
                 Group.name == group).one()
             if not group in host.groups: host.groups.append(group)
     self.session.add(host)
     self.session.commit()
Esempio n. 10
0
def host_add(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        ip = request.POST.get('ip')
        netmask = request.POST.get('netmask')
        gateway = request.POST.get('gateway')
        disk = request.POST.get('disk')
        ip_range = request.POST.get('ip_range')
        print name, ip, netmask, gateway, disk

        host = Host(name=name,
                    ip=ip,
                    netmask=netmask,
                    gateway=gateway,
                    disk_used=disk,
                    ip_range=ip_range)
        host.save()
        return HttpResponse('添加成功')
    return render_to_response('host_add.html', locals())
Esempio n. 11
0
def collect(request):
    asset_info = json.loads(request.body)
    if request.method == 'POST':
        vendor = asset_info['vendor']
        # group = asset_info['group']
        disk = asset_info['disk']
        cpu_model = asset_info['cpu_model']
        cpu_num = asset_info['cpu_num']
        memory = asset_info['memory']
        sn = asset_info['sn']
        osver = asset_info['osver']
        hostname = asset_info['hostname']
        ip = asset_info['ip']
        asset_type = ""
        status = ""
        try:
            host = Host.objects.get(hostname=hostname)
        except:
            host = Host()
        # if req.POST.get('identity'):
        #     identity = req.POST.get('identity')
        #     try:
        #         host = Host.objects.get(identity=identity)
        #     except:
        #         host = Host()
        host.hostname = hostname
        # host.group = group
        host.cpu_num = int(cpu_num)
        host.cpu_model = cpu_model
        host.memory = int(memory)
        host.sn = sn
        host.disk = disk
        host.os = osver
        host.vendor = vendor
        host.ip = ip
        host.asset_type = asset_type
        host.status = status
        host.save()
        return HttpResponse("Post asset data to server successfully!")
    else:
        return HttpResponse("No any post data!")
Esempio n. 12
0
def collect(request):
    req = request
    if req.POST:
        vendor = req.POST.get('vendor')
        group = req.POST.get('group')
        disk = req.POST.get('disk')
        cpu_model = req.POST.get('cpu_model')
        cpu_num = req.POST.get('cpu_num')
        memory = req.POST.get('memory')
        sn = req.POST.get('sn')
        osver = req.POST.get('osver')
        hostname = req.POST.get('hostname')
        ip = req.POST.get('ip')
        asset_type = ""
        status = ""
        try:
            host = Host.objects.get(hostname=hostname)
        except:
            host = Host()
        # if req.POST.get('identity'):
        #     identity = req.POST.get('identity')
        #     try:
        #         host = Host.objects.get(identity=identity)
        #     except:
        #         host = Host()
        host.hostname = hostname
        #host.group = group
        host.cpu_num = int(cpu_num)
        host.cpu_model = cpu_model
        host.memory = int(memory)
        host.sn = sn
        host.disk = disk
        host.os = osver
        host.vendor = vendor
        host.ip = ip
        host.asset_type = asset_type
        host.status = status
        host.save()
        return HttpResponse("post data successfully!")
    else:
        return HttpResponse("no any post data!")
Esempio n. 13
0
def add():
    if request.method == "POST":
        try:
            if request.form['a_servername']:
                a_servername = request.form.get('a_servername').strip()
                if servername_check(a_servername) is not None:
                    return jsonify("Failed, Server Name exists in database.")
            if request.form['a_ip']:
                a_ip = request.form.get('a_ip').strip()
            if request.form['a_port']:
                a_port = request.form.get('a_port').strip()
            if request.form['a_username']:
                a_username = request.form.get('a_username').strip()
            if request.form['a_password']:
                a_password = encrypt(request.form.get('a_password').strip())
            if request.form['a_servername']:
                a_servername = request.form.get('a_servername').strip()
            if request.form['a_comment']:
                a_comment = request.form.get('a_comment').strip()
            if request.form['a_servergroup']:
                a_servergroup = request.form.get('a_servergroup').strip()
            server = Host(servername=a_servername,
                          ip=a_ip,
                          port=a_port,
                          group=a_servergroup)
            session.add(server)
            session.commit()
            passwd = Passwd(username=a_username,
                            password=a_password,
                            host=server,
                            comment=a_comment)
            session.add(passwd)
            session.commit()

        except Exception, e:
            print e
            return jsonify(
                "Added failed, make sure you include the right values.")
        return jsonify("Added successfully")
Esempio n. 14
0
    def post(self):
        form = HostForm(request.form)
        if form.validate_on_submit():
            host, user = request.form['host'], request.form['user']
            pwd, port = request.form['password'], request.form['port']
            # 检查主机是否已存在
            if Host.filter(host):
                flash('主机已存在!')
            else:
                # 测试密码是否正确,是否能连接成功
                result = Host.test_connect(host, user, pwd, port)
                if result['code'] == 0:
                    password = encrypt_oracle(pwd)
                    host_obj = Host(addr=host, name=user, password=password, port=port)
                    db.session.add(host_obj)
                    db.session.commit()

                    return redirect(url_for('index'))
                else:
                    flash('添加失败,请检查参数是否正确!')

        return render_template('order.html', form=form)
Esempio n. 15
0
def collectjson(request):
    req = request
    if req.method == "POST":
        jsonobj = json.loads(req.body)
        try:
            host = Host.objects.get(identity=jsonobj['identity'])
        except:
            host = Host()
        try:
            host.identity = jsonobj['identity']
            host.hostname = jsonobj['hostname']
            host.product = jsonobj['product']
            host.cpu_num = jsonobj['cpu_num']
            host.cpu_model = jsonobj['cpu_model']
            host.memory = jsonobj['memory']
            host.sn = jsonobj['sn']
            host.osver = jsonobj['osver']
            host.vendor = jsonobj['vendor']
            host.ipaddr = jsonobj['ip']
            host.save()
            return HttpResponse(json.dumps({'status': 0, 'message': "ok"}))
        except Exception, e:
            return HttpResponse(json.dumps({'status': -1, 'message': str(e)}))
Esempio n. 16
0
def collect(request):
    asset_info = json.loads(request.body)
    print asset_info
    if request.method == 'POST':
        #vendor = asset_info['vendor']
        # group = asset_info['group']
        disk = asset_info['disk']
        #cpu_model = asset_info['cpu_model']
        cpu_num = asset_info['cpu_num']
        memory = asset_info['memory']
        sn = asset_info['sn']
        osver = asset_info['osver']
        hostname = asset_info['hostname']
        ip = asset_info['privateIps']
        # asset_type = ""
        # status = ""
        try:
            # 检查hostname是否已经存在
            host = Host.objects.get(hostname=hostname)
        except Exception as msg:
            print(msg)
            host = Host()

        host.hostname = hostname
        # host.group = group
        host.cpu_num = int(cpu_num)
        #host.cpu_model = cpu_model
        host.memory = float(memory)
        host.sn = sn
        host.disk = disk
        host.os = osver
        #host.vendor = vendor
        host.ip = ip
        host.save()
        return HttpResponse("Post asset data to server successfully!")
    else:
        return HttpResponse("No any post data!")
Esempio n. 17
0
import random
import string
from random import choice


def generate_passwd(length):
    passwd_format = string.digits + string.ascii_letters
    passwd = []
    while (len(passwd) < length):
        passwd.append(choice(passwd_format))
    return ''.join(passwd)


for i in range(20):
    server3 = Host(servername="srv-{0}-db10{1}".format(generate_passwd(5), i),
                   ip="10.10.1.1",
                   port="40022",
                   group="lz")
    session.add(server3)
    session.commit()

    passwd3 = Passwd(username="******",
                     password=encrypt(generate_passwd(12)),
                     host=server3)
    session.add(passwd3)
    session.commit()

    passwd4 = Passwd(username="******",
                     password=encrypt(generate_passwd(12)),
                     comment="PrivateIP:10.0.0.1",
                     host=server3)
    session.add(passwd4)
Esempio n. 18
0
def load_data():
	with open('data/AB_NYC_2019.csv', mode='r') as csv_data:
		csv_reader = csv.reader(csv_data, delimiter=',')
		line_count=0
		skipped = []
		hosts_seen = set()
		appartments_seen = set()
		for row in csv_reader:
			if line_count == 0:
				line_count += 1
				continue
			if len(row) < 16:
				# skip rows that are too short because we don't know
				# which columns are missing
				skipped.append(row)
				continue
			line_count += 1
			print(line_count)
			last_review_date = datetime.strptime(row[12],'%Y-%m-%d') if row[12] else None
			appartment_id=int(row[0])
			name=row[1]
			neighbourhood_group=row[4]
			neighbourhood=row[5]
			try:
				latitude=float(row[6])
				longitude=float(row[7])
			except ValueError:
				skipped.append(row)
				continue
			room_type=row[8]
			price=float(row[9])
			minimum_nights=int(row[10])
			number_of_reviews=int(row[11])
			reviews_per_month=float(row[13]) if row[13] else None
			calculated_host_listings_count=int(row[14])
			availability_365=int(row[15])
			host_id=int(row[2])

			new_host = Host(host_id=host_id, name=row[3])
			new_appartment = Appartment(
				appartment_id=int(row[0]),
				name=row[1],
				neighbourhood_group=row[4],
				neighbourhood=row[5],
				latitude=float(row[6]),
				longitude=float(row[7]),
				room_type=row[8],
				price=float(row[9]),
				minimum_nights=int(row[10]),
				number_of_reviews=int(row[11]),
				last_review=last_review_date,
				reviews_per_month=float(row[13]) if row[13] else None,
				calculated_host_listings_count=int(row[14]),
				availability_365=int(row[15]),
				host_id=int(row[2]),
			)
			print(new_appartment)
			print(new_host)

			if new_host.host_id in hosts_seen:
				print("Host {} already added".format(new_host))
			else:
				db.session.add(new_host)
				hosts_seen.add(new_host.host_id)

			if new_appartment.appartment_id in appartments_seen:
				print("Duplicate entry: {}".format(new_appartment))
			else:
				db.session.add(new_appartment)
				appartments_seen.add(new_appartment.appartment_id)

		db.session.flush()

		print(f'Processed {line_count} lines.')
		print(f'Skipped {len(skipped)} lines')
Esempio n. 19
0
def addHConfig(request):

    if request.method == 'POST':
        try:
            save_list = []
            info = request.POST.get('info', '')
            group = request.POST.get('group', '')

            pc = PrometheusConfig.objects.filter()
            path = pc[0].rule_files_path
            if not path.endswith('/'):
                path += '/'

            value = eval(info)
            flag = True
            for item in value:
                target = item["targets"][0]
                try:
                    name = item['labels']['name']
                except Exception, e:
                    print e
                    name = target

                try:
                    type = item['labels']['monitortype']
                except Exception, e:
                    print e
                    type = ''

                # os.system('mkdir -p ' + path + group + '/' + name)

                flag = createHost(name, group)
                if flag is False:
                    break
                labels = json.dumps(item['labels'], ensure_ascii=False)
                id = 'H' + datetime.datetime.now().strftime(
                    '%Y%m%d%H%M%S') + ''.join(
                        str(random.choice(range(10))) for _ in range(10))
                ht = Host(hid=id,
                          instance=target,
                          name=name,
                          groupid=group,
                          monitortype=type,
                          label=labels)
                save_list.append(ht)
                # flag = createHost(name, group)
                # if flag is False:
                #     break
            if flag is True:
                Host.objects.bulk_create(save_list)

            jobfile = pc[0].job_path
            if not jobfile.endswith('/'):
                jobfile += '/'

            os.system('mkdir -p ' + jobfile)

            ht = Host.objects.filter(groupid=group)
            x = []
            for index in range(0, len(ht)):
                host = {}
                target_host = []
                target_host.append(ht[index].instance)
                host['targets'] = target_host
                host['labels'] = eval(ht[index].label)
                x.append(host)

            with open(jobfile + group + '.yml', 'w') as f:
                f.write(json.dumps(x, ensure_ascii=False))

            return HttpResponse(json.dumps(u'添加成功'))
Esempio n. 20
0
def main():
    pidfile = PidFile(file_name=config['pidfile'])
    pidfile.create(pid=os.getpid())
    atexit.register(pidfile.unlink)

    threads = []

    signal.signal(signal.SIGTERM, Utils.signal_handle)
    signal.signal(signal.SIGINT, Utils.signal_handle)

    t_ = threading.Thread(target=Host().guest_creating_progress_report_engine,
                          args=())
    threads.append(t_)

    t_ = threading.Thread(target=Host().guest_state_report_engine, args=())
    threads.append(t_)

    t_ = threading.Thread(target=Host().instruction_process_engine, args=())
    threads.append(t_)

    t_ = threading.Thread(target=Host().host_state_report_engine, args=())
    threads.append(t_)

    t_ = threading.Thread(target=Host().guest_performance_collection_engine,
                          args=())
    threads.append(t_)

    t_ = threading.Thread(target=Host().host_performance_collection_engine,
                          args=())
    threads.append(t_)

    vir_event_loop_poll_register()
    t_ = threading.Thread(target=vir_event_loop_poll_run,
                          name="libvirtEventLoop")
    threads.append(t_)

    for t in threads:
        t.setDaemon(True)
        t.start()

    i = 0
    while not eventLoop.runningPoll and i <= 10:
        """
        避免在 timer 还没启动的时候,就去注册事件。那样会抛出如下异常:
        libvirtError: internal error: could not initialize domain event timer
        """
        i += 1
        time.sleep(1)

    EventProcess.guest_event_register()

    while True:
        if Utils.exit_flag:
            # 主线程即将结束
            EventProcess.guest_event_deregister()
            break

        if config['DEBUG']:
            print threads_status

        for k, v in threads_status.items():
            # 如果某个引擎脱线 120 秒,则自动重启 JimV-N。
            if (ji.Common.ts() - v['timestamp']) > 120:
                Host.restart()

        time.sleep(1)

    # 等待子线程结束
    for t in threads:
        t.join()

    msg = 'Main say bye-bye!'
    print msg
    logger.info(msg=msg)
Esempio n. 21
0
    def on_okbutton1_clicked(self, widget, *args):
        group = self.cmbGroup.get_active_text().strip()
        name = self.txtName.get_text().strip()
        description = self.txtDescription.get_text().strip()
        host = self.txtHost.get_text().strip()
        ctype = self.cmbType.get_active_text().strip()
        user = self.txtUser.get_text().strip()
        password = self.txtPass.get_text().strip()
        private_key = self.txtPrivateKey.get_text().strip()
        port = self.txtPort.get_text().strip()
        buf = self.txtCommands.get_buffer()
        commands = buf.get_text(buf.get_start_iter(), buf.get_end_iter(
        )).strip() if self.chkCommands.get_active() else ""
        keepalive = self.txtKeepAlive.get_text().strip()
        if self.get_widget("chkDefaultColors").get_active():
            fcolor = ""
            bcolor = ""
        else:
            fcolor = self.btnFColor.selected_color
            bcolor = self.btnBColor.selected_color

        x11 = self.chkX11.get_active()
        agent = self.chkAgent.get_active()
        compression = self.chkCompression.get_active()
        compressionLevel = self.txtCompressionLevel.get_text().strip()
        extra_params = self.txtExtraParams.get_text()
        log = self.chkLogging.get_active()
        backspace_key = self.cmbBackspace.get_active()
        delete_key = self.cmbDelete.get_active()

        if ctype == "":
            ctype = "ssh"
        tunnel = ""

        if ctype == "ssh":
            for x in self.treeModel:
                tunnel = '%s,%s' % (x[3], tunnel)
            tunnel = tunnel[:-1]

        # Validar datos
        if group == "" or name == "" or (host == "" and ctype != 'local'):
            msgbox(_("Fields group, name and host are required"))
            return

        if not (port and port.isdigit() and 1 <= int(port) <= 65535):
            msgbox(_("Invalid port"))
            return

        host = Host(group, name, description, host, user, password,
                    private_key, port, tunnel, ctype, commands, keepalive,
                    fcolor, bcolor, x11, agent, compression, compressionLevel,
                    extra_params, log, backspace_key, delete_key)

        try:
            # Guardar
            if not group not in self.config.groups:
                self.config.groups[group] = []

            if self.isNew:
                for h in self.config.groups[group]:
                    if h.name == name:
                        msgbox("%s [%s] %s [%s]" %
                               (_("Host name"), name,
                                _("already exists for group"), group))
                        return
                # agregar host a grupo
                self.config.groups[group].append(host)
            else:
                if self.oldGroup != group:
                    # revisar que no este el nombre en el nuevo grupo
                    if not group not in self.config.groups:
                        self.config.groups[group] = [host]
                    else:
                        for h in self.config.groups[group]:
                            if h.name == name:
                                msgbox("%s [%s] %s [%s]" %
                                       (_("Host name"), name,
                                        _("already exists for group"), group))
                                return
                        self.config.groups[group].append(host)
                        for h in self.config.groups[self.oldGroup]:
                            if h.name == self.oldName:
                                self.config.groups[self.oldGroup].remove(h)
                                break
                else:
                    if self.oldName != name:
                        for h in self.config.groups[self.oldGroup]:
                            if h.name == name:
                                msgbox("%s [%s] %s [%s]" %
                                       (_("Host name"), name,
                                        _("already exists for group"), group))
                                return
                        for h in self.config.groups[self.oldGroup]:
                            if h.name == self.oldName:
                                index = self.config.groups[
                                    self.oldGroup].index(h)
                                self.config.groups[self.oldGroup][index] = host
                                break
                    else:
                        for h in self.config.groups[self.oldGroup]:
                            if h.name == self.oldName:
                                index = self.config.groups[
                                    self.oldGroup].index(h)
                                self.config.groups[self.oldGroup][index] = host
                                break
        except:
            traceback.print_exc()
            msgbox("%s [%s]" %
                   (_("Error saving host. Description"), sys.exc_info()[1]))

        self.config.writeConfig()
        self.get_widget("wHost").destroy()
Esempio n. 22
0
def api_import_hosts():
    importable_header = [
        HEADER_FIELD_HOSTNAME, HEADER_FIELD_REGION, HEADER_FIELD_ROLES,
        HEADER_FIELD_IP, HEADER_FIELD_USERNAME, HEADER_FIELD_PASSWORD,
        HEADER_FIELD_CONNECTION, HEADER_FIELD_PORT
    ]
    region_id = request.form['region']
    data_list = request.form['data_list']

    db_session = DBSession()
    selected_region = get_region_by_id(db_session, region_id)
    if selected_region is None:
        return jsonify(
            {'status': 'Region is no longer exists in the database.'})

    # Check mandatory data fields
    error = []
    reader = csv.reader(data_list.splitlines(), delimiter=',')
    header_row = next(reader)

    if HEADER_FIELD_HOSTNAME not in header_row:
        error.append('"hostname" is missing in the header.')

    if HEADER_FIELD_IP not in header_row:
        error.append('"ip" is missing in the header.')

    if HEADER_FIELD_CONNECTION not in header_row:
        error.append('"connection" is missing in the header.')

    for header_field in header_row:
        if header_field not in importable_header:
            error.append('"' + header_field +
                         '" is not a correct header field.')

    if error:
        return jsonify({'status': ','.join(error)})

    # Check if each row has the same number of data fields as the header
    error = []
    data_list = list(reader)

    row = 2
    COLUMN_CONNECTION = get_column_number(header_row, HEADER_FIELD_CONNECTION)
    COLUMN_REGION = get_column_number(header_row, HEADER_FIELD_REGION)

    for row_data in data_list:
        if len(row_data) > 0:
            if len(row_data) != len(header_row):
                error.append('line %d has wrong number of data fields.' % row)
            else:
                if COLUMN_CONNECTION >= 0:
                    # Validate the connection type
                    data_field = row_data[COLUMN_CONNECTION]
                    if data_field != ConnectionType.TELNET and data_field != ConnectionType.SSH:
                        error.append(
                            'line %d has a wrong connection type (should either be "telnet" or "ssh").'
                            % row)
                if COLUMN_REGION >= 0:
                    # Create a region if necessary
                    data_field = get_acceptable_string(row_data[COLUMN_REGION])
                    region = get_region(db_session, data_field)
                    if region is None and data_field:
                        try:
                            db_session.add(
                                Region(name=data_field,
                                       created_by=current_user.username))
                            db_session.commit()
                        except Exception:
                            db_session.rollback()
                            error.append('Unable to create region %s.' %
                                         data_field)

        row += 1

    if error:
        return jsonify({'status': ','.join(error)})

    # Import the data
    error = []
    im_regions = {}

    for data in data_list:
        if len(data) == 0:
            continue

        db_host = None
        im_host = Host()
        im_host.region_id = selected_region.id
        im_host.created_by = current_user.username
        im_host.inventory_job.append(InventoryJob())
        im_host.context.append(HostContext())
        im_host.connection_param.append(ConnectionParam())
        im_host.connection_param[0].username = ''
        im_host.connection_param[0].password = ''
        im_host.connection_param[0].port_number = ''

        for column in range(len(header_row)):

            header_field = header_row[column]
            data_field = data[column].strip()

            if header_field == HEADER_FIELD_HOSTNAME:
                hostname = get_acceptable_string(data_field)
                db_host = get_host(db_session, hostname)
                im_host.hostname = hostname
            elif header_field == HEADER_FIELD_REGION:
                region_name = get_acceptable_string(data_field)
                if region_name in im_regions:
                    im_host.region_id = im_regions[region_name]
                else:
                    region = get_region(db_session, region_name)
                    if region is not None:
                        im_host.region_id = region.id
                        # Saved for later lookup
                        im_regions[region_name] = region.id
            elif header_field == HEADER_FIELD_ROLES:
                im_host.roles = remove_extra_spaces(data_field)
            elif header_field == HEADER_FIELD_IP:
                im_host.connection_param[0].host_or_ip = remove_extra_spaces(
                    data_field)
            elif header_field == HEADER_FIELD_USERNAME:
                username = get_acceptable_string(data_field)
                im_host.connection_param[0].username = username
            elif header_field == HEADER_FIELD_PASSWORD:
                im_host.connection_param[0].password = data_field
            elif header_field == HEADER_FIELD_CONNECTION:
                im_host.connection_param[0].connection_type = data_field
            elif header_field == HEADER_FIELD_PORT:
                im_host.connection_param[0].port_number = remove_extra_spaces(
                    data_field)

        # Import host already exists in the database, just update it
        if db_host is not None:
            db_host.created_by = im_host.created_by
            db_host.region_id = im_host.region_id

            if HEADER_FIELD_ROLES in header_row:
                db_host.roles = im_host.roles

            if HEADER_FIELD_IP in header_row:
                db_host.connection_param[
                    0].host_or_ip = im_host.connection_param[0].host_or_ip

            if HEADER_FIELD_USERNAME in header_row:
                db_host.connection_param[
                    0].username = im_host.connection_param[0].username

            if HEADER_FIELD_PASSWORD in header_row:
                db_host.connection_param[
                    0].password = im_host.connection_param[0].password

            if HEADER_FIELD_CONNECTION in header_row:
                db_host.connection_param[
                    0].connection_type = im_host.connection_param[
                        0].connection_type

            if HEADER_FIELD_PORT in header_row:
                db_host.connection_param[
                    0].port_number = im_host.connection_param[0].port_number
        else:
            # Add the import host
            db_session.add(im_host)

    if error:
        return jsonify({'status': error})
    else:
        db_session.commit()
        return jsonify({'status': 'OK'})
Esempio n. 23
0
def main():
    pidfile = PidFile(file_name=config['pidfile'])
    pidfile.create(pid=os.getpid())
    atexit.register(pidfile.unlink)

    threads = []

    signal.signal(signal.SIGTERM, Utils.signal_handle)
    signal.signal(signal.SIGINT, Utils.signal_handle)

    guest_creating_progress_report_engine_engine = Host()
    t_ = threading.Thread(target=guest_creating_progress_report_engine_engine.
                          guest_creating_progress_report_engine,
                          args=())
    threads.append(t_)

    host_use_for_instruction_process_engine = Host()
    t_ = threading.Thread(target=host_use_for_instruction_process_engine.
                          instruction_process_engine,
                          args=())
    threads.append(t_)

    host_use_for_host_state_report_engine = Host()
    t_ = threading.Thread(
        target=host_use_for_host_state_report_engine.host_state_report_engine,
        args=())
    threads.append(t_)

    host_use_for_guest_performance_collection_engine = Host()
    t_ = threading.Thread(
        target=host_use_for_guest_performance_collection_engine.
        guest_performance_collection_engine,
        args=())
    threads.append(t_)

    host_use_for_host_performance_collection_engine = Host()
    t_ = threading.Thread(
        target=host_use_for_host_performance_collection_engine.
        host_performance_collection_engine,
        args=())
    threads.append(t_)

    vir_event_loop_poll_register()
    t_ = threading.Thread(target=vir_event_loop_poll_run,
                          name="libvirtEventLoop")
    threads.append(t_)

    host_use_for_refresh_guest_state = Host()
    host_use_for_refresh_guest_state.refresh_guest_state()

    for t in threads:
        t.setDaemon(True)
        t.start()

    EventProcess.guest_event_register()

    while True:
        if Utils.exit_flag:
            # 主线程即将结束
            EventProcess.guest_event_deregister()
            break

        if config['DEBUG']:
            print threads_status

        time.sleep(1)

    # 等待子线程结束
    for t in threads:
        t.join()

    msg = 'Main say bye-bye!'
    print msg
    logger.info(msg=msg)
Esempio n. 24
0
    def consume(self, commandstr):
        """
        Read and act upon a line of lobby protocol.

        Only the following commands are implemented:
          ADDUSER
          BATTLECLOSED
          BATTLEOPENED
          CLIENTSTATUS
          JOINEDBATTLE
          LEFTBATTLE
          REMOVEUSER
          UPDATEBATTLEINFO
        """
        if commandstr.startswith("ADDUSER"):
            # http://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#ADDUSER:server
            # ADDUSER userName country cpu [accountID]
            try:
                self.users[commandstr.split()[1]] = User(
                    *commandstr.split()[1:])
            except ValueError:
                logger.exception("Bad format, commandstr: '%s'",
                                 repr(commandstr))
                return
            except Exception:
                logger.exception("Exception, commandstr: '%s'",
                                 repr(commandstr))
                return
        elif commandstr.startswith("BATTLECLOSED"):
            # http://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#BATTLECLOSED:server
            # BATTLECLOSED battleID
            try:
                battleID = commandstr.split()[1]
            except Exception:
                logger.exception("Commandstr: '%s'", repr(commandstr))
                return
            # founder is founder no more
            try:
                self.hosts[battleID].user.host = None
            except:
                logger.exception(
                    "error removing host-user-founder association")
            # remove battle from all host lists
            for hosts in [self.hosts, self.hosts_ingame, self.hosts_open]:
                try:
                    del hosts[battleID]
                except:
                    pass
        elif commandstr.startswith("BATTLEOPENED"):
            # http://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#BATTLEOPENED:server
            # BATTLEOPENED battleID type natType founder ip port maxPlayers passworded rank mapHash {engineName} \
            # {engineVersion} {map} {title} {gameName}
            try:
                cmd, engineVersion, _map, title, gameName = commandstr.split(
                    "\t")
                _, battleID, _type, natType, founder, ip, port, maxPlayers, passworded, rank, mapHash, engineName = \
                    cmd.split()
            except ValueError:
                logger.exception("Bad format, commandstr: '%s'",
                                 repr(commandstr))
                return
            except Exception:
                logger.exception("Commandstr: '%s'", repr(commandstr))
                return
            loc = locals()
            del loc["_"]
            del loc["cmd"]
            del loc["commandstr"]
            del loc["self"]
            loc["map"] = _map
            del loc["_map"]
            loc["type"] = _type
            del loc["_type"]
            for k, v in loc.items():
                loc[k] = unicode(v, errors='ignore')
            host = Host(loc)
            self.hosts[battleID] = host
            self.hosts_open[battleID] = host
            host.user = self.users[founder]
            host.user.host = host
        elif commandstr.startswith("CLIENTSTATUS"):
            # http://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#CLIENTSTATUS:server
            # http://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#MYSTATUS:client
            # CLIENTSTATUS userName status
            # status bits: is_bot|has_access|3*rank|is_away|is_ingame
            try:
                _, userName, status = commandstr.split()
            except ValueError:
                logger.exception("Bad format, commandstr: '%s'",
                                 repr(commandstr))
                return
            except:
                logger.exception("Commandstr: '%s'", repr(commandstr))
                return
            try:
                user = self.users[userName]
            except:
                logger.exception(
                    "Exception in CLIENTSTATUS: userName '%s' in self.users?: %s, commandstr: '%s'",
                    userName, userName in self.users, repr(commandstr))
                return
            try:
                status_bin = bin(int(status))[2:].zfill(7)
                user.is_ingame = bool(int(status_bin[6]))
                user.is_away = bool(int(status_bin[5]))
                user.rank = int(status_bin[2:5], base=2)
                user.is_moderator = bool(int(status_bin[1]))
                user.is_bot = bool(int(status_bin[0]))
            except:
                logger.exception(
                    "Exception in CLIENTSTATUS: status: '%s', status_bin: '%s', commandstr: '%s'",
                    repr(commandstr), status, status_bin)
                return
            if user.host:
                user.host.is_ingame = user.is_ingame
                if user.is_ingame:
                    # add host to hosts_ingame
                    self.hosts_ingame[user.host.battleID] = user.host
                    # remove host from hosts_open
                    try:
                        del self.hosts_open[user.host.battleID]
                    except:
                        # CLIENTSTATUS is sent twice in case of self-hosted battles
                        pass
                else:
                    # add host to hosts_open
                    self.hosts_open[user.host.battleID] = user.host
                    # remove host from hosts_ingame
                    try:
                        del self.hosts_ingame[user.host.battleID]
                    except Exception:
                        if self.login_info_consumed:
                            logger.exception(
                                "Exception in CLIENTSTATUS: trying to remove host from hosts_ingame, commandstr: '%s'",
                                repr(commandstr))
                        else:
                            # msg flood in in wrong order during initial setup
                            pass
        elif commandstr.startswith("JOINEDBATTLE"):
            # http://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#JOINEDBATTLE:server
            # JOINEDBATTLE battleID userName [scriptPassword]
            try:
                _, battleID, userName = commandstr.split()
            except ValueError:
                logger.exception("Bad format, commandstr: '%s'",
                                 repr(commandstr))
                return
            self.hosts[battleID].user_list.append(self.users[userName])
            self.hosts[battleID].set_player_count()
        elif commandstr.startswith("LEFTBATTLE"):
            # http://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#LEFTBATTLE:server
            # LEFTBATTLE battleID userName
            try:
                _, battleID, userName = commandstr.split()
            except ValueError:
                logger.exception("Bad format, commandstr: '%s'",
                                 repr(commandstr))
                return
            try:
                self.hosts[battleID].user_list.remove(self.users[userName])
                self.hosts[battleID].set_player_count()
            except:
                logger.exception(
                    "Exception in LEFTBATTLE: userName '%s' not in self.hosts[%s].user_list?",
                    userName, battleID)
                return
        elif commandstr.startswith("REMOVEUSER"):
            # http://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#REMOVEUSER:server
            # REMOVEUSER userName
            userName = commandstr.split()[1]
            user = self.users[userName]
            if user.host:
                try:
                    del self.hosts[user.host.battleID]
                    del self.hosts_open[user.host.battleID]
                except:
                    pass
            try:
                del self.users[userName]
            except ValueError:
                logger.exception("Bad format, commandstr: '%s'",
                                 repr(commandstr))
                return
            except KeyError:
                logger.exception(
                    "Exception in REMOVEUSER: userName '%s' not in self.users?",
                    userName)
                return
        elif commandstr.startswith("UPDATEBATTLEINFO"):
            # http://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#UPDATEBATTLEINFO:server
            # UPDATEBATTLEINFO battleID spectatorCount locked mapHash {mapName}
            try:
                battleID, spectatorCount, locked, mapHash = commandstr.split(
                )[1:5]
                mapName = " ".join(commandstr.split()[5:])
            except ValueError:
                logger.exception("Bad format, commandstr: '%s'",
                                 repr(commandstr))
                return
            try:
                host = self.hosts[battleID]
            except KeyError:
                logger.exception(
                    "Exception in UPDATEBATTLEINFO: battleID '%s' not in self.hosts?",
                    battleID)
                return
            host.spec_count = int(spectatorCount)
            self.hosts[battleID].set_player_count()
            host.locked = bool(locked)
            host.mapHash = mapHash
            self.map = mapName
        else:
            # ignore all other commands
            pass