sondehub-infra/history/lambda_function.py

85 lines
2.1 KiB
Python
Raw Normal View History

2021-02-15 05:23:51 +00:00
import boto3
import botocore.credentials
from botocore.awsrequest import AWSRequest
from botocore.endpoint import URLLib3Session
from botocore.auth import SigV4Auth
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all
2021-02-15 05:23:51 +00:00
import json
import os
from datetime import datetime, timedelta, timezone
import sys, traceback
2021-02-15 05:23:51 +00:00
HOST = os.getenv("ES")
# get current sondes, filter by date, location
2021-02-15 05:23:51 +00:00
def history(event, context):
path = "telm-*/_search"
payload = {
"aggs": {
"3": {
"date_histogram": {
"field": "datetime",
"fixed_interval": "1s",
"min_doc_count": 1,
},
"aggs": {
"1": {
"top_hits": {
"size": 1,
"sort": [{"datetime": {"order": "desc"}}],
}
}
},
}
},
"query": {
"bool": {
"filter": [
{"match_all": {}},
{
"match_phrase": {
"serial": str(event["pathParameters"]["serial"])
}
}
]
}
},
}
results = es_request(payload, path, "POST")
output = [
data["1"]["hits"]["hits"][0]["_source"]
for data in results["aggregations"]["3"]["buckets"]
]
return json.dumps(output)
2021-02-15 05:23:51 +00:00
def es_request(payload, path, method):
# get aws creds
session = boto3.Session()
2021-02-15 05:23:51 +00:00
params = json.dumps(payload)
headers = {"Host": HOST, "Content-Type": "application/json"}
request = AWSRequest(
method="POST", url=f"https://{HOST}/{path}", data=params, headers=headers
)
SigV4Auth(boto3.Session().get_credentials(), "es", "us-east-1").add_auth(request)
2021-02-15 05:23:51 +00:00
session = URLLib3Session()
r = session.send(request.prepare())
return json.loads(r.text)
2021-02-15 05:23:51 +00:00
if __name__ == "__main__":
print(
history(
{"pathParameters": {"serial": "S4720140"}}, {}
2021-02-15 05:23:51 +00:00
)
)