示例#1
0
    def run(self):
        while True:
            start_time = time.time()
            LOG.info('Start iteration')

            p = mp.Process(target=self.__call__, args=())
            p.start()
            p.join(300)
            if p.is_alive():
                LOG.error('Timeout. Terminating ...')
                try:
                    helper.kill_child(p.pid)
                    helper.kill(p.pid)
                except:
                    LOG.exception('Exception')
                p.terminate()

            LOG.info('Working time: %s' % (time.time() - start_time))

            if not CONFIG['interval']:
                break

            sleep_time = start_time + CONFIG['interval'] - time.time()
            if sleep_time > 0:
                time.sleep(sleep_time)
示例#2
0
文件: cron.py 项目: alisheikh/scalr
 def stop(self):
     LOG.debug('Stopping...')
     try:
         with file(self.pid_file, 'r') as pf:
             pid = int(pf.read().strip())
     except IOError:
         msg = "Can't open pid file %s. Stop failed" % self.pid_file
         LOG.error(msg)
         return
     try:
         helper.kill_child(pid)
         helper.kill(pid)
     except:
         LOG.error(helper.exc_info())
     LOG.info('Stopped')
示例#3
0
    def stop(self):
        LOG.info('Stop')
        if not self.pid_file:
            raise Exception("You must specify pid file")

        try:
            pf = file(self.pid_file, 'r')
            pid = int(pf.read().strip())
            pf.close()
        except IOError:
            LOG.error("Pid file %s dosn't exist" % self.pid_file)
            return
        except ValueError:
            LOG.error("Wrong value in pid file %s" % self.pid_file)
            self._delete_pid_file()
            return

        try:
            if helper.check_pid(self.pid_file):
                helper.kill_child(pid)
                helper.kill(pid)
        except:
            LOG.error(helper.exc_info())
示例#4
0
def main():
    sys.stderr.write("This script is deprecated. Instead use load_statistics.py\n\n")

    parser = argparse.ArgumentParser()

    group = parser.add_mutually_exclusive_group()
    group.add_argument('--start', action='store_true', default=False, help='start daemon')
    group.add_argument('--stop', action='store_true', default=False, help='stop daemon')
    group.add_argument('--restart', action='store_true', default=False, help='restart daemon')

    parser.add_argument('--no-daemon', action='store_true', default=None,
            help="Run in no daemon mode")
    parser.add_argument('--with-snmp', action='store_true', default=None,
            help="Use snmp")
    parser.add_argument('-i', '--interval', type=int, default=None,
            help="execution interval in seconds. Default is 0 - exec once")
    parser.add_argument('-p', '--pid-file', default=None, help="Pid file")
    parser.add_argument('-l', '--log-file', default=None, help="Log file")
    parser.add_argument('-m', '--metrics', default=None, choices=['cpu', 'la', 'mem', 'net'],
            action='append', help="metrics type for processing")
    parser.add_argument('-c', '--config-file', default='./config.yml', help='config file')
    parser.add_argument('-t', '--instances-connection-timeout', type=int, default=None,
            help='instances connection timeout')
    parser.add_argument('-v', '--verbosity', default=None, action='count',
            help='increase output verbosity [0:4]. Default is 1 - Error')
    parser.add_argument('--version', action='version', version='Version %s' % __version__)

    args = parser.parse_args()

    try:
        config = yaml.safe_load(open(args.config_file))['scalr']
        configure(args, config)
    except:
        if args.verbosity > 3:
            raise
        else:
            sys.stderr.write('%s\n' % helper.exc_info())
        sys.exit(1)

    try:
        socket.setdefaulttimeout(CONFIG['instances_connection_timeout'])
        daemon = StatsPoller()

        if args.start:
            LOG.info('Start')
            if helper.check_pid(CONFIG['pid_file']):
                LOG.info('Another copy of process already running. Exit')
                sys.exit(0)
            daemon.start(daemon= not args.no_daemon)
        elif args.stop:
            LOG.info('Stop')
            daemon.stop()
        elif args.restart:
            LOG.info('Restart')
            daemon.restart(daemon= not args.no_daemon)
        else:
            print 'Usage %s -h' % sys.argv[0]

        LOG.info('Exit')

    except KeyboardInterrupt:
        LOG.critical(helper.exc_info())
        helper.kill_child(mp.current_process().pid)
        sys.exit(0)
    except SystemExit:
        pass
    except Exception:
        LOG.critical('Something happened and I think I died')
        LOG.exception('Critical exception')
        sys.exit(1)
示例#5
0
def main():
    parser = argparse.ArgumentParser()
    group = parser.add_mutually_exclusive_group()
    group.add_argument('--start', action='store_true', default=False,
            help='start program')
    group.add_argument('--stop', action='store_true', default=False,
            help='stop program')
    parser.add_argument('--poller', action='store_true', default=None,
            help='poller mode')
    parser.add_argument('--plotter', action='store_true', default=None,
            help='plotter mode')
    parser.add_argument('--no-daemon', action='store_true', default=None,
            help="run in no daemon mode")
    parser.add_argument('--with-snmp', action='store_true', default=None,
            help="use snmp")
    parser.add_argument('-i', '--interval', type=int, default=None,
            help="execution interval in seconds. Default is 120")
    parser.add_argument('-p', '--pid-file', default=None,
            help="pid file")
    parser.add_argument('-l', '--log-file', default=None,
            help="log file")
    parser.add_argument('-m', '--metrics', default=None,
            choices=['cpu', 'la', 'mem', 'net', 'io', 'snum'], action='append',
            help="metrics type for processing")
    parser.add_argument('-c', '--config-file', default='./config.yml',
            help='config file')
    parser.add_argument('-v', '--verbosity', default=None, action='count',
            help='increase output verbosity [0:4]. Default is 1 - Error')
    parser.add_argument('--version', action='version', version='Version %s' % __version__)
    args = parser.parse_args()
    try:
        global SCALR_CONFIG
        SCALR_CONFIG = yaml.safe_load(open(args.config_file))['scalr']
        configure(args)
    except:
        if args.verbosity > 3:
            raise
        else:
            sys.stderr.write('%s\n' % helper.exc_info())
        sys.exit(1)
    try:
        socket.setdefaulttimeout(CONFIG['instances_connection_timeout'])
        app = LoadStatistics()
        if args.start:
            if helper.check_pid(CONFIG['pid_file']):
                msg = "Application with pid file '%s' already running. Exit" % CONFIG['pid_file']
                LOG.info(msg)
                sys.exit(0)
            if not args.no_daemon:
                helper.daemonize()
            app.start()
        elif args.stop:
            app.stop()
        else:
            print 'Usage %s -h' % sys.argv[0]
    except KeyboardInterrupt:
        sys.stdout.write('Keyboard interrupt\n')
        helper.kill_child(multiprocessing.current_process().pid)
        sys.exit(0)
    except SystemExit:
        pass
    except:
        LOG.exception('Something happened and I think I died')
        sys.exit(1)