コード例 #1
0
    def getDmonCore(self):
        '''
        Context manager to make a ram:/// cortex which has test models loaded into it and shared via daemon.

        Yields:
            s_cores_common.Cortex: A proxy object to the Ram backed cortex with test models.
        '''
        dmon = s_daemon.Daemon()
        core = s_cortex.openurl('ram:///')
        self.addTstForms(core)

        link = dmon.listen('tcp://127.0.0.1:0/')
        dmon.share('core00', core)
        port = link[1].get('port')
        prox = s_telepath.openurl('tcp://127.0.0.1/core00', port=port)

        s_scope.set('syn:test:link', link)
        s_scope.set('syn:cmd:core', prox)

        try:
            yield prox
        except:  # pragma: no cover
            raise
        finally:
            prox.fini()
            core.fini()
            dmon.fini()
コード例 #2
0
ファイル: test_lib_scope.py プロジェクト: wesinator/synapse
 async def test_lib_scope_task(self):
     s_scope.set('test:foo', 10)
     self.eq(s_scope.get('test:foo'), 10)
     self.eq(s_scope.pop('test:foo'), 10)
     self.none(s_scope.get('test:foo'))
     s_scope.update([('test:hehe', 1), ('test:haha', 'wow')])
     self.eq(s_scope.get('test:hehe'), 1)
     self.eq(s_scope.get('test:haha'), 'wow')
コード例 #3
0
ファイル: test_lib_scope.py プロジェクト: vivisect/synapse
 async def test_lib_scope_task(self):
     s_scope.set('test:foo', 10)
     self.eq(s_scope.get('test:foo'), 10)
     self.eq(s_scope.pop('test:foo'), 10)
     self.none(s_scope.get('test:foo'))
     s_scope.update([('test:hehe', 1), ('test:haha', 'wow')])
     self.eq(s_scope.get('test:hehe'), 1)
     self.eq(s_scope.get('test:haha'), 'wow')
コード例 #4
0
ファイル: db.py プロジェクト: thpatel/synapse
    def xact(self):

        xact = s_scope.get(self.iden)
        if xact is not None:
            return xact

        xact = self.dbque.get()
        s_scope.set(self.iden, xact)
        return xact
コード例 #5
0
ファイル: test_socket.py プロジェクト: dwinings/synapse
    def test_socket_glob_plex(self):
        plex0 = s_scope.get('plex')

        self.nn(plex0)

        with s_scope.enter():
            plex1 = s_socket.Plex()
            s_scope.set('plex', plex1)
            self.ne(id(plex0), id(s_scope.get('plex')))
            plex1.fini()

        self.eq(id(plex0), id(s_scope.get('plex')))
コード例 #6
0
    def getDirCore(self, conf=None):
        '''
        Context manager to make a dir:/// cortex which has test models
        loaded into it.

        Args:
            conf (dict): Optional cortex config

        Yields:
            s_cores_common.Cortex: Dir backed Cortex
        '''
        with self.getTestDir() as dirn:
            s_scope.set('dirn', dirn)
            with s_cortex.fromdir(dirn, conf=conf) as core:
                self.addTstForms(core)
                yield core
コード例 #7
0
ファイル: storm.py プロジェクト: mikemoritz/synapse
    async def _run(self):

        name = self.ddef.get('name', 'storm dmon')

        await self.core.boss.promote('storm:dmon',
                                     user=self.user.iden,
                                     info={
                                         'iden': self.iden,
                                         'name': name
                                     })

        s_scope.set('storm:dmon', self.iden)

        text = self.ddef.get('storm')
        opts = self.ddef.get('stormopts')

        dmoniden = self.ddef.get('iden')

        while not self.isfini:

            try:

                self.status = 'running'
                async with await self.core.snap(user=self.user) as snap:

                    async for nodepath in snap.storm(text,
                                                     opts=opts,
                                                     user=self.user):
                        # all storm tasks yield often to prevent latency
                        self.count += 1
                        await asyncio.sleep(0)

                    logger.warning(f'dmon query exited: {dmoniden}')

                    self.status = 'exited'
                    await self.waitfini(timeout=1)

            except asyncio.CancelledError as e:
                raise

            except Exception as e:
                logger.exception(f'dmon error ({self.iden}): {e}')
                self.status = f'error: {e}'
                await self.waitfini(timeout=1)
コード例 #8
0
ファイル: daemon.py プロジェクト: wesinator/synapse
    async def _onTaskV2Init(self, link, mesg):

        # t2:init is used by the pool sockets on the client

        name = mesg[1].get('name')
        sidn = mesg[1].get('sess')
        todo = mesg[1].get('todo')

        try:

            if sidn is None or todo is None:
                raise s_exc.NoSuchObj(name=name)

            sess = self.sessions.get(sidn)
            if sess is None:
                raise s_exc.NoSuchObj(name=name)

            item = sess.getSessItem(name)
            if item is None:
                raise s_exc.NoSuchObj(name=name)

            s_scope.set('sess', sess)
            s_scope.set('link', link)

            methname, args, kwargs = todo

            if methname[0] == '_':
                raise s_exc.NoSuchMeth(name=methname)

            meth = getattr(item, methname, None)
            if meth is None:
                logger.warning('%r has no method: %r', item, methname)
                raise s_exc.NoSuchMeth(name=methname)

            sessitem = await t2call(link, meth, args, kwargs)
            if sessitem is not None:
                sess.onfini(sessitem)

        except Exception as e:
            logger.exception('on t2:init: %r' % (mesg, ))
            if not link.isfini:
                retn = s_common.retnexc(e)
                await link.tx(('t2:fini', {'retn': retn}))
コード例 #9
0
def subtask(job):
    jid = job[0]

    slot = job[1].get('slot')

    meld = job[1].get('meld')
    if meld is not None:
        s_mindmeld.loadMindMeld(meld)

    hive = slot[1].get('hive')

    queen = s_telepath.openurl(job[1].get('queen'))

    s_scope.set('syn.queen', queen)

    try:
        dyntask = job[1].get('dyntask')
        ret = s_dyndeps.runDynTask(dyntask)

        queen.tell(hive, 'job:done', jid=jid, ret=ret)

    except Exception as e:
        queen.tell(hive, 'job:done', jid=jid, **s_common.excinfo(e))
コード例 #10
0
ファイル: daemon.py プロジェクト: rjammala/synapse
    async def _onTaskV2Init(self, link, mesg):

        # t2:init is used by the pool sockets on the client

        name = mesg[1].get('name')
        sidn = mesg[1].get('sess')
        todo = mesg[1].get('todo')

        try:

            if sidn is None or todo is None:
                raise s_exc.NoSuchObj(name=name)

            sess = self.sessions.get(sidn)
            if sess is None:
                raise s_exc.NoSuchObj(name=name)

            item = sess.getSessItem(name)
            if item is None:
                raise s_exc.NoSuchObj(name=name)

            s_scope.set('sess', sess)
            # TODO set user....

            methname, args, kwargs = todo

            if methname[0] == '_':
                raise s_exc.NoSuchMeth(name=methname)

            meth = getattr(item, methname, None)
            if meth is None:
                logger.warning(f'{item!r} has no method: {methname}')
                raise s_exc.NoSuchMeth(name=methname)

            valu = meth(*args, **kwargs)

            if s_coro.iscoro(valu):
                valu = await valu

            if isinstance(valu, types.AsyncGeneratorType):

                try:

                    await link.tx(('t2:genr', {}))

                    async for item in valu:
                        await link.tx(('t2:yield', {'retn': (True, item)}))

                    await link.tx(('t2:yield', {'retn': None}))

                except Exception as e:
                    if not link.isfini:
                        retn = s_common.retnexc(e)
                        await link.tx(('t2:yield', {'retn': retn}))

                return

            if isinstance(valu, types.GeneratorType):

                try:

                    await link.tx(('t2:genr', {}))

                    for item in valu:
                        await link.tx(('t2:yield', {'retn': (True, item)}))

                    await link.tx(('t2:yield', {'retn': None}))

                except Exception as e:
                    if not link.isfini:
                        retn = s_common.retnexc(e)
                        await link.tx(('t2:yield', {'retn': (False, retn)}))

                return

            if isinstance(valu, s_share.Share):
                iden = s_common.guid()
                sess.setSessItem(iden, valu)
                await link.tx(('t2:share', {'iden': iden}))
                return

            await link.tx(('t2:fini', {'retn': (True, valu)}))

        except Exception as e:

            logger.exception('on task:init: %r' % (mesg, ))

            if not link.isfini:
                retn = s_common.retnexc(e)
                await link.tx(('t2:fini', {'retn': retn}))
コード例 #11
0
ファイル: daemon.py プロジェクト: vivisect/synapse
    async def _onTaskV2Init(self, link, mesg):

        # t2:init is used by the pool sockets on the client

        name = mesg[1].get('name')
        sidn = mesg[1].get('sess')
        todo = mesg[1].get('todo')

        try:

            if sidn is None or todo is None:
                raise s_exc.NoSuchObj(name=name)

            sess = self.sessions.get(sidn)
            if sess is None:
                raise s_exc.NoSuchObj(name=name)

            item = sess.getSessItem(name)
            if item is None:
                raise s_exc.NoSuchObj(name=name)

            s_scope.set('sess', sess)
            # TODO set user....

            methname, args, kwargs = todo

            if methname[0] == '_':
                raise s_exc.NoSuchMeth(name=methname)

            meth = getattr(item, methname, None)
            if meth is None:
                logger.warning(f'{item!r} has no method: {methname}')
                raise s_exc.NoSuchMeth(name=methname)

            valu = meth(*args, **kwargs)

            if s_coro.iscoro(valu):
                valu = await valu

            try:
                if isinstance(valu, types.AsyncGeneratorType):
                    desc = 'async generator'

                    await link.tx(('t2:genr', {}))

                    async for item in valu:
                        await link.tx(('t2:yield', {'retn': (True, item)}))

                    await link.tx(('t2:yield', {'retn': None}))
                    return

                elif isinstance(valu, types.GeneratorType):
                    desc = 'generator'

                    await link.tx(('t2:genr', {}))

                    for item in valu:
                        await link.tx(('t2:yield', {'retn': (True, item)}))

                    await link.tx(('t2:yield', {'retn': None}))
                    return

            except Exception as e:
                logger.exception(f'error during {desc} task: {methname}')
                if not link.isfini:
                    retn = s_common.retnexc(e)
                    await link.tx(('t2:yield', {'retn': retn}))

                return

            if isinstance(valu, s_share.Share):
                sess.onfini(valu)
                iden = s_common.guid()
                sess.setSessItem(iden, valu)
                info = s_reflect.getShareInfo(valu)
                await link.tx(('t2:share', {'iden': iden, 'sharinfo': info}))
                return

            await link.tx(('t2:fini', {'retn': (True, valu)}))

        except Exception as e:

            logger.exception('on t2:init: %r' % (mesg,))

            if not link.isfini:
                retn = s_common.retnexc(e)
                await link.tx(('t2:fini', {'retn': retn}))
コード例 #12
0
    def getSslCore(self, conf=None, configure_roles=False):
        dconf = {
            'auth:admin': 'root@localhost',
            'auth:en': 1,
        }
        if conf:
            conf.update(dconf)
        conf = dconf

        amesgs = (
            ('auth:add:user', {
                'user': '******'
            }),
            ('auth:add:role', {
                'role': 'creator'
            }),
            ('auth:add:rrule', {
                'role': 'creator',
                'rule': ('node:add', {
                    'form': '*'
                })
            }),
            ('auth:add:rrule', {
                'role': 'creator',
                'rule': ('node:tag:add', {
                    'tag': '*'
                })
            }),
            ('auth:add:rrule', {
                'role': 'creator',
                'rule': ('node:prop:set', {
                    'form': '*',
                    'prop': '*'
                })
            }),
            ('auth:add:role', {
                'role': 'deleter'
            }),
            ('auth:add:rrule', {
                'role': 'deleter',
                'rule': ('node:del', {
                    'form': '*'
                })
            }),
            ('auth:add:rrule', {
                'role': 'deleter',
                'rule': ('node:del', {
                    'form': '*'
                })
            }),
            ('auth:add:rrule', {
                'role': 'deleter',
                'rule': ('node:tag:del', {
                    'tag': '*'
                })
            }),
            ('auth:add:rrule', {
                'role': 'deleter',
                'rule': ('node:prop:set', {
                    'form': '*',
                    'prop': '*'
                })
            }),
            ('auth:add:urole', {
                'user': '******',
                'role': 'creator'
            }),
            ('auth:add:urole', {
                'user': '******',
                'role': 'deleter'
            }),
        )

        with self.getDirCore(conf=conf) as core:
            s_scope.set('syn:core', core)
            dirn = s_scope.get('dirn')
            writeCerts(dirn)
            cafile = os.path.join(dirn, 'ca.crt')
            keyfile = os.path.join(dirn, 'server.key')
            certfile = os.path.join(dirn, 'server.crt')
            userkey = os.path.join(dirn, 'user.key')
            usercrt = os.path.join(dirn, 'user.crt')
            rootkey = os.path.join(dirn, 'root.key')
            rootcrt = os.path.join(dirn, 'root.crt')
            with s_daemon.Daemon() as dmon:
                s_scope.set('syn:dmon', dmon)
                dmon.share('core', core)
                link = dmon.listen(
                    'ssl://*****:*****@localhost/core'
                user_prox = s_telepath.openurl(
                    url,
                    port=port,
                    cafile=cafile,
                    keyfile=userkey,
                    certfile=usercrt)  # type: s_cores_common.CoreApi
                root_prox = s_telepath.openurl(
                    url,
                    port=port,
                    cafile=cafile,
                    keyfile=rootkey,
                    certfile=rootcrt)  # type: s_cores_common.CoreApi

                if configure_roles:
                    for mesg in amesgs:
                        isok, retn = root_prox.authReact(mesg)
                        s_common.reqok(isok, retn)

                try:
                    yield user_prox, root_prox
                finally:
                    user_prox.fini()
                    root_prox.fini()