def durationformat(value):
    duration = durations.Duration(value)
    seconds = int(duration.to_seconds())
    hours = seconds // (60*60)
    seconds -= 60*60*hours
    minutes = seconds // 60
    seconds -= 60*minutes
    return '{hours:d}h{minutes:02d}m{seconds:02d}s'.format(
        hours=hours, minutes=minutes, seconds=seconds)
    def convert(self, value, param, ctx) -> durations.Duration:
        if value is None:
            return value

        if isinstance(value, durations.Duration):
            return value

        try:
            return durations.Duration(value)
        except ValueError as e:
            self.fail(f'Could not parse "{value}" into duration ({e})', param, ctx)
示例#3
0
def handler(request, _):
    log.setLevel(os.getenv("LOG_LEVEL", "INFO"))
    dry_run = request.get("dry_run", False)
    older_than = durations.Duration(request.get("older_than", "2h"))
    mode = request.get("mode", "stop")

    operation[mode](
        ec2=boto3.client("ec2"),
        dry_run=dry_run,
        older_than=timedelta(seconds=older_than.seconds),
    )
示例#4
0
def handler(request, _):
    log.setLevel(os.getenv("LOG_LEVEL", "INFO"))

    if validate(request):
        dry_run = request.get("dry_run", False)
        older_than = durations.Duration(request.get("older_than"))
        mode = request.get("mode", "stop")
        tags = request.get("tags", [])
        tags = tuple(Tag.from_string(s) for s in request.get("tags", []))

        operation[mode](
            ec2=boto3.client("ec2"),
            dry_run=dry_run,
            older_than=timedelta(seconds=older_than.seconds),
            tags=tags,
        )
示例#5
0
 def __configureSettings(self, settings):
     newSettings = {
         "controlDelay": 5,
         "averagintTime": 5,
         "pollingTime": 1
     }
     for key, value in settings.items():
         asTime = False
         for substring in ["delay", "time"]:
             if substring in key.lower():
                 asTime = True
                 # parse as duration, then transform to durations
                 newSettings[key] = durations.Duration(
                     str(value)).to_seconds()
                 break
         if not asTime:
             newSettings[key] = value
     return newSettings
示例#6
0
    def convert(self, value, param, ctx) -> Optional[datetime]:
        if value is None:
            return value

        if isinstance(value, datetime):
            return self.to_utc(value)

        try:
            if isinstance(value, str) and value[0] in ["+", "-"]:
                duration = durations.Duration(value)
                now = datetime.now()
                st = now.replace(second=0, microsecond=0)
                st = self.to_utc(st + timedelta(seconds=duration.seconds))
            else:
                st = self.to_utc(parse(value))
            return st
        except ValueError as e:
            self.fail(f'Could not parse "{value}" into datetime ({e})', param, ctx)
示例#7
0
 def create_account(cli, account, use_ledger=False):
     if use_ledger:
         acct = cli.create_account_ledger(account["name"])
     else:
         acct = cli.create_account(account["name"])
     vesting = account.get("vesting")
     if not vesting:
         cli.add_genesis_account(acct["address"], account["coins"])
     else:
         genesis_time = isoparse(genesis["genesis_time"])
         end_time = genesis_time + datetime.timedelta(
             seconds=durations.Duration(vesting).to_seconds())
         vend = int(end_time.timestamp())
         cli.add_genesis_account(
             acct["address"],
             account["coins"],
             vesting_amount=account["coins"],
             vesting_end_time=vend,
         )
     return acct
示例#8
0
 def create_account(cli, account, use_ledger=False):
     if use_ledger:
         acct = cli.create_account_ledger(account["name"])
     else:
         acct = cli.create_account(account["name"])
     print(acct)
     vesting = account.get("vesting")
     if not vesting:
         cli.add_genesis_account(acct["address"], account["coins"])
     else:
         genesis_time = isoparse(genesis["genesis_time"])
         end_time = genesis_time + datetime.timedelta(
             seconds=durations.Duration(vesting).to_seconds())
         vend = end_time.replace(tzinfo=None).isoformat("T") + "Z"
         cli.add_genesis_account(
             acct["address"],
             account["coins"],
             vesting_amount=account["coins"],
             vesting_end_time=vend,
         )
     return acct
示例#9
0
def duration_checker(value) -> bool:
    """
    checks whether the `value` is a valid duration.

    >>> duration_checker({})
    False

    >>> duration_checker(1.0)
    False

    >>> duration_checker("2h")
    True

    >>> duration_checker("hundred days")
    False
    """
    try:
        if isinstance(value, str):
            durations.Duration(value)
            return True
    except durations.exceptions.InvalidTokenError as e:
        pass
    return False
 def age_to_months(t):
     t = t.replace('m', 'M')
     d = durations.Duration(t);
     return d.to_months()
     raise ValueError
 else:
     if (datetime.time(
             hour=int(_end_mins_and_secs[0]),
             minute=int(_end_mins_and_secs[1]))) < (datetime.time(
                 hour=current_time.hour,
                 minute=current_time.minute)) > (datetime.time(
                     hour=int(_start_mins_and_secs[0]),
                     minute=int(_start_mins_and_secs[1]))):
         for i in os.getenv("LIGHT_ID").split(","):
             HueOperations().turn_off_light(int(i))
         print(
             "End time has passed, Turning lights off. Lights wont be turned off if they are already off"
         )
         time.sleep(
             durations.Duration(
                 os.getenv("REFRESH_RATE")).to_seconds())
     else:
         now_time = parser.parse(
             str(TimeManagement().timezone_converter()[0]))
         nightscout_time = parser.parse(
             str(TimeManagement().timezone_converter()[1]))
         difference = now_time - nightscout_time
         if ((datetime.datetime.min +
              difference).time()) > datetime.time(minute=int(
                  os.getenv("NIGHTSCOUT_REALTIME_DIFFERENCE"))):
             print("Nightscout DELAY: Changing to {}".format(
                 str(os.getenv("NIGHSCOUT_DELAY_COLOR").title())))
             for i in os.getenv("LIGHT_ID").split(","):
                 HueOperations().change_1_light(
                     HueOperations().get_color("DELAY"), int(i))
             time.sleep(
示例#12
0
def init_cluster(
    data_dir,
    config,
    base_port,
    image=IMAGE,
    cmd=None,
    gen_compose_file=False,
):
    """
    init data directory
    """
    process_config(config, base_port)
    json.dump(config, (data_dir / "config.json").open("w"))
    cmd = cmd or CHAIN

    # init home directories
    for i, val in enumerate(config["validators"]):
        ChainCommand(cmd)(
            "init",
            val["moniker"],
            chain_id=config["chain_id"],
            home=home_dir(data_dir, i),
        )
    os.rename(data_dir / "node0/config/genesis.json",
              data_dir / "genesis.json")
    os.mkdir(data_dir / "gentx")
    for i in range(len(config["validators"])):
        try:
            (data_dir / f"node{i}/config/genesis.json").unlink()
        except OSError:
            pass
        (data_dir /
         f"node{i}/config/genesis.json").symlink_to("../../genesis.json")
        (data_dir / f"node{i}/config/gentx").symlink_to("../../gentx")

    # now we can create ClusterCLI
    cli = ClusterCLI(data_dir, cmd)

    # patch the genesis file
    genesis = jsonmerge.merge(
        json.load(open(data_dir / "genesis.json")),
        config.get("genesis", {}),
    )
    json.dump(genesis, open(data_dir / "genesis.json", "w"))
    cli.validate_genesis()

    # create accounts
    accounts = []
    for i, node in enumerate(config["validators"]):
        account = cli.create_account("validator", i)
        print(account)
        accounts.append(account)
        cli.add_genesis_account(account["address"], node["coins"], i)
        cli.gentx("validator", node["staked"], i)

    for account in config["accounts"]:
        acct = cli.create_account(account["name"])
        print(acct)
        accounts.append(acct)
        vesting = account.get("vesting")
        if not vesting:
            cli.add_genesis_account(acct["address"], account["coins"])
        else:
            genesis_time = isoparse(genesis["genesis_time"])
            end_time = genesis_time + datetime.timedelta(
                seconds=durations.Duration(vesting).to_seconds())
            vend = end_time.replace(tzinfo=None).isoformat("T") + "Z"
            cli.add_genesis_account(
                acct["address"],
                account["coins"],
                vesting_amount=account["coins"],
                vesting_end_time=vend,
            )
    # output accounts
    (data_dir / "accounts.txt").write_text("\n".join(
        str(account) for account in accounts))

    # collect-gentxs
    cli.collect_gentxs(data_dir / "gentx", i)

    # realise the symbolic links, so the node directories can be used independently
    genesis_bytes = (data_dir / "genesis.json").read_bytes()
    for i in range(len(config["validators"])):
        (data_dir / f"node{i}/config/gentx").unlink()
        tmp = data_dir / f"node{i}/config/genesis.json"
        tmp.unlink()
        tmp.write_bytes(genesis_bytes)

    # write tendermint config
    peers = ",".join([
        "tcp://%s@%s:%d" %
        (cli.node_id(i), val["hostname"], ports.p2p_port(val["base_port"]))
        for i, val in enumerate(config["validators"])
    ])
    for i, val in enumerate(config["validators"]):
        edit_tm_cfg(data_dir / f"node{i}/config/config.toml", val["base_port"],
                    peers)
        edit_app_cfg(data_dir / f"node{i}/config/app.toml", val["base_port"])

    # write supervisord config file
    write_ini(
        (data_dir / SUPERVISOR_CONFIG_FILE).open("w"),
        supervisord_ini(cmd, config["validators"]),
    )

    if gen_compose_file:
        yaml.dump(
            docker_compose_yml(cmd, config["validators"], data_dir, image),
            (data_dir / "docker-compose.yml").open("w"),
        )
     _start_mins_and_secs = [int(x) for x in os.getenv("START_TIME").split(":")]
 except ValueError:
     raise ValueError
 else:
     try:
         _end_mins_and_secs = [int(x) for x in os.getenv("END_TIME").split(":")]
     except ValueError:
         raise ValueError
     else:
         if (datetime.time(hour=int(_end_mins_and_secs[0]), minute=int(_end_mins_and_secs[1]))) < (
                 datetime.time(hour=current_time.hour, minute=current_time.minute)) > (
                 datetime.time(hour=int(_start_mins_and_secs[0]), minute=int(_start_mins_and_secs[1]))):
             for i in os.getenv("LIGHT_ID").split(","):
                 HueOperations().turn_off_light(int(i))
             print("End time has passed, Turning lights off. Lights wont be turned off if they are already off")
             time.sleep(durations.Duration(refresh).to_seconds())
         else:
             now_time = parser.parse(str(TimeManagement().timezone_converter()[0]))
             nightscout_time = parser.parse(str(TimeManagement().timezone_converter()[1]))
             difference_t = now_time - nightscout_time
             if ((datetime.datetime.min + difference_t).time()) > datetime.time(
                     minute=int(os.getenv("NIGHTSCOUT_REALTIME_DIFFERENCE"))):
                 print(
                     "Nightscout DELAY: Changing to {}".format(str(os.getenv("NIGHSCOUT_DELAY_COLOR").title())))
                 for i in os.getenv("LIGHT_ID").split(","):
                     HueOperations().change_1_light(HueOperations().get_color("DELAY"), int(i))
                 time.sleep(durations.Duration(refresh).to_seconds())
             else:
                 if TimeManagement().nightscout_json[0]["sgv"] in range(int(os.getenv("LOW_GLUCOSE_VALUE")), int(
                         os.getenv("HIGH_GLUCOSE_VALUE")) + 1):
                     for i in (os.getenv("LIGHT_ID").split(",")):