Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
1e187248e8
|
|||
|
e0fff7fba6
|
|||
|
e6b3790e4c
|
|||
|
955b528dd0
|
|||
|
95cef39b1d
|
|||
|
d499d451ba
|
|||
|
2a4452e67f
|
|||
|
71d347632c
|
|||
|
33c5205ea6
|
|||
|
6a82c30db7
|
@@ -4,23 +4,25 @@ steps:
|
|||||||
settings:
|
settings:
|
||||||
repo: ${FORGE_NAME}/${CI_REPO}
|
repo: ${FORGE_NAME}/${CI_REPO}
|
||||||
registry:
|
registry:
|
||||||
from_secret: container_registry
|
from_secret: local_registry
|
||||||
tags: latest,${CI_COMMIT_SHA},${CI_COMMIT_TAG}
|
tags: latest,${CI_COMMIT_TAG}
|
||||||
username:
|
username:
|
||||||
from_secret: container_registry_username
|
from_secret: local_username
|
||||||
password:
|
password:
|
||||||
from_secret: container_registry_password
|
from_secret: local_password
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
when:
|
when:
|
||||||
- event: [push, tag]
|
- event: tag
|
||||||
|
|
||||||
scan_image:
|
scan_image:
|
||||||
image: aquasec/trivy
|
image: aquasec/trivy
|
||||||
commands:
|
commands:
|
||||||
- trivy image $FORGE_NAME/$CI_REPO:$CI_COMMIT_SHA --quiet --exit-code 1
|
- trivy image $FORGE_NAME/$CI_REPO:$CI_COMMIT_TAG --quiet --exit-code 1
|
||||||
when:
|
when:
|
||||||
- event: [push, tag]
|
- event: tag
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
image: quay.io/wollud1969/k8s-admin-helper:0.1.3
|
image: quay.io/wollud1969/k8s-admin-helper:0.4.1
|
||||||
environment:
|
environment:
|
||||||
KUBE_CONFIG_CONTENT:
|
KUBE_CONFIG_CONTENT:
|
||||||
from_secret: kube_config
|
from_secret: kube_config
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.21
|
FROM alpine:3.23
|
||||||
|
|
||||||
ENV PGHOST="database.database1.svc.cluster.local"
|
ENV PGHOST="database.database1.svc.cluster.local"
|
||||||
ENV PGDATABASE="udi-hottis"
|
ENV PGDATABASE="udi-hottis"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ kind: CronJob
|
|||||||
metadata:
|
metadata:
|
||||||
name: pv-energy-calculator
|
name: pv-energy-calculator
|
||||||
spec:
|
spec:
|
||||||
schedule: "1 1 * * *"
|
schedule: "15 0 * * *"
|
||||||
jobTemplate:
|
jobTemplate:
|
||||||
spec:
|
spec:
|
||||||
template:
|
template:
|
||||||
|
|||||||
@@ -12,3 +12,16 @@ CREATE TABLE pv_energy_by_month (
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE car_energy_by_month (
|
||||||
|
id serial NOT NULL PRIMARY KEY,
|
||||||
|
month integer NOT NULL,
|
||||||
|
year integer NOT NULL,
|
||||||
|
created_at timestamp NOT NULL DEFAULT now(),
|
||||||
|
last_changed timestamp,
|
||||||
|
update_counter integer NOT NULL DEFAULT 0,
|
||||||
|
baseline_energy real NOT NULL,
|
||||||
|
current_energy real NOT NULL DEFAULT 0.0,
|
||||||
|
CONSTRAINT car_energy_by_month__month_year_unique UNIQUE(month, year)
|
||||||
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -51,3 +51,55 @@ INSERT INTO pv_energy_by_month
|
|||||||
update_counter = pv_energy_by_month.update_counter + 1,
|
update_counter = pv_energy_by_month.update_counter + 1,
|
||||||
current_energy = (SELECT e FROM last_pv_energy_of_yesterday) - pv_energy_by_month.baseline_energy;
|
current_energy = (SELECT e FROM last_pv_energy_of_yesterday) - pv_energy_by_month.baseline_energy;
|
||||||
|
|
||||||
|
WITH
|
||||||
|
today AS (
|
||||||
|
SELECT now() AS d
|
||||||
|
),
|
||||||
|
yesterday AS (
|
||||||
|
SELECT date_trunc('day', today.d - '1 day'::interval) AS d,
|
||||||
|
extract(month from today.d - '1 day'::interval) AS m,
|
||||||
|
extract(year from today.d - '1 day'::interval) AS y
|
||||||
|
FROM today
|
||||||
|
),
|
||||||
|
first_car_of_yesterday AS (
|
||||||
|
SELECT min(measurements.time) as t
|
||||||
|
FROM measurements,
|
||||||
|
yesterday
|
||||||
|
WHERE time >= yesterday.d AND
|
||||||
|
time < yesterday.d + '1 day'::interval AND
|
||||||
|
measurements.application = 'Car'
|
||||||
|
),
|
||||||
|
last_car_of_yesterday AS (
|
||||||
|
SELECT max(measurements.time) as t
|
||||||
|
FROM measurements,
|
||||||
|
yesterday
|
||||||
|
WHERE time >= yesterday.d AND
|
||||||
|
time < yesterday.d + '1 day'::interval AND
|
||||||
|
measurements.application = 'Car'
|
||||||
|
),
|
||||||
|
first_car_energy_of_yesterday AS (
|
||||||
|
SELECT cast(measurements.values->'TotalImportEnergy'->>'value' AS real) AS e
|
||||||
|
FROM measurements,
|
||||||
|
first_car_of_yesterday
|
||||||
|
WHERE measurements.time = first_car_of_yesterday.t AND
|
||||||
|
measurements.application = 'Car'
|
||||||
|
),
|
||||||
|
last_car_energy_of_yesterday AS (
|
||||||
|
SELECT cast(measurements.values->'TotalImportEnergy'->>'value' AS real) AS e
|
||||||
|
FROM measurements,
|
||||||
|
last_car_of_yesterday
|
||||||
|
WHERE measurements.time = last_car_of_yesterday.t AND
|
||||||
|
measurements.application = 'Car'
|
||||||
|
)
|
||||||
|
INSERT INTO car_energy_by_month
|
||||||
|
(month, year, baseline_energy)
|
||||||
|
VALUES(
|
||||||
|
(SELECT m FROM yesterday),
|
||||||
|
(SELECT y FROM yesterday),
|
||||||
|
(SELECT e FROM first_car_energy_of_yesterday)
|
||||||
|
)
|
||||||
|
ON CONFLICT ON CONSTRAINT car_energy_by_month__month_year_unique
|
||||||
|
DO UPDATE
|
||||||
|
SET last_changed = now(),
|
||||||
|
update_counter = car_energy_by_month.update_counter + 1,
|
||||||
|
current_energy = (SELECT e FROM last_car_energy_of_yesterday) - car_energy_by_month.baseline_energy;
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
|
|
||||||
sv() {
|
|
||||||
cat pvec.sql | sed 's/%Y%/'$1'/' | sed 's/%M%/'$2'/' | sed 's/%D%/'$3'/' | psql -d udi-hottis
|
|
||||||
}
|
|
||||||
|
|
||||||
sv 2025 01 02
|
|
||||||
|
|
||||||
|
|
||||||
45
src/main.py
45
src/main.py
@@ -1,45 +0,0 @@
|
|||||||
import psycopg
|
|
||||||
from loguru import logger
|
|
||||||
|
|
||||||
def main():
|
|
||||||
try:
|
|
||||||
conn = psycopg.connect()
|
|
||||||
logger.info("Database connection opened")
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Error when opening database connection {e}"(
|
|
||||||
return
|
|
||||||
|
|
||||||
try:
|
|
||||||
with conn.cursor(cursor_factory=psycopg.extras.DictCursor) as cursor:
|
|
||||||
select_stmt = psycopg.sql.SQL("""
|
|
||||||
SELECT ...
|
|
||||||
""")
|
|
||||||
cursor.execute(select_stmt, (...))
|
|
||||||
row = cursor.fetchone()
|
|
||||||
|
|
||||||
if not row:
|
|
||||||
logger.error(f"No data found")
|
|
||||||
return
|
|
||||||
|
|
||||||
value = row["bla"]
|
|
||||||
|
|
||||||
# calculation
|
|
||||||
insert_stmt = psycopg.sql.SQL("""
|
|
||||||
INSERT ...
|
|
||||||
""")
|
|
||||||
cursor.execute(insert_stmt, (...))
|
|
||||||
conn.commit()
|
|
||||||
|
|
||||||
logger.info(f"Data successfully written to database")
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Error when selecting or writing database {e}")
|
|
||||||
conn.rollback()
|
|
||||||
finally:
|
|
||||||
conn.close()
|
|
||||||
logger.info("Database connection closed")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user