Exemplo n.º 1
0
def configure(args):
    """
    Load CLI configuration
    :param args: args from files, launch vars, etc
    :return: Client API Object and Config values in array
    """
    config = Configuration()
    if args.get('config') != "~/.devo.json":
        config.load_json(args.get('config'), 'api')

    config.mix(dict(args))

    if "key" not in args.keys() and "api" not in args.keys() \
            and "token" not in args.keys():
        config.set("key", os.environ.get('DEVO_API_KEY', None))
        config.set("secret", os.environ.get('DEVO_API_SECRET', None))
        if "url" not in args.keys():
            config.set("url", os.environ.get('DEVO_API_URL', None))

    if not config.keys("key") and not config.keys("api") \
            and not config.keys("token") \
            and os.path.exists("~/.devo.json"):
        config.load_default_json('api')

    config.keys('from')
    config.keys('to')

    # Try to compose the api
    api = None
    try:
        api = Client.from_config(config.get())
    except DevoClientException as error:
        print_error(str(error), show_help=True)
    return api, config.get()
def lambda_handler(event, context):
    # Get the object from the event and show its content type
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
    try:
        print("File to process %s" % key)
        response = s3.get_object(Bucket=bucket, Key=key)
        body = response['Body']
        data = body.read()

        # If the name has a .gz extension, then decompress the data
        if key[-3:] == '.gz':
            data = zlib.decompress(data, 16 + zlib.MAX_WBITS)

        config = Configuration("config.json")
        con = Sender(config=config.get("sender"))

        # Send json events to Devo
        print("Starting to send lines to Devo")
        counter = 0
        for line in data.splitlines():
            events_json = json.loads(line)
            for single_event in events_json["Records"]:
                dumped_event = json.dumps(single_event)

                aws_account_id = "a"
                if single_event.get("getuserIdentity", None) is not None:
                    if single_event.get("getuserIdentity")\
                            .get("accountId", None) is not None:
                        aws_account_id = single_event["getuserIdentity"][
                            "accountId"]
                elif single_event.get("account", None) is not None:
                    aws_account_id = single_event["account"]
                elif single_event.get("recipientAccountId", None) is not None:
                    aws_account_id = single_event["recipientAccountId"]

                aws_region = "b"
                if single_event.get("awsRegion", None) is not None:
                    aws_region = single_event["awsRegion"]
                elif single_event.get("region", None) is not None:
                    aws_region = single_event["region"]

                tag = "{!s}.{!s}.{!s}".format(config.get("tag"),
                                              aws_account_id, aws_region)

                counter += con.send(tag=encode(tag),
                                    msg=encode(dumped_event),
                                    zip=False)
        con.close()
        print("Finished sending lines to Devo (%d)" % counter)

    except Exception as e:
        print(e)
        print("Error getting file '%s' from bucket '%s'. Make sure they \
        exist and your bucket is in the same region as this function." %
              (key, bucket))
Exemplo n.º 3
0
def init_conf(args):
    """ Generic configuration of CLI, from config file and cli arguments """
    config = Configuration()
    if args.get('config'):
        config.load_json(args.get('config'), 'sender')
    config.mix(dict(args))

    if "address" not in args.keys() and "url" in args.keys():
        config.set('address', args['url'])

    if "address" not in args.keys():
        address = os.environ.get('DEVO_SENDER_ADDRESS', None)
        if not address:
            address = os.environ.get('DEVO_SENDER_URL', None)

        config.set("address", address)
        config.set("port", os.environ.get('DEVO_SENDER_PORT', None))

    if config.get()['cert_reqs']:
        if "config" not in args.keys() and "key" not in args.keys() \
                and "cert" not in args.keys() and "chain" not in args.keys():
            config.set("key", os.environ.get('DEVO_SENDER_KEY', None))
            config.set("cert", os.environ.get('DEVO_SENDER_CERT', None))
            config.set("chain", os.environ.get('DEVO_SENDER_CHAIN', None))

        if not config.keys("key") and not config.keys("cert") and not \
                config.keys("chain") and os.path.exists("~/.devo.json"):
            config.load_default_json('api')

    config.keys('from')
    config.keys('to')

    return config
Exemplo n.º 4
0
def configure(args):
    """
    Load CLI configuration
    :param args: args from files, launch vars, etc
    :return: Client API Object and Config values in array
    """
    config = Configuration()
    try:
        if args.get('config'):
            config.load_config(args.get('config'), 'api')

        if args.get('env'):
            config.set("key", os.environ.get('DEVO_API_KEY', None))
            config.set("secret", os.environ.get('DEVO_API_SECRET', None))
            config.set("url", os.environ.get('DEVO_API_URL', None))
            config.set("user", os.environ.get('DEVO_API_USER', None))
            config.set("comment", os.environ.get('DEVO_API_COMMENT', None))

        if args.get('default'):
            config.load_default_config(section="api")
    finally:
        config.mix(dict(args))
        conf = config.get()

    # Try to compose the api
    api = None
    try:
        api = Client.from_config(conf)
    except DevoClientException as error:
        print_error(str(error), show_help=True)
    return api, conf
Exemplo n.º 5
0
def configure(args):
    """For load configuration file/object"""

    if args.get('config'):
        config = Configuration(args.get('config'))
        config.mix(dict(args))
    else:
        config = dict(args)

    if 'freq' in config.keys():
        parts = config['freq'].split('-')
        config['freq'] = (float(parts[0]), float(parts[1]))

    config['template'] = config['template'].read()

    # Initialize LtSender with the config credentials but only
    # if we aren't in batch mode or simulation mode
    engine = None
    if not (config['batch_mode'] or config['simulation']):
        try:
            if "sender" not in config.keys():
                config['sender'] = {
                    'key': config.get('key', None),
                    'chain': config.get('chain', None),
                    'cert': config.get('cert', None),
                    'address': config.get('address', None),
                    'port': config.get('port', 443)
                }

            engine = Sender(config=config.get('sender'))
        except Exception as error:
            print_error(error, show_help=False)
            print_error("Error when loading devo sender configuration",
                        show_help=True)
    return engine, config
Exemplo n.º 6
0
def lambda_handler(event, context):
    # Get the object from the event and show its content type
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
    try:
        print("File to process %s" % key)
        response = s3.get_object(Bucket=bucket, Key=key)
        body = response['Body']
        data = body.read()

        ###### START: From this point until END, you need to
        ###### carefully review the code to make sure all
        ###### variables match your environment.

        # If the name has a .gz extension, then decompress the data
        if key[-3:] == '.gz':
            data = zlib.decompress(data, 16 + zlib.MAX_WBITS)

        config = Configuration("config.json")
        con = Sender(config=config.get("sender"))

        # Send json events to Devo
        print("Starting to send lines to Devo")
        counter = 0
        for line in data.splitlines():
            events_json = json.loads(line)
            for single_event in events_json["Records"]:
                counter += con.send(tag=encode(config.get("tag")),
                                    msg=encode(json.dumps(single_event)),
                                    zip=False)
        con.close()
        print("Finished sending lines to Devo (%d)" % counter)
###### END of code containing key variables.
    except Exception as e:
        print(e)
        print("Error getting file '%s' from bucket '%s'. Make sure they \
        exist and your bucket is in the same region as this function." %
              (key, bucket))
Exemplo n.º 7
0
def configure(args):
    """For load configuration file/object"""

    if args.get('config'):
        config = Configuration(path=args.get('config'), section="faker")
        config.mix(dict(args))
    else:
        config = dict(args)

    if 'frequency' in config.keys() and isinstance(config.get("frequency"),
                                                   (str, bytes)):
        config['frequency'] = tuple(
            [float(x) for x in config.get("frequency").split("-")])

    config['template'] = config['template'].read()

    # Initialize devo.sender with the config credentials but only
    # if we aren't in batch mode or simulation mode
    engine = None
    if not (config['batch_mode'] or config['simulation']
            or config.get('file_name', None)):
        try:
            if "sender" not in config.keys():
                config['sender'] = {
                    'key': config.get('key', None),
                    'chain': config.get('chain', None),
                    'cert': config.get('cert', None),
                    'address': config.get('address', None),
                    'port': config.get('port', 443)
                }

            engine = Sender(config=config.get('sender'))
        except Exception as error:
            print_error(error, show_help=False)
            print_error("Error when loading devo sender configuration",
                        show_help=True)
    return engine, config
Exemplo n.º 8
0
 def test_add_key_chain(self):
     config = Configuration(self.config_path + ".yaml")
     config.set(["devo", "old", "name"], "logtrust")
     self.assertEqual(config["devo"]['old']['name'], "logtrust")
     self.assertEqual(config.get("devo", 'old', 'name'), "logtrust")
Exemplo n.º 9
0
 def test_get_keys_chain_in_array(self):
     config = Configuration(self.config_path + ".yaml")
     self.assertEqual(config.get(["devo", "die"]), "hard")