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)
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')
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())
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)
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)