46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
import os
|
|
import json
|
|
import psycopg2
|
|
|
|
|
|
def main(event, context):
|
|
pg_dsn = os.environ["PG_DSN"]
|
|
|
|
# Извлекаем тело сообщения из SQS (POST от sqs-consumer)
|
|
body = getattr(event, "body", event)
|
|
if isinstance(body, (bytes, bytearray)):
|
|
body = body.decode("utf-8")
|
|
if isinstance(body, str):
|
|
data = json.loads(body)
|
|
else:
|
|
data = body
|
|
|
|
conn = psycopg2.connect(pg_dsn)
|
|
try:
|
|
cur = conn.cursor()
|
|
cur.execute(
|
|
"""
|
|
INSERT INTO weather_metrics
|
|
(city, country, temperature, feels_like, humidity,
|
|
pressure, wind_speed, description, recorded_at)
|
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, to_timestamp(%s))
|
|
""",
|
|
(
|
|
data["city"],
|
|
data["country"],
|
|
data["temperature"],
|
|
data["feels_like"],
|
|
data["humidity"],
|
|
data["pressure"],
|
|
data["wind_speed"],
|
|
data["description"],
|
|
data["owm_timestamp"],
|
|
),
|
|
)
|
|
conn.commit()
|
|
cur.close()
|
|
finally:
|
|
conn.close()
|
|
|
|
return {"status": "ok", "city": data["city"], "temp": data["temperature"]}
|