Ejemplo n.º 1
0
 async def run(self):
     while True:
         try:
             self.lastTemp = await asyncio.get_event_loop().run_in_executor(None, self.readTemp) + self.offset
             notify(Event(source=self.name, endpoint='temperature', data=self.lastTemp))
         except RuntimeError as e:
             logger.debug(str(e))
         await asyncio.sleep(self.pollInterval)
Ejemplo n.º 2
0
    async def post_handler(self, request):
        try:
            data = await request.json()
            self.last_temperature = data['temperature']
            for key, value in data.items():
                notify(Event(source=self.name, endpoint=key, data=value))

            return web.Response(text="Thank you")
        except json.JSONDecodeError as e:
            logger.warning('Malformed JSON received from iSpindel %s: %s' %
                           (self.name, str(e)))
            raise web.HTTPBadRequest(reason='Malformed JSON %s' % str(e))
Ejemplo n.º 3
0
 async def run(self):
     while True:
         (temp, gravity) = await asyncio.get_event_loop().run_in_executor(
             None, self.monitor_tilt)
         self.lastTemp = temp
         notify(Event(source=self.name, endpoint='temperature', data=temp))
         notify(
             Event(source=self.name,
                   endpoint='gravity',
                   data=gravity / 1000.0))
         notify(
             Event(source=self.name,
                   endpoint='brix',
                   data=to_brix(gravity / 1000.0)))
Ejemplo n.º 4
0
Archivo: dv.py Proyecto: wehu/pydv
def main():

    global server_p

    # parsing arguments
    (opts, args) = args_parse()

    in_q = Queue()
    out_q = Queue()

    logger.info('running dv.py')
    # start agent server
    #loop = asyncio.get_event_loop()
    server_p = Process(target=start_agent_server,
                       args=(
                           in_q,
                           out_q,
                           path.abspath(opts.out_dir),
                           opts.verbose,
                       ))
    #server_p = Thread(target=start_agent_server, args=(loop, in_q, out_q,))
    server_p.start()

    try:
        # waiting for server started
        host, port = in_q.get()

        #logger.info("agent server started on {}:{}".format(host, port))

        # set gcf engine
        if opts.gcf == 'local':
            GCFEngine.set_imp(
                Local(host, port, path.abspath(opts.out_dir), opts.verbose))
        else:
            if opts.gcf == 'lsf':
                GCFEngine.set_imp(
                    LSF(host, port, path.abspath(opts.out_dir), opts.verbose))
            else:
                raise Exception('unsupported gcf engine {}'.format(opts.gcf))

        # config job engine
        JobEngine.connect(in_q, out_q)
        JobEngine.out_dir = path.abspath(opts.out_dir)
        logger.info('max agents = {}'.format(opts.max_agents))
        JobEngine.max_cmds = opts.max_agents

        # load files
        require('loader')
        if opts.patchfile:
            for f in opts.patchfile:
                require(f)

        # evaluate experssions
        @visitor
        def top():
            @join
            def body(self):
                if opts.expr:
                    for e in opts.expr:

                        @spawn(self)
                        def body(ee=e):
                            res = eval(ee, get_ns(), get_ns())
                            if type(res) == GeneratorType:
                                yield from res
                            return res

                if opts.test:

                    @spawn(self)
                    def body():
                        res = run_test(*opts.test,
                                       action=opts.action,
                                       where=opts.where)
                        if type(res) == GeneratorType:
                            yield from res
                        return res

            yield from body()

        # run
        while True:
            JobEngine.run()
            Scheduler.run()
            if JobEngine.is_waiting() or Scheduler.is_waiting():
                next
            else:
                break
        for t in Test.test_status:
            if Test.test_status[t] == 'passed':
                logger.info("*** test '{}' passed".format(t))
            else:
                logger.error("*** test '{}' failed".format(t))
        if top.exception:

            def print_exception(e, indent=0):
                if isinstance(e, Exception):
                    for l in extract_tb(e.__traceback__):
                        logger.debug((" " * indent) + str(l))
                if not isinstance(e, Exception):
                    logger.error((" " * indent) + str(e))
                    return
                for i in e.args:
                    if not isinstance(i, list):
                        i = [i]
                    for j in i:
                        print_exception(j, indent + 2)

            print_exception(top.exception)
            logger.error('dv.py failed')
            #raise top.exception
        else:
            logger.info('dv.py passed')
    finally:
        event.notify('dvpy_done')
        cleanup()
Ejemplo n.º 5
0
 def writeRequest(self, pin, params):
     notify(
         Event(source=self.name,
               endpoint='v%d' % pin,
               data=float(params.pop(0))))
Ejemplo n.º 6
0
 def enabled(self, state):
     self._enabled = state
     if not self._enabled:
         self.actor.updatePower(0.0)
     event.notify(event.Event(source=self.name, endpoint='enabled', data=self.enabled))
Ejemplo n.º 7
0
 def setSetpoint(self, setpoint):
     self.targetTemp = setpoint
     event.notify(event.Event(source=self.name, endpoint='setpoint', data=self.targetTemp))
Ejemplo n.º 8
0
 async def handler(self, name, request):
     stuff = await request.json()
     notify(Event(source=self.name, endpoint=name, data=stuff))
     return web.json_response(stuff)
Ejemplo n.º 9
0
 def updatePower(self, power):
     self.power = power
     notify(Event(source=self.name, endpoint='power', data=self.power))
     logger.debug("%s: Setting power to %f" % (self.name, self.power))
Ejemplo n.º 10
0
 def updatePower(self, power):
     self.power = power
     notify(Event(source=self.name, endpoint='power', data=power))
Ejemplo n.º 11
0
 async def readTemp(self):
     await asyncio.sleep(2)
     temp = normalvariate(self.fakeTemp, 0.5)
     notify(Event(source=self.name, endpoint='temperature', data=temp))
     return temp
Ejemplo n.º 12
0
 def updatePower(self, power):
     self.power = power
     self.p.ChangeDutyCycle(self.power)
     notify(Event(source=self.name, endpoint='power', data=power))
Ejemplo n.º 13
0
Archivo: dv.py Proyecto: wehu/pydv
def main():

    global server_p

    # parsing arguments
    (opts, args) = args_parse()

    in_q  = Queue()
    out_q = Queue()

    logger.info('running dv.py')
    # start agent server
    #loop = asyncio.get_event_loop()
    server_p = Process(target=start_agent_server, args=(in_q, out_q, path.abspath(opts.out_dir), opts.verbose,))
    #server_p = Thread(target=start_agent_server, args=(loop, in_q, out_q,))
    server_p.start()

    try:
        # waiting for server started
        host, port = in_q.get()

        #logger.info("agent server started on {}:{}".format(host, port))

        # set gcf engine    
        if opts.gcf == 'local':
            GCFEngine.set_imp(Local(host, port, path.abspath(opts.out_dir), opts.verbose))
        else:
            if opts.gcf == 'lsf':
                GCFEngine.set_imp(LSF(host, port, path.abspath(opts.out_dir), opts.verbose))
            else:
                raise Exception('unsupported gcf engine {}'.format(opts.gcf))
    
        # config job engine
        JobEngine.connect(in_q, out_q)
        JobEngine.out_dir = path.abspath(opts.out_dir)
        logger.info('max agents = {}'.format(opts.max_agents))
        JobEngine.max_cmds = opts.max_agents

        # load files
        require('loader')
        if opts.patchfile:
            for f in opts.patchfile:
                require(f)

        # evaluate experssions
        @visitor
        def top():
            @join
            def body(self):
                if opts.expr:
                    for e in opts.expr:
                        @spawn(self)
                        def body(ee=e):
                            res = eval(ee, get_ns(), get_ns())
                            if type(res) == GeneratorType:
                                yield from res
                            return res
                if opts.test:
                    @spawn(self)
                    def body():
                        res = run_test(*opts.test, action=opts.action, where=opts.where)
                        if type(res) == GeneratorType:
                            yield from res
                        return res
            yield from body()

        # run
        while True:
            JobEngine.run()
            Scheduler.run()
            if JobEngine.is_waiting() or Scheduler.is_waiting():
                next
            else:
                break
        for t in Test.test_status:
            if Test.test_status[t] == 'passed':
                logger.info("*** test '{}' passed".format(t))
            else:
                logger.error("*** test '{}' failed".format(t))
        if top.exception:
            def print_exception(e, indent=0):
                if isinstance(e, Exception):
                    for l in extract_tb(e.__traceback__):
                        logger.debug((" "*indent)+str(l))
                if not isinstance(e, Exception):
                    logger.error((" "*indent)+str(e))
                    return
                for i in e.args:
                    if not isinstance(i, list):
                        i = [i]
                    for j in i:
                        print_exception(j, indent+2)
            print_exception(top.exception)
            logger.error('dv.py failed')
            #raise top.exception
        else:
            logger.info('dv.py passed')
    finally:
        event.notify('dvpy_done')
        cleanup()