JSON based events router, inspired from an AWS Lambda project.
Project description
JSON Events Router
Uses simple yaml
based rules to take action on JSON
events. Uses jsonpath to scan the event message and regex
for includes
and excludes
conditionals.
Basic Usage
Simplest capture.
rules:
- name: notification
routers:
- name: slack
channel: my-channel
vars:
- name: type
jsonpath: $..Type
# include anything
includes: ['.*']
# exclude empty
excludes: ['^$']
message: |
This {type} just came in
Constants
You can define a constant var by providing value
field only
vars:
- name: my-constant
value: my constant value
Advanced Regex
Match Part of String ()
rules:
- name: console_login
routers:
- name: slack
channel: my-channel
vars:
- name: detail-type
jsonpath: $..detail-type
includes: ['AWS Console Sign In via CloudTrail']
excludes: ['^$']
- name: user
jsonpath: $..principalId
# Match part of string
includes: ['.*:(.*)']
excludes: ['^$']
- name: account
jsonpath: $..account
includes: ['.*']
excludes: ['^$']
message: |
Yo! {user} just signed in to {account}.
Match in String with Group Name
Use (?P<variable_name>)
to capture patterns within the matched field.
This will override any naming collisions with
vars:name
you set in the yaml. It merges the rule vars with matched name(s) declared in the regex where named regex take precedence
rules:
- name: console_login
routers:
- name: slack
channel: my-channel
vars:
- name: detail-type
jsonpath: $..detail-type
includes: ['AWS Console Sign In via CloudTrail']
excludes: ['^$']
- name: user
jsonpath: $..principalId
# Match part of string with variable names
includes: ['(?P<stuff>.*):(?P<user>.*)']
excludes: ['^$']
- name: account
jsonpath: $..account
includes: ['.*']
excludes: ['^$']
message: |
Yo! {user} just signed in to {account}. This {stuff} was before the user.
rules:
- name: notification
routers:
- name: slack
channel: my-channel
vars:
- name: type
jsonpath: $..Type
# include anything
includes: ['.*']
# exclude empty
excludes: ['^$']
message: |
This {type} just came in
Lambda Example
import json
import yaml
from jsonrouter import JsonMatchEngine, Rule, jsonify_message
from routers.slack import Slack
with open('examples/rules/rules.yaml', 'r') as f:
configs = yaml.safe_load(f)
registered_routers = {
'slack': Slack(webhook='1234567890').handler
}
eng = JsonMatchEngine(configs, registered_routers)
def handler(event, context):
# Main lambda handler function
eng.route_matches(jsonify_message(event))
# Load configs and some sample json
with open('examples/rules/rules.yaml', 'r') as f:
configs = yaml.safe_load(f)
with open('examples/data/sample.json', 'r') as f:
sample = json.load(f)
handler(sample, _)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
jsonrouter-0.1.0.tar.gz
(6.2 kB
view hashes)
Built Distribution
Close
Hashes for jsonrouter-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f694df95fc678e0909b755ce8d6fa7e8030caef74ee6253d03a18325370fdf17 |
|
MD5 | 7ba42fcb465810fea27dfdfe371ab968 |
|
BLAKE2b-256 | 276229b4f3c1915c41ebd37d4f70c4b8a2cffa70a8b0c11c164a3f6c20c9e6a8 |