Actually run the storm query, updating the appropriate statistics and results

async def _runJob(self, user, appt):
        '''
        Actually run the storm query, updating the appropriate statistics and results
        '''
        count = 0
        appt.isrunning = True
        appt.laststarttime = time.time()
        appt.startcount += 1
        await self._storeAppt(appt)

        with s_provenance.claim('cron', iden=appt.iden):
            logger.info('Agenda executing for iden=%s, user=%s, query={%s}', appt.iden, user.name, appt.query)
            starttime = time.time()
            try:
                async for _ in self.core.eval(appt.query, user=user):  # NOQA
                    count += 1
            except asyncio.CancelledError:
                result = 'cancelled'
                raise
            except Exception as e:
                result = f'raised exception {e}'
                logger.exception('Agenda job %s raised exception', appt.iden)
            else:
                result = f'finished successfully with {count} nodes'
            finally:
                finishtime = time.time()
                logger.info('Agenda completed query for iden=%s with result "%s" took %0.3fs',
                            appt.iden, result, finishtime - starttime)
                appt.lastfinishtime = finishtime
                appt.isrunning = False
                appt.lastresult = result
                if not self.isfini:
                    await self._storeAppt(appt)