コード例 #1
0
ファイル: load_statistics.py プロジェクト: AnyBucket/scalr
 def run(self):
     plotter_ps = None
     if CONFIG['plotter']:
         plotter = Plotter()
         plotter_ps = multiprocessing.Process(target=plotter, args=())
         plotter_ps.start()
     if CONFIG['poller']:
         poller = Poller()
         while True:
             try:
                 start_time = time.time()
                 LOG.info('Start iteration')
                 poller_ps = multiprocessing.Process(target=poller, args=())
                 poller_ps.start()
                 poller_ps.join(CONFIG['interval'] * 2)
                 if poller_ps.is_alive():
                     LOG.error('Timeout. Terminating ...')
                     try:
                         helper.kill_ps(poller_ps.pid, child=True)
                     except:
                         LOG.error(sys.exc_info())
                     poller_ps.terminate()
                 LOG.info('Working time: %.2f' % (time.time() - start_time))
                 sleep_time = start_time + CONFIG['interval'] - time.time() - 0.1
                 if sleep_time > 0:
                     time.sleep(sleep_time)
             except KeyboardInterrupt:
                 raise
             except:
                 LOG.error(helper.exc_info())
     if plotter_ps:
         plotter_ps.join()
コード例 #2
0
ファイル: load_statistics.py プロジェクト: AsherBond/scalr
 def run(self):
     plotter_ps = None
     if CONFIG['plotter']:
         plotter = Plotter()
         plotter_ps = multiprocessing.Process(target=plotter, args=())
         plotter_ps.start()
     if CONFIG['poller']:
         poller = Poller()
         while True:
             try:
                 start_time = time.time()
                 LOG.info('Start iteration')
                 poller_ps = multiprocessing.Process(target=poller, args=())
                 poller_ps.start()
                 poller_ps.join(CONFIG['interval'] * 2)
                 if poller_ps.is_alive():
                     LOG.error('Timeout. Terminating ...')
                     try:
                         helper.kill_ps(poller_ps.pid, child=True)
                     except:
                         LOG.error(sys.exc_info())
                     poller_ps.terminate()
                 LOG.info('Working time: %.2f' % (time.time() - start_time))
                 sleep_time = start_time + CONFIG['interval'] - time.time(
                 ) - 0.1
                 if sleep_time > 0:
                     time.sleep(sleep_time)
             except KeyboardInterrupt:
                 raise
             except:
                 LOG.error(helper.exc_info())
     if plotter_ps:
         plotter_ps.join()
コード例 #3
0
ファイル: basedaemon.py プロジェクト: recipe/scalr
    def stop(self):
        LOG.info('Stop')
        if not self.pid_file:
            raise Exception("Can't stop, you must specify pid file")

        try:
            pf = file(self.pid_file, 'r')
            pid = int(pf.read().strip())
            pf.close()
        except IOError:
            pid = None
        except ValueError:
            pid = None
            os.remove(self.pid_file)

        if not pid:
            message = "Pid file %s does not exist"
            LOG.warning(message % self.pid_file)
            return

        try:
            helper.kill_ps(pid, child=True)
        except Exception:
            LOG.error(helper.exc_info())

        if os.path.exists(self.pid_file):
            os.remove(self.pid_file)
コード例 #4
0
ファイル: stats_poller.py プロジェクト: DicsyDel/scalr
    def run(self):
        while True:
            start_time = time.time()
            logger.info('Start time: %s' % time.ctime())

            p = mp.Process(target=self.__call__, args=())
            p.start()
            p.join(600)
            if p.is_alive():
                logger.error('Timeout. Terminating ...')
                helper.kill_ps(p.pid, child=True)
                p.terminate()

            logger.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)
コード例 #5
0
    def run(self):
        while True:
            start_time = time.time()
            logger.info('Start time: %s' % time.ctime())

            p = mp.Process(target=self.__call__, args=())
            p.start()
            p.join(600)
            if p.is_alive():
                logger.error('Timeout. Terminating ...')
                helper.kill_ps(p.pid, child=True)
                p.terminate()

            logger.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)
コード例 #6
0
ファイル: basedaemon.py プロジェクト: zentyal/scalr
    def stop(self):
        logger.debug('Stop')
        try:
            pf = file(self.pid_file, 'r')
            pid = int(pf.read().strip())
            pf.close()
        except IOError:
            pid = None
        except ValueError:
            pid = None
            os.remove(self.pid_file)

        if not pid:
            message = "Pid file %s does not exist"
            logger.critical(message % self.pid_file)
            return

        helper.kill_ps(pid, child=True)

        if os.path.exists(self.pid_file):
            os.remove(self.pid_file)
            self.running = False
コード例 #7
0
ファイル: basedaemon.py プロジェクト: rroyhere/scalr
    def stop(self):
        logger.debug("Stop")
        try:
            pf = file(self.pid_file, "r")
            pid = int(pf.read().strip())
            pf.close()
        except IOError:
            pid = None
        except ValueError:
            pid = None
            os.remove(self.pid_file)

        if not pid:
            message = "Pid file %s does not exist"
            logger.critical(message % self.pid_file)
            return

        helper.kill_ps(pid, child=True)

        if os.path.exists(self.pid_file):
            os.remove(self.pid_file)
            self.running = False
コード例 #8
0
ファイル: basedaemon.py プロジェクト: AsherBond/scalr
    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_ps(pid, child=True)
        except Exception:
            LOG.error(helper.exc_info())
コード例 #9
0
ファイル: basedaemon.py プロジェクト: AnyBucket/scalr
    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_ps(pid, child=True)
        except Exception:
            LOG.error(helper.exc_info())
コード例 #10
0
ファイル: stats_poller.py プロジェクト: AnyBucket/scalr
    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_ps(p.pid, child=True)
                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)
コード例 #11
0
ファイル: stats_poller.py プロジェクト: AsherBond/scalr
    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_ps(p.pid, child=True)
                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)
コード例 #12
0
ファイル: stats_poller.py プロジェクト: AnyBucket/scalr
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_ps(mp.current_process().pid, child=True)
        sys.exit(0)
    except SystemExit:
        pass
    except Exception:
        LOG.critical('Something happened and I think I died')
        LOG.exception('Critical exception')
        sys.exit(1)
コード例 #13
0
ファイル: load_statistics.py プロジェクト: AnyBucket/scalr
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:
        config = yaml.safe_load(open(args.config_file))['scalr']
        configure(config, 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'])
        daemon = LoadStatistics()
        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()
        else:
            print 'Please use %s -h' % sys.argv[0]
        LOG.info('Exit')
    except KeyboardInterrupt:
        sys.stdout.write('Keyboard interrupt\n')
        helper.kill_ps(multiprocessing.current_process().pid, child=True)
        sys.exit(0)
    except SystemExit:
        pass
    except Exception:
        LOG.exception('Something happened and I think I died')
        sys.exit(1)
コード例 #14
0
ファイル: load_statistics.py プロジェクト: AsherBond/scalr
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:
        config = yaml.safe_load(open(args.config_file))['scalr']
        configure(config, 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'])
        daemon = LoadStatistics()
        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()
        else:
            print 'Please use %s -h' % sys.argv[0]
        LOG.info('Exit')
    except KeyboardInterrupt:
        sys.stdout.write('Keyboard interrupt\n')
        helper.kill_ps(multiprocessing.current_process().pid, child=True)
        sys.exit(0)
    except SystemExit:
        pass
    except Exception:
        LOG.exception('Something happened and I think I died')
        sys.exit(1)
コード例 #15
0
ファイル: stats_poller.py プロジェクト: AsherBond/scalr
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_ps(mp.current_process().pid, child=True)
        sys.exit(0)
    except SystemExit:
        pass
    except Exception:
        LOG.critical('Something happened and I think I died')
        LOG.exception('Critical exception')
        sys.exit(1)