コード例 #1
0
ファイル: mapper.py プロジェクト: virtdev/virtdev
 def _update_finders(self):
     while True:
         try:
             time.sleep(WAIT_TIME)
             self._do_update_finders()
         except:
             log_err(self, 'failed to update finders')
コード例 #2
0
def test():
    log_debug('install', 'start testing ')
    login_cnt = 0
    install_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        username = USER + str(USER_START + i)
        uid, key = login(username, PASSWORD)
        if not uid or not key:
            log_err('install->login', 'failed to login %s.' % str(username))
            return False
        login_cnt += 1
        log_debug('install->login', 'login_cnt=%d' % login_cnt)
        if SHOW_TIME:
            log_debug('install->login',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
            start_time = datetime.utcnow()

        if RANDOM_DRIVER:
            driver_num = randint(40, DRIVER_NUM)
            package = DRIVER_PACKAGE + str(driver_num)
        else:
            package = DRIVER_PACKAGE + str(DRIVER_START + i)

        if not install_driver(uid, package, VERSION):
            log_err('instll', 'failed to install driver %s' % str(package))
            return False
        if SHOW_TIME:
            log_debug('install',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        install_cnt += 1
        log_debug('install', 'install_cnt=%d' % install_cnt)
コード例 #3
0
ファイル: device.py プロジェクト: virtdev/virtdev
 def put(self, uid, name, buf):
     self._log('device->put, name=%s' % str(name))
     if len(buf) >= RECORD_LEN:
         log_err(self, 'failed to put, name=%s' % str(name))
         return
     try:
         fields = ast.literal_eval(buf)
         if type(fields) != dict:
             log_err(self, 'failed to put, name=%s' % str(name))
             return
     except:
         log_err(self, 'failed to put, name=%s' % str(name))
         return
     record = json.dumps(fields)
     if len(record) >= RECORD_LEN:
         log_err(self, 'failed to put, name=%s' % str(name))
         return
     path = get_mnt_path(uid, name)
     fd = os.open(path, os.O_CREAT | os.O_WRONLY | os.O_TRUNC)
     try:
         os.write(fd, str(record))
     except:
         log_err(self, 'failed to put, cannot write, name=%s' % str(name))
         return
     finally:
         os.close(fd)
     if HISTORY:
         self._query.history.put(uid, name, **fields)
     self._query.event.put(uid, name)
     self._log('device->put, name=%s, finished' % str(name))
     return True
コード例 #4
0
ファイル: mapper.py プロジェクト: virtdev/virtdev
 def __init__(self, domain):
     if domain != DOMAIN_USR and domain != DOMAIN_DEV:
         log_err(self, 'invalid domain')
         raise Exception(log_get(self, 'invalid domain'))
     self._mapper = MapperServer(domain)
     self._domain = domain
     Thread.__init__(self)
コード例 #5
0
ファイル: cache.py プロジェクト: virtdev/virtdev
 def delete(self, key):
     addr = self._get_addr(key)
     try:
         cli = memcache.Client([addr], debug=0)
         cli.delete(key)
     except:
         log_err(self, 'failed to delete, key=%s' % key)
コード例 #6
0
ファイル: channel.py プロジェクト: virtdev/virtdev
 def _request(self, op, args, event=None, timeout=None):
     if not args:
         log_debug(self, 'failed to request, no arguments')
         return
     ev = None
     if event:
         ev = self._channel_event.get(event['ev_type'], event['ev_name'])
         if not ev:
             log_err(self, 'failed to get event')
             return
     ret = None
     try:
         cli = zerorpc.Client()
         cli.connect(zmqaddr(ADAPTER_ADDR, ADAPTER_PORT))
         try:
             cli.request(op, args);
         finally:
             cli.close()
         if event:
             if not timeout:
                 timeout = EV_TIMEOUT[event['ev_type']]
             ret = self._channel_event.wait(ev, timeout)
     finally:
         if event:
             err = self._channel_event.put(event['ev_type'], event['ev_name'])
             if err != None:
                 ret = err
     return ret
コード例 #7
0
ファイル: attr.py プロジェクト: virtdev/virtdev
 def initialize(self, uid, name, attr, val):
     if attr not in ATTRIBUTES:
         log_err(self, 'failed to initialize, invalid attribute %s, name=%s' % (str(attr), str(name)))
         raise Exception(log_get(self, 'failed to initialize'))
     if attr == ATTR_PROFILE:
         val = json.dumps(val)
     self._create_attr(uid, name, attr, val)
コード例 #8
0
def install_driver(uid, package, version=None):
    driver_path = os.path.join(PATH_DRIVER, driver)
    if os.path.exists(driver_path):
        shutil.rmtree(driver_path)
    ret = install(uid, package, version, DRIVER)
    if not ret:
        log_err(
            'util', 'failed to install driver, uid=%s, driver=%s, version=%s' %
            (str(uid), str(driver), str(version)))
        return False
    dirname = tempfile.mkdtemp()
    try:
        buf = json.loads(zlib.decompress(ret))
        dep = buf['dep']
        if not _check_dep(dep):
            log_err(
                'util',
                'failed to install driver, invalid dependency, uid=%s, driver=%s, version=%s'
                % (str(uid), str(driver), str(version)))
            return False
        driver = buf['driver']
        if driver:
            src = os.path.join(dirname, 'driver')
            os.mkdir(src)
            filenames = driver.keys()
            for name in filenames:
                filepath = os.path.join(src, name)
                with open(filepath, 'wb') as f:
                    f.write(driver[name])
            shutil.copytree(src, driver_path)
    finally:
        shutil.rmtree(dirname)
    return True
コード例 #9
0
ファイル: getauthor.py プロジェクト: dpmtools/dpmtest
def test():
    log_debug('get_author', 'start testing ')
    auth_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        
        if RANDOM_PKG:
            cat_num = randint(0, len(CATEGORIES.keys()) - 1)
            cat_name = CATEGORIES.keys()[cat_num]
            pkg_num = randint(50, PKG_NUM)
            package = cat_name + '_' + PKG + str(pkg_num)
        else:
            package = PACKAGE + str(PKG_START + i)
        
        message = json.dumps({'op':'get_author', 'package':package})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_author' != result['op'] or package != result['package'] or not  result['data']:
            log_err('get_author', 'failed to get the author of %s ' % str(package))
            return False
        auth_cnt += 1
        log_debug('get_author', 'auth_cnt=%d' % auth_cnt)
        log_debug('get_author', 'the author of %s is %s' % (str(package), str(result['data'])))
        if SHOW_TIME:
            log_debug('get_author', 'time=%d sec' % (datetime.utcnow() - start_time).seconds)
コード例 #10
0
ファイル: util.py プロジェクト: tx626/dpm
def install_driver(uid, driver, version=None):
    driver_path = os.path.join(PATH_DRIVER, driver)
    if os.path.exists(driver_path):
        shutil.rmtree(driver_path)
    ret = install(uid, driver, version, DRIVER)
    if not ret:
        log_err(
            'util', 'failed to install driver, uid=%s, driver=%s, version=%s' %
            (str(uid), str(driver), str(version)))
        return False
    dirname = tempfile.mkdtemp()
    try:
        src = os.path.join(dirname, driver) + '.zip'
        with open(src, 'wb') as f:
            f.write(ret)
        dest = os.path.join(dirname, driver)
        unzip_file(src, dest)
        dep_path = os.path.join(dest, 'dep')
        if not _check_dep(dep_path):
            log_err(
                'util',
                'failed to install driver, invalid dependency, uid=%s, driver=%s, version=%s'
                % (str(uid), str(driver), str(version)))
            return False
        os.remove(dep_path)
        shutil.copytree(dest, driver_path)
    finally:
        shutil.rmtree(dirname)
    return True
コード例 #11
0
 def run(self):
     while True:
         try:
             sock = self._srv.accept()[0]
             Thread(target=self._proc, args=(sock, )).start()
         except:
             log_err(self, 'failed')
コード例 #12
0
ファイル: stub.py プロジェクト: virtdev/virtdev
    def _proc(self, cmd, buf):
        result = ''
        force = False
        if cmd == CMD_OPEN:
            result = self._driver.open()
        elif cmd == CMD_CLOSE:
            result = self._driver.close()
        elif cmd == CMD_GET:
            force = True
            ret = self._driver.get()
            if ret:
                result = ret
        elif cmd == CMD_PUT:
            force = True
            args, kwargs = self._check_args(buf)
            if args != None and kwargs != None:
                ret = self._driver.put(*args, **kwargs)
                if ret:
                    result = ret
        else:
            log_err(self, 'failed to process, invalid command, driver=%s, cmd=%s' % (str(self._driver), str(cmd)))

        if result or force:
            if result:
                self._log(cmd=cmd)
            self._put(result)
コード例 #13
0
ファイル: emitter.py プロジェクト: virtdev/virtdev
 def put(self, uid, name):
     try:
         addr = self._router.get(uid, DOMAIN_USR)
         if addr:
             self._put(addr, uid, name)
     except:
         log_err(self, 'failed to put')
コード例 #14
0
ファイル: install.py プロジェクト: tx626/dpmtest
def test():
    log_debug('install', 'start testing ')
    login_cnt = 0
    install_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        username = USER + str(USER_START + i)
        uid, key = login(username, PASSWORD)
        if not uid or not key:
            log_err('install->login', 'failed to login %s.' % str(username))
            return False
        login_cnt += 1
        log_debug('install->login', 'login_cnt=%d' % login_cnt)
        if SHOW_TIME:
            log_debug('install->login', 'time=%d sec' % (datetime.utcnow() - start_time).seconds)
            start_time = datetime.utcnow()
        
        if RANDOM_DRIVER:
            driver_num = randint(0, DRIVER_NUM - 1)
            package = DRIVER_PACKAGE + str(driver_num)
        else:
            package = DRIVER_PACKAGE + str(DRIVER_START + i)
        
        if not install_driver(uid, package, VERSION):
            log_err('instll', 'failed to install driver %s' % str(package))
            return False
        if SHOW_TIME:
            log_debug('install', 'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        install_cnt += 1
        log_debug('install', 'install_cnt=%d' % install_cnt)
コード例 #15
0
ファイル: login.py プロジェクト: dpmtools/dpmtest
def test():
    log_debug('login', 'start testing ')
    login_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        username = USER + str(USER_START + i)
        message = json.dumps({
            'op': 'login',
            'user': username,
            'password': PASSWORD
        })
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'login' != result['op'] or username != result[
                'user'] or not result['data']:
            log_err('login', 'failed to login %s.' % str(username))
            return False
        uid = result['data'][0]
        key = result['data'][1]
        if not uid or not key:
            log_err('login',
                    'failed to login %s, invalid uid or key.' % str(username))
            return False
        if SHOW_TIME:
            log_debug('login',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        login_cnt += 1
        log_debug('login', 'login_cnt=%d' % login_cnt)
コード例 #16
0
def get_md5(text):
    if type(text) == str or type(text) == unicode:
        tmp = hashlib.md5()
        tmp.update(text)
        return tmp.hexdigest()
    else:
        log_err('util', 'failed to get md5')
コード例 #17
0
ファイル: channel.py プロジェクト: virtdev/virtdev
 def _try_connect(self, addr, timeout=None):
     if not self._alloc.has_key(addr):
         log_err(self, 'failed to connect, no channel, addr=%s' % str(addr))
         raise Exception(log_get(self, 'failed to connect'))
     key = self._alloc[addr]['key']
     bridge = self._alloc[addr]['bridge']
     self._connect(addr, key, bridge, timeout=timeout, release=False)
コード例 #18
0
ファイル: cache.py プロジェクト: virtdev/virtdev
 def put(self, key, value):
     addr = self._get_addr(key)
     try:
         cli = memcache.Client([addr], debug=0)
         cli.set(key, value)
     except:
         log_err(self, 'failed to put, key=%s' % key)
コード例 #19
0
ファイル: getauthor.py プロジェクト: tx626/dpmtest
def test():
    log_debug('get_author', 'start testing ')
    auth_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        
        if RANDOM_PKG:
            cat_num = randint(0, len(CAT) - 1)
            cat_name = CAT[cat_num]
            pkg_num = randint(0, PKG_NUM - 1)
            package = cat_name + '_' + PKG + str(pkg_num)
        else:
            package = PACKAGE + str(PKG_START + i)
        
        message = json.dumps({'operator':'get_author', 'package':package})
        ws = create_connection("ws://%s:%d/" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_author' != result['operator'] or package != result['package'] or not  result['data']:
            log_err('get_author', 'failed to get the author of %s ' % str(package))
            return False
        auth_cnt += 1
        log_debug('get_author', 'auth_cnt=%d' % auth_cnt)
        log_debug('get_author', 'the author of %s is %s' % (str(package), str(result['data'])))
        if SHOW_TIME:
            log_debug('get_author', 'time=%d sec' % (datetime.utcnow() - start_time).seconds)
コード例 #20
0
ファイル: login.py プロジェクト: tx626/dpmtest
def test():
    log_debug('login', 'start testing ')
    login_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        username = USER + str(USER_START + i)
        message = json.dumps({'operator':'login', 'user':username, 'password':PASSWORD})
        ws = create_connection("ws://%s:%d/" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'login' != result['operator'] or username != result['user'] or not  result['data']:
            log_err('login', 'failed to login %s.' % str(username))
            return False
        uid = result['data'][0]
        key = result['data'][1]
        if not uid or not key:
            log_err('login', 'failed to login %s, invalid uid or key.' % str(username))
            return False
        if SHOW_TIME:
            log_debug('login', 'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        login_cnt += 1
        log_debug('login', 'login_cnt=%d' % login_cnt)
コード例 #21
0
def _check_dep(buf):
    if not buf:
        return

    dep = yaml.load(buf)
    if not dep:
        return

    cmds = []
    for i in dep:
        installer = dep[i].get('installer')
        if installer not in INSTALLERS:
            log_err('util', 'failed to check dependency, invalid installer')
            return
        cmd = '%s install %s' % (installer, i)
        version = dep[i].get('version')
        if version:
            if installer == APT:
                cmd += '=%s' % version
            elif installer == PIP:
                cmd += '==%s' % version
        cmds.append(cmd)

    for cmd in cmds:
        status, output = commands.getstatusoutput(cmd)
        if status != 0:
            log_err('util', 'failed to check dependency')
            return

    return True
コード例 #22
0
ファイル: util.py プロジェクト: tx626/dpm
def get_md5(text):
    if type(text) == str or type(text) == unicode:
        tmp = hashlib.md5()   
        tmp.update(text)
        return tmp.hexdigest()
    else:
        log_err('util', 'failed to get md5')
コード例 #23
0
ファイル: vdfs.py プロジェクト: virtdev/virtdev
 def release(self, path, fh):
     obj, uid, name = self._parse(path)
     if not obj:
         log_err(self, 'failed to release, no object, name=%s' % str(name))
         raise FuseOSError(EINVAL)
     self._do_release(path, fh, obj, uid, name)
     self._log('release, path=%s' % path)
コード例 #24
0
ファイル: vdfs.py プロジェクト: virtdev/virtdev
 def unlink(self, path):
     obj, uid, name = self._parse(path)
     if not obj:
         log_err(self, 'failed to unlink, no object, name=%s' % str(name))
         raise FuseOSError(EINVAL)
     self._do_unlink(obj, uid, name)
     obj.unlink(uid, name)
コード例 #25
0
ファイル: conductor.py プロジェクト: virtdev/virtdev
    def initialize(self, manager):
        key = manager.key
        uid = manager.uid
        addr = manager.addr
        token = manager.token

        if not key or not uid or not addr or not token:
            log_err(self, 'faild to initialize')
            raise Exception(log_get(self, 'failed to initialize'))

        self._keys = {}
        self._tokens = {}
        self._devices = {}
        self._event = Event()
        self._op = Operation(manager)

        if ASYNC:
            for _ in range(POOL_SIZE):
                self.add(ConductorQueue(self))

        self.uid = uid
        self.addr = addr
        self.token = token
        self.user = manager.user
        self.devices = manager.devices
        self.request = Request(uid, token)

        channel.create(uid, addr, key)
        self._ready = True
コード例 #26
0
ファイル: gettopdetails.py プロジェクト: tx626/dpmtest
def test():
    log_debug('register', 'start testing ')
    get_top_details_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        
        if RANDOM_CAT:
            cat_num = randint(0, len(CAT) - 1)
            cat_name = CAT[cat_num]
            if not CATEGORIES.has_key(cat_name):
                log_err('get_top_details', 'failed to get the top details, invalid category is %s' % str(cat_name))
                return False
            cate = CATEGORIES[cat_name]
        else:
            cate = CATEGORY
        
        message = json.dumps({'operator':'get_top_details', 'category':cate})
        ws = create_connection("ws://%s:%d/" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_top_details' != result['operator'] or cate != result['category']:
            log_err('get_top_details', 'failed to get the top packages details of %s' % str(cate))
            return False
        if SHOW_TIME:
            log_debug('register', 'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        ret = result['data']
        get_top_details_cnt += 1
        log_debug('get_top_details', 'get_top_details_cnt=%d' % get_top_details_cnt)
        log_debug('get_top_details', 'top details packages=%s' % str(ret))
コード例 #27
0
ファイル: distributor.py プロジェクト: virtdev/virtdev
    def run(self):
        self._log('start ...')
        liveness = PPP_HEARTBEAT_LIVENESS
        timeout = time.time() + PPP_HEARTBEAT_INTERVAL
        while True:
            sockets = dict(self._poller.poll(PPP_HEARTBEAT_INTERVAL * 1000))
            if sockets.get(self._socket) == POLLIN:
                frames = self._socket.recv_multipart()
                if not frames:
                    log_err(self, 'invalid request')
                    break
                if len(frames) == PPP_NR_FRAMES:
                    self._pool.apply_async(self._proc, args=(frames[PPP_FRAME_ID], frames[PPP_FRAME_SEQ], frames[PPP_FRAME_BUF]))
                elif len(frames) == 1 and frames[0] == PPP_HEARTBEAT:
                    liveness = PPP_HEARTBEAT_LIVENESS
                else:
                    log_err(self, "invalid request")
            else:
                liveness -= 1
                if liveness == 0:
                    time.sleep(random.randint(SLEEP_TIME / 2, SLEEP_TIME))
                    self._reset_sock()
                    liveness = PPP_HEARTBEAT_LIVENESS

            if time.time() > timeout:
                timeout = time.time() + PPP_HEARTBEAT_INTERVAL
                self._socket.send(PPP_HEARTBEAT)
コード例 #28
0
ファイル: remotedb.py プロジェクト: virtdev/virtdev
 def __init__(self, router, domain=None):
     if not router:
         log_err(self, 'failed to initialize')
         raise Exception(log_get(self, 'failed to initialize'))
     self._lock = Lock()
     self._router = router
     self._domain = domain
     self._collections = {}
コード例 #29
0
ファイル: vdfs.py プロジェクト: virtdev/virtdev
 def open(self, path, flags):
     obj, uid, name = self._parse(path)
     if not obj:
         log_err(self, 'failed to open, no object, name=%s' % str(name))
         raise FuseOSError(EINVAL)
     self._check_file(obj, name, flags=flags)
     self._log('open, path=%s' % path)
     return self._do_open(path, flags, obj, uid, name)
コード例 #30
0
ファイル: vdfs.py プロジェクト: virtdev/virtdev
 def create(self, path, mode):
     obj, uid, name = self._parse(path)
     if not obj:
         log_err(self, 'failed to create, no object, name=%s' % str(name))
         raise FuseOSError(EINVAL)
     self._check_file(obj, name, create=True)
     self._log('create, path=%s' % path)
     return self._do_create(path, obj, uid, name)
コード例 #31
0
ファイル: vdfs.py プロジェクト: virtdev/virtdev
 def getattr(self, path, fh=None):
     obj, uid, name = self._parse(path)
     if not name:
         return STAT_DIR
     if not obj:
         log_err(self, 'failed to getattr, no object, name=%s' % str(name))
         raise FuseOSError(EINVAL)
     return obj.getattr(uid, name)
コード例 #32
0
ファイル: distributor.py プロジェクト: virtdev/virtdev
 def _proc(self, identity, seq, buf):
     uid, token = self._get_token(buf)
     if not uid or not token:
         log_err(self, 'failed to process, cannot get token')
         return
     addr = self._get_worker(uid)
     ret = self._request(addr, uid=uid, token=token, buf=buf)
     self._reply(identity, seq, ret)
コード例 #33
0
ファイル: core.py プロジェクト: virtdev/virtdev
 def _proc(self, name, buf):
     try:
         if not self.has_handler(name):
             return self._handle(name, buf)
         else:
             return self.handle(name, buf)
     except:
         log_err(self, 'failed to process, name=%s' % name)
コード例 #34
0
ファイル: vdfs.py プロジェクト: virtdev/virtdev
 def _accept(self, path, target):
     if not self._shadow:
         return
     obj, _, name = self._parse(path)
     if not obj:
         log_err(self, 'failed to accept, no object, name=%s' % str(name))
         raise FuseOSError(EINVAL)
     self._manager.guest.accept(name, target)
コード例 #35
0
ファイル: entry.py プロジェクト: virtdev/virtdev
 def symlink(self, uid, name):
     child = self.child(name)
     parent = self.parent(name)
     if child == parent:
         log_err(self, 'failed to create symlink')
         raise FuseOSError(EINVAL)
     path = os.path.join(self.get_path(uid, parent), child)
     self._fs.touch(uid, path)
コード例 #36
0
ファイル: vrtx.py プロジェクト: virtdev/virtdev
    def initialize(self, uid, name, vrtx):
        if type(vrtx) != list:
            log_err(self, 'failed to initialize')
            raise FuseOSError(EINVAL)

        for i in vrtx:
            v = os.path.join(name, i)
            self.create(uid, v)
コード例 #37
0
ファイル: channel.py プロジェクト: virtdev/virtdev
 def allocate(self, addr, key, bridge):
     try:
         if self._alloc.has_key(addr):
             self._free(addr)
         self._alloc[addr] = {'key':key, 'bridge':bridge}
     except:
         log_err(self, 'failed to allocate')
         raise Exception(log_get(self, 'failed to allocate'))
コード例 #38
0
ファイル: stub.py プロジェクト: virtdev/virtdev
 def _create(self, cmd, buf):
     try:
         if cmd == CMD_MOUNT:
             result = self._driver.get_info()
             self._put(result, index=False)
             self._active = True
     except:
         log_err(self, 'failed to create, driver=%s, cmd=%s' % (str(self._driver), str(cmd)))
コード例 #39
0
def uninstall(uid, package, typ):
    addr = _get_frontend()
    rpcclient = RPCClient(addr, FRONTEND_PORT)
    ret = rpcclient.request('uninstall', uid=uid, package=package, typ=typ)
    if not ret:
        log_err(
            'util', 'failed to uninstall, uid=%s, package=%s, typ=%s' %
            (str(uid), str(package), str(typ)))
        return
    return ret
コード例 #40
0
ファイル: package.py プロジェクト: tx626/dpm
def unpack(buf):
    tmp = loads(buf)
    if type(tmp) != dict or not tmp.has_key('op') or not tmp.has_key(
            'args') or not tmp.has_key('kwargs'):
        log_err('package', 'failed to unpack, invalid type')
        return
    op = tmp['op']
    args = tmp['args']
    kwargs = tmp['kwargs']
    if type(op) != str or type(args) != list or type(kwargs) != dict:
        log_err('package', 'failed to unpack, invalid arguments')
        return
    return (op, args, kwargs)
コード例 #41
0
 def _proc(self, sock):
     try:
         req = recv_pkt(sock)
         if not req or type(req) != dict:
             log_err(self, 'failed to process, invalid request')
             return
         op = req.get('op')
         args = req.get('args')
         name = req.get('name')
         timeout = req.get('timeout')
         if not op or not name:
             log_err(self, 'failed to process, invalid request')
             return
         service = self._services.get(name)
         if not service:
             log_err(
                 self,
                 'failed to process, cannot find service %s' % str(name))
             return
         pool = ThreadPool(processes=1)
         result = pool.apply_async(service.proc, (op, args))
         pool.close()
         try:
             send_pkt(sock, result.get(timeout))
         except TimeoutError:
             log_err(self, 'timeout')
         finally:
             pool.join()
     finally:
         sock.close()
コード例 #42
0
ファイル: req.py プロジェクト: virthub/virthub
 def _request(self, *args):
     try:
         self._open()
         cmd = {
             'name': self._name,
             'op': self._op,
             'args': args,
             'timeout': self._timeout
         }
         self._send(cmd)
         return self._recv()
     except:
         log_err(self, 'failed')
     finally:
         self._close()
コード例 #43
0
def upload_package(buf, uid, package, version, typ, key):
    addr = _get_frontend()
    rpcclient = RPCClient(addr, FRONTEND_PORT, uid, key)
    ret = rpcclient.request('upload',
                            uid=uid,
                            package=package,
                            version=version,
                            buf=buf,
                            typ=typ)
    if ret:
        return True
    else:
        log_err(
            'util',
            'failed to upload, uid=%s, package=%s, version=%s, typ=%s' %
            (str(uid), str(package), str(version), str(typ)))
        return False
コード例 #44
0
def install(uid, package, version, typ):
    addr = _get_frontend()
    rpcclient = RPCClient(addr, FRONTEND_PORT)
    if typ == DRIVER:
        content = None
    ret = rpcclient.request('install',
                            uid=uid,
                            package=package,
                            version=version,
                            typ=typ,
                            content=content)
    if not ret:
        log_err(
            'util',
            'failed to install, uid=%s, package=%s, version=%s, typ=%s' %
            (str(uid), str(package), str(version), str(typ)))
        return
    return ret
コード例 #45
0
ファイル: register.py プロジェクト: dpmtools/dpmtest
def test():
    log_debug('register', 'start testing ')
    register_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        username = USER + str(USER_START + i)
        message = json.dumps({'op':'register', 'user':username, 'password':PASSWORD, 'email':EMAIL})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'register' != result['op'] or username != result['user'] or not  result['data']:
            log_err('register', 'failed to register %s.' % str(username))
            return False
        register_cnt += 1
        log_debug('register', 'register_cnt=%d' % register_cnt)
        if SHOW_TIME:
            log_debug('register', 'test, time=%d sec' % (datetime.utcnow() - start_time).seconds)
コード例 #46
0
def test():
    log_debug('get_categories', 'start testing ')
    cat_cnt = 0
    for _ in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        message = json.dumps({'op': 'get_categories'})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_categories' != result['op'] or not result['data']:
            log_err('get_categories', 'failed to get categories')
            return False
        cat_cnt += 1
        log_debug('get_categories', 'cat_cnt=%d' % cat_cnt)
        log_debug('get_categories', 'categories=%s' % str(result['data']))
        if SHOW_TIME:
            log_debug('get_categories',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
コード例 #47
0
ファイル: gettopdetails.py プロジェクト: dpmtools/dpmtest
def test():
    log_debug('get_top_details', 'start testing ')
    get_top_details_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()

        if RANDOM_CAT:
            cat_num = randint(0, len(CATEGORIES.keys()) - 1)
            cat_name = CATEGORIES.keys()[cat_num]
            if not CATEGORIES.has_key(cat_name):
                log_err(
                    'get_top_details',
                    'failed to get the top details, invalid category is %s' %
                    str(cat_name))
                return False
            cate = CATEGORIES[cat_name]
        else:
            cate = CATEGORY

        message = json.dumps({'op': 'get_top_details', 'category': cate})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_top_details' != result['op'] or cate != result[
                'category']:
            log_err('get_top_details',
                    'failed to get the top packages details of %s' % str(cate))
            return False
        if SHOW_TIME:
            log_debug('get_top_details',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        ret = result['data']
        get_top_details_cnt += 1
        log_debug('get_top_details',
                  'get_top_details_cnt=%d' % get_top_details_cnt)
        log_debug('get_top_details', 'top details packages=%s' % str(ret))
コード例 #48
0
ファイル: util.py プロジェクト: tx626/dpm
def upload(path, uid, package, version, typ, key):
    zipfilename = get_filename(package, version)
    zipfilepath = os.path.join('/tmp', zipfilename)
    zip_dir(path, zipfilepath)
    with open(zipfilepath) as f:
        buf = f.read()
    os.remove(zipfilepath)
    addr = _get_frontend()
    rpcclient = RPCClient(addr, FRONTEND_PORT, uid, key)
    ret = rpcclient.request('upload',
                            uid=uid,
                            package=package,
                            version=version,
                            buf=buf,
                            typ=typ)
    if ret:
        return True
    else:
        log_err(
            'util',
            'failed to upload, uid=%s, package=%s, version=%s, typ=%s' %
            (str(uid), str(package), str(version), str(typ)))
        return False
コード例 #49
0
def test():
    log_debug('upload', 'start testing ')
    login_cnt = 0
    upload_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        username = USER + str(USER_START + i)
        uid, key = login(username, PASSWORD)
        if not uid or not key:
            log_err('upload->login', 'failed to login %s.' % str(username))
            return False
        login_cnt += 1
        log_debug('upload->login', 'login_cnt=%d' % login_cnt)

        package = DRIVER_PACKAGE + str(DRIVER_START + i)
        if not upload(DRIVER_PATH, uid, package, VERSION, DRIVER, key):
            log_err('upload', 'failed to upload driver %s' % str(package))
            return False
        if SHOW_TIME:
            log_debug('upload',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        upload_cnt += 1
        log_debug('upload', 'upload_cnt=%d' % upload_cnt)
コード例 #50
0
 def proc(self, op, args):
     try:
         if op[0] == '_':
             log_err(self, 'invalid operation %s' % op)
             return
         func = getattr(self, op)
         if not func:
             log_err(self, 'invalid operation %s' % op)
             return
         return func(*args)
     except:
         log_err(self, 'failed to process %s' % op)
コード例 #51
0
def test():
    log_debug('get_counter', 'start testing ')
    get_count = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()

        if RANDOM_CAT:
            cat_num = randint(0, len(CATEGORIES.keys()) - 1)
            cat_name = CATEGORIES.keys()[cat_num]
            if not CATEGORIES.has_key(cat_name):
                log_err(
                    'get_counter',
                    'failed to get the category, invalid category is %s' %
                    str(cat_name))
                return False
            cate = CATEGORIES[cat_name]
        else:
            cate = CATEGORY

        message = json.dumps({'op': 'get_counter', 'category': cate})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_counter' != result['op'] or cate != result[
                'category'] or not result['data']:
            log_err('get_counter', 'failed to get counter')
            return False
        counter = result['data']
        if not counter:
            log_err('get_counter',
                    'failed to get the total number of %s ' % str(cate))
            return False
        get_count += 1
        log_debug('get_inst', 'get_count=%d' % get_count)
        if SHOW_TIME:
            log_debug('get_counter',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        log_debug('get_counter', 'counter=%s' % str(counter))
        if int(counter) < 1:
            rank = 0
        else:
            rank = randint(0, (int(counter) + PAGE_SIZE - 1) / PAGE_SIZE - 1)
        log_debug('get_counter', 'rank=%d' % rank)
コード例 #52
0
def test():
    log_debug('get_installed_packages', 'start testing ')
    login_cnt = 0
    get_inst_pkgs_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        username = USER + str(USER_START + i)
        message = json.dumps({'op':'login', 'user':username, 'password':PASSWORD})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'login' != result['op'] or username != result['user'] or not  result['data']:
            log_err('get_installed_packages->login', 'failed to login %s.' % str(username))
            return False
        uid = result['data'][0]
        if not uid:
            log_err('get_installed_packages->login', 'failed to login %s, invalid uid.' % str(username))
            return False
        if SHOW_TIME:
            log_debug('get_installed_packages->login', 'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        login_cnt += 1
        log_debug('get_installed_packages->login', 'login_cnt=%d' % login_cnt)
        
        if SHOW_TIME:
            start_time = datetime.utcnow()
        message = json.dumps({'op':'get_installed_packages', 'uid':uid})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_installed_packages' != result['op'] or uid != result['uid']:
            log_err('get_installed_packages', 'failed to get installed packages')
            return False
        get_inst_pkgs_cnt += 1
        log_debug('get_installed_packages', 'get_inst_pkgs_cnt=%d' % get_inst_pkgs_cnt)
        log_debug('get_installer_packages', 'the packages of %s has installed are %s' % (str(username), str(result['data'])))
        if SHOW_TIME:
            log_debug('get_installed_packages', 'time=%d sec' % (datetime.utcnow() - start_time).seconds)
コード例 #53
0
ファイル: install.py プロジェクト: dpmtools/dpmtest
def test():
    log_debug('install', 'start testing ')
    login_cnt = 0
    install_cnt = 0
    get_top_cnt = 0
    has_pkg_cnt = 0
    download_cnt = 0
    get_top_details_cnt = 0

    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        username = USER + str(USER_START + i)
        message = json.dumps({
            'op': 'login',
            'user': username,
            'password': PASSWORD
        })
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'login' != result['op'] or username != result[
                'user'] or not result['data']:
            log_err('login', 'failed to login %s.' % str(username))
            return False
        uid = result['data'][0]
        key = result['data'][1]
        if not uid or not key:
            log_err('install->login',
                    'failed to login %s, invalid uid or key.' % str(username))
            return False
        if SHOW_TIME:
            log_debug('install->login',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        login_cnt += 1
        log_debug('install->login', 'login_cnt=%d' % login_cnt)

        if SHOW_TIME:
            start_time = datetime.utcnow()
        if RANDOM_PKG:
            cat_num = randint(0, len(CATEGORIES.keys()) - 1)
            cat_name = CATEGORIES.keys()[cat_num]
            pkg_num = randint(50, PKG_NUM)
            package = cat_name + '_' + PKG + str(pkg_num)
        else:
            package = PACKAGE + str(PKG_START + i)
        message = json.dumps({
            'op': 'download',
            'uid': uid,
            'package': package,
            'version': VERSION
        })
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        log_debug('download', 'result=%s' % result)
        if not result or 'download' != result['op'] or uid != result[
                'uid'] or not result['data']:
            log_err('download', 'failed to download app %s' % str(package))
            return False
        ret = result['data']
        if not ret:
            log_err(
                'download',
                'failed to download app %s, invalid return message' %
                str(package))
            return False
        download_cnt += 1
        log_debug('install', 'download_cnt=%d' % download_cnt)
        if SHOW_TIME:
            log_debug('download',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)

        if SHOW_TIME:
            start_time = datetime.utcnow()
        message = json.dumps({
            'op': 'install',
            'uid': uid,
            'package': package,
            'version': VERSION,
            'type': APP,
            'content': ret
        })
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'install' != result['op'] or uid != result[
                'uid'] or not result['data']:
            log_err('install', 'failed to install app %s' % str(package))
            return False
        ret = result['data']
        if not ret:
            log_err(
                'install', 'failed to install app %s, invalid return message' %
                str(package))
            return False
        install_cnt += 1
        log_debug('install', 'install_cnt=%d' % install_cnt)
        if SHOW_TIME:
            log_debug('install',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)

        if SHOW_TIME:
            start_time = datetime.utcnow()
        message = json.dumps({
            'op': 'has_package',
            'uid': uid,
            'package': package
        })
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'has_package' != result['op'] or package != result[
                'package'] or not result['data']:
            log_err('install-->has_package',
                    'failed to has app %s' % str(package))
            return False
        has_pkg_cnt += 1
        log_debug('has_package', 'has_pkg_cnt=%d' % has_pkg_cnt)
        if SHOW_TIME:
            log_debug('has_package',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)

        if not CATEGORIES.has_key(cat_name):
            log_err(
                'get_top', 'failed to get the top, invalid category is %s' %
                str(cat_name))
            return False
        cate = CATEGORIES[cat_name]

        message = json.dumps({'op': 'get_top', 'category': cate})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_top' != result['op'] or cate != result[
                'category']:
            log_err('get_top',
                    'failed to get the top packages of %s' % str(cate))
            return False
        ret = result['data']
        get_top_cnt += 1
        log_debug('get_top', 'get_top_cnt=%d' % get_top_cnt)
        log_debug('get_top', 'top packages=%s' % str(ret))

        message = json.dumps({'op': 'get_top_details', 'category': cate})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_top_details' != result['op'] or cate != result[
                'category']:
            log_err('get_top_details',
                    'failed to get the top packages details of %s' % str(cate))
            return False
        ret = result['data']
        get_top_details_cnt += 1
        log_debug('get_top_details',
                  'get_top_details_cnt=%d' % get_top_details_cnt)
        log_debug('get_top_details', 'top details packages=%s' % str(ret))
コード例 #54
0
ファイル: hb.py プロジェクト: virthub/virthub
 def add(self, name, addr):
     if self._nodes.has_key(name):
         log_err(self, 'cannot add again')
         raise Exception(log_get(self, 'cannot add again'))
     self._nodes.update({name: {'addr': addr, 'time': time.time()}})
コード例 #55
0
ファイル: util.py プロジェクト: tx626/dpm
def _check_dep(path):
    if os.path.isfile(path):
        with open(path) as file_dependency:
            lines = file_dependency.readlines()
            for line in lines:
                try:
                    package_version = ''
                    installer_name = ''
                    res = []

                    for str_equal in line.split('='):
                        if str_equal.strip():  # not blank
                            for str_blank in str_equal.split():
                                res.append(str_blank)

                    if len(res) % 2 == 0:
                        if len(res):
                            log_err(
                                'util',
                                'failed to check dependency, invalid format')
                            return False
                        continue  # if it is blank, then continue
                    else:
                        package_name = res[0]

                        for index_to_match in range(1, len(res), 2):
                            if res[index_to_match] == 'installer':
                                installer_name = res[index_to_match + 1]
                                continue
                            if res[index_to_match] == 'version':
                                package_version = res[index_to_match + 1]
                                continue

                        if installer_name == '':
                            installers = ['pip', 'apt-get']
                            for installer in installers:
                                installer_name = installer
                                if package_version == '':
                                    cmd = '%s install %s' % (
                                        str(installer_name), str(package_name))
                                else:
                                    cmd = '%s install %s==%s' % (
                                        str(installer_name), str(package_name),
                                        str(package_version))
                                status, output = commands.getstatusoutput(cmd)
                                if status == 0:
                                    log_debug(
                                        'util',
                                        'check dependency, finished installing %s'
                                        % package_name)
                                    break
                            if status != 0:
                                log_err(
                                    'util',
                                    'check dependency, invalid installer, failed to install %s'
                                    % str(package_name))
                                return False
                        else:
                            if package_version == '':
                                cmd = '%s install %s' % (str(installer_name),
                                                         str(package_name))
                            else:
                                cmd = '%s install %s==%s' % (
                                    str(installer_name), str(package_name),
                                    str(package_version))
                            status, output = commands.getstatusoutput(cmd)
                            if status == 0:
                                log_debug(
                                    'util',
                                    'check dependency, finished installing %s'
                                    % str(package_name))
                            else:
                                log_err(
                                    'util',
                                    'check dependency, failed to install %s' %
                                    str(package_name))
                                return False
                except:
                    continue  # if it is blank, continue. else return False
        return True
コード例 #56
0
def test():
    log_debug('upload', 'start testing ')
    login_cnt = 0
    upload_cnt = 0
    get_pkgs_details_cnt = 0
    for i in range(TEST_ROUNDS):
        if SHOW_TIME:
            start_time = datetime.utcnow()
        username = USER + str(USER_START + i)
        uid, key = login(username, PASSWORD)
        if not uid or not key:
            log_err('upload->login', 'failed to login %s.' % str(username))
            return False
        login_cnt += 1
        log_debug('upload->login', 'login_cnt=%d' % login_cnt)
        package = PACKAGE + str(50 + i)
        if not upload(PATH, uid, package, VERSION, APP, key):
            log_err('upload', 'failed to upload app %s' % str(package))
            return False
        if SHOW_TIME:
            log_debug('upload',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        upload_cnt += 1
        log_debug('upload', 'upload_cnt=%d' % upload_cnt)

        if SHOW_TIME:
            start_time = datetime.utcnow()
        message = json.dumps({'op': 'get_counter', 'category': CATEGORY})
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_counter' != result['op'] or CATEGORY != result[
                'category'] or not result['data']:
            log_err('get_counter', 'failed to get counter')
            return False
        counter = result['data']
        if not counter:
            log_err('get_counter',
                    'failed to get the total number of %s ' % str(CATEGORY))
            return False
        if SHOW_TIME:
            log_debug('get_counter',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        log_debug('get_counter', 'counter=%s' % str(counter))
        if int(counter) < 1:
            rank = 0
        else:
            rank = randint(0, (int(counter) + PAGE_SIZE - 1) / PAGE_SIZE - 1)
        log_debug('get_counter', 'rank=%d' % rank)

        if SHOW_TIME:
            start_time = datetime.utcnow()
        message = json.dumps({
            'op': 'get_packages_details',
            'category': CATEGORY,
            'rank': rank
        })
        ws = create_connection("ws://%s:%d/ws" % (get_manager(), get_port()))
        ws.send(message)
        ret = ws.recv()
        ws.close()
        result = json.loads(ret)
        if not result or 'get_packages_details' != result[
                'op'] or CATEGORY != result['category'] or rank != result[
                    'rank'] or not result['data']:
            log_err('get_packages_details', 'failed to get packages details')
            return False
        ret = result['data']
        for item in ret:
            if not item['pkg'] or not item['title'] or not item['auth']:
                log_err('get_packages_details', 'failed to get valid details')
                return False
        if SHOW_TIME:
            log_debug('get_packages_details',
                      'time=%d sec' % (datetime.utcnow() - start_time).seconds)
        get_pkgs_details_cnt += 1
        log_debug('get_packages_details',
                  'get_pkgs_details_cnt=%d' % get_pkgs_details_cnt)
        log_debug('get_packages_details', 'packages_details=%s' % str(ret))
コード例 #57
0
ファイル: util.py プロジェクト: tx626/dpm
def show_error(cls, text):
    log_err(cls.__class__.__name__, text)
コード例 #58
0
ファイル: package.py プロジェクト: tx626/dpm
def pack(op, args, kwargs):
    if type(op) != str or type(args) != tuple or type(kwargs) != dict:
        log_err('package', 'failed to pack, invalid type')
        return
    buf = {'op': op, 'args': args, 'kwargs': kwargs}
    return dumps(buf)