Snapshot: grafana-dashboard-2026-06-09

This commit is contained in:
Eric F
2026-06-09 18:59:35 -04:00
parent 3dedb82d04
commit 1ab3a4a643
9 changed files with 309 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@@ -0,0 +1,100 @@
---
# FlexMeasures Stack — Docker Compose
# Adapté pour Traefik avec sous-domaines digitribe.fr
services:
# ─── PostgreSQL ────────────────────────────────────────────────
flexmeasures-db:
image: postgres:17
container_name: flexmeasures-db
restart: unless-stopped
environment:
POSTGRES_DB: flexmeasures
POSTGRES_USER: flexmeasures
POSTGRES_PASSWORD: ${FLEXMEASURES_DB_PASSWORD:-Digitribe972}
volumes:
- flexmeasures_db_data:/var/lib/postgresql/data
networks:
- traefik_network
mem_limit: 1g
cpus: 1
# ─── Redis (queue) ─────────────────────────────────────────────
flexmeasures-redis:
image: redis:7-alpine
container_name: flexmeasures-redis
restart: unless-stopped
command: redis-server --loglevel warning --requirepass ${FLEXMEASURES_REDIS_PASSWORD:-Digitribe972} --aclfile /dev/null
volumes:
- flexmeasures_redis_data:/data
networks:
- traefik_network
mem_limit: 512m
cpus: 0.5
# ─── FlexMeasures Server ───────────────────────────────────────
flexmeasures-server:
image: lfenergy/flexmeasures:latest
container_name: flexmeasures-server
restart: unless-stopped
depends_on:
- flexmeasures-db
- flexmeasures-redis
environment:
SQLALCHEMY_DATABASE_URI: "postgresql://flexmeasures:${FLEXMEASURES_DB_PASSWORD:-Digitribe972}@flexmeasures-db:5432/flexmeasures"
SECRET_KEY: ${FLEXMEASURES_SECRET_KEY:-flexmeasures-secret-key-change-me}
SECURITY_TOTP_SECRETS: '{"1": "totp-secret-change-me"}'
FLEXMEASURES_ENV: production
FLEXMEASURES_REDIS_URL: "flexmeasures-redis"
FLEXMEASURES_REDIS_PORT: "6379"
FLEXMEASURES_REDIS_DB_NR: "0"
FLEXMEASURES_REDIS_PASSWORD: "${FLEXMEASURES_REDIS_PASSWORD:-Digitribe972}"
LOGGING_LEVEL: INFO
FLEXMEASURES_ALLOW_DATA_DELETION: "true"
FLEXMEASURES_PUBLIC_ACCOUNTS: "true"
networks:
- traefik_network
labels:
- "traefik.enable=true"
- "traefik.http.routers.cariflex.rule=Host(`cariflex.digitribe.fr`)"
- "traefik.http.routers.cariflex.entrypoints=websecure"
- "traefik.http.routers.cariflex.tls.certresolver=letsencrypt"
- "traefik.http.services.cariflex.loadbalancer.server.port=5000"
- "traefik.http.routers.cariflex.middlewares=redirect-https"
mem_limit: 2g
cpus: 2
# ─── FlexMeasures Worker (jobs) ────────────────────────────────
flexmeasures-worker:
image: lfenergy/flexmeasures:latest
container_name: flexmeasures-worker
restart: unless-stopped
depends_on:
- flexmeasures-db
- flexmeasures-redis
- flexmeasures-server
environment:
SQLALCHEMY_DATABASE_URI: "postgresql://flexmeasures:${FLEXMEASURES_DB_PASSWORD:-Digitribe972}@flexmeasures-db:5432/flexmeasures"
SECRET_KEY: ${FLEXMEASURES_SECRET_KEY:-flexmeasures-secret-key-change-me}
SECURITY_TOTP_SECRETS: '{"1": "totp-secret-change-me"}'
FLEXMEASURES_ENV: production
FLEXMEASURES_REDIS_URL: "flexmeasures-redis"
FLEXMEASURES_REDIS_PORT: "6379"
FLEXMEASURES_REDIS_DB_NR: "0"
FLEXMEASURES_REDIS_PASSWORD: "${FLEXMEASURES_REDIS_PASSWORD:-Digitribe972}"
LOGGING_LEVEL: INFO
networks:
- traefik_network
mem_limit: 2g
cpus: 2
volumes:
flexmeasures_db_data:
driver: local
flexmeasures_redis_data:
driver: local
networks:
traefik_network:
name: traefik-public
external: true

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@@ -0,0 +1,10 @@
FLEXMEASURES_ENV = 'production'
FLEXMEASURES_REDIS_URL = 'flexmeasures-redis'
FLEXMEASURES_REDIS_PORT = 6379
FLEXMEASURES_REDIS_DB_NR = 0
FLEXMEASURES_REDIS_PASSWORD='***'
FLEXMEASURES_DATABASE_URI = 'postgresql://flexmeasures:***@flexmeasures-db:5432/flexmeasures'
SECRET_KEY='***'
LOGGING_LEVEL = 'INFO'
FLEXMEASURES_PLATFORM_NAME = 'Cariflex'
FLEXMEASURES_MENU_LOGO_PATH = '/ui/static/images/cariflex-logo.jpg'

View File

@@ -0,0 +1,10 @@
<footer class="page-footer font-small pt-4 mt-auto">
<div class="footer text-center">
<div class="container-fluid">
<div style="text-align: center; padding: 10px;">
<img src="/ui/static/images/cariflex-logo.jpg" alt="Cariflex" style="max-height: 40px;">
<p style="margin-top: 10px; color: #666;">Cariflex - 2026</p>
</div>
</div>
</div>
</footer>

View File

@@ -0,0 +1,3 @@
Description: grafana-dashboard-2026-06-09
Date: Tue Jun 9 18:59:35 AST 2026
Host: ns3087950

View File

@@ -0,0 +1,59 @@
{% extends "base.html" %}
{% set active_page = "logged-in-user" %}
{% block title %} Please log in {% endblock %}
{% from "security/_macros.html" import render_field_with_errors, render_field %}
{% block divs %}
<div class="container-fluid">
<div class="row" style="text-align: center; padding-bottom: 30px;">
<div class="col-md-12">
{% block platform_title %}
<h2>Cariflex</h2>
{% endblock platform_title %}
</div>
</div>
<div class="row">
<div class="col-lg-4">
<div class="card">
<div class="login-form">
<h1>{{ _fsdomain('Login') }}</h1>
<form action="{{ url_for_security('login') }}" method="POST" name="login_user_form">
{{ login_user_form.hidden_tag() }}
{{ render_field_with_errors(login_user_form.email) }}
{{ render_field_with_errors(login_user_form.password) }}
{{ render_field_with_errors(login_user_form.remember) }}
{{ render_field(login_user_form.submit) }}
</form>
<form action="/reset" method="get">
<button class="btn btn-sm btn-responsive btn-link" type="submit">Forgot password?</button>
</form>
{% if FLEXMEASURES_MODE == "demo" and FLEXMEASURES_PUBLIC_DEMO_CREDENTIALS %}
<div class="alert alert-info col-md-8">
<h2>Interested in a demo?</h2>
<p>
Simply log in as our demo user.
<ul>
<li>Email: {{ FLEXMEASURES_PUBLIC_DEMO_CREDENTIALS[0] }}</li>
<li>Password: {{ FLEXMEASURES_PUBLIC_DEMO_CREDENTIALS[1] }}</li>
</ul>
</p>
</div>
{% endif %}
</div>
</div>
</div>
<div class="col-lg-4">
<div class="card">
{% include 'includes/teaser.html' %}
</div>
</div>
<div class="col-lg-4"></div>
</div>
</div>
{% endblock divs %}

View File

@@ -0,0 +1,73 @@
<nav class="navbar navbar-expand-lg fixed-top mt-0 navbar-default mb-2 navbar-fixed-top " id="topnavbar">
<div class="container-fluid" id="navbar-container">
<div class="navbar-brand">
<a href="/">
<span class="navbar-tool-name">
{% if menu_logo %}
<img id="navbar-logo" src="/ui/static/images/cariflex-logo.jpg"/>
{% else %}
<img id="navbar-logo" src="/ui/static/images/cariflex-logo.jpg" alt="Cariflex"/>
{% endif %}
</span>
</a>
</div>
<div
class="navbar-toggler border-0"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation"
>
<i class="fa fa-bars"></i>
</div>
<div class="collapse navbar-collapse justify-content-end flex-row" id="navbarSupportedContent">
<ul class="nav navbar-nav d-flex">
{% for href, id, caption, tooltip, icon in navigation_bar %}
{% if id == "tasks" %}
<li {% if id == active_page %} class="nav-item dropdown active" {% else %} class="nav-item dropdown" {% endif %}>
<a class="nav-link dropdown-toggle" href="#" id="tasksDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<span class="fa fa-tasks" aria-hidden="true"></span>
Tasks
</a>
<ul class="dropdown-menu" aria-labelledby="tasksDropdown">
{% for queue in queue_names %}
<li {% if current_user.has_role('anonymous') %} class="disabled" {% endif %}>
<a class="dropdown-item" {% if not current_user.has_role('anonymous') %} href="/tasks/0/view/jobs/{{ queue }}/started/10/asc/1" {% endif %}>
{{ queue | capitalize }}
</a>
</li>
{% endfor %}
<li {% if current_user.has_role('anonymous') %} class="disabled" {% endif %}>
<a class="dropdown-item" {% if not current_user.has_role('anonymous') %} href="/tasks/" {% endif %}>
Overview
</a>
</li>
</ul>
</li>
{% else %}
<li {% if id == active_page %} class="nav-item active" {% else %} class="nav-item" {% endif %}
data-bs-toggle="tooltip" title="{{ tooltip }}" data-placement="bottom"
{% if id == 'upload' or (current_user.has_role('anonymous') and id in ('tasks', 'users')) %}
class="disabled" {% endif %}>
<a {% if not ( id == 'upload' or (current_user.has_role('anonymous') and id in ('tasks', 'users')) ) %} href="/{{ href|e }}" {% endif %}
{% if id in ['openapi-docs', 'docs'] %} target="_blank" {% endif %} class="nav-link">
<span class="fa fa-{{ icon }}" aria-hidden="true"></span>
{{ caption|e }}
{# use tooltip as caption for small screens showing a collapsed menu #}
{% if not caption %}
<span class="d-inline d-lg-none">{{ tooltip }}</span>
{% endif %}
</a>
</li>
{% endif %}
{% endfor %}
</ul>
</div>
</div>
</nav>

View File

@@ -0,0 +1,54 @@
<div class="carousel-container">
<div id="myCarousel" class="carousel slide" data-bs-ride="carousel">
<!-- Indicators -->
<div class="carousel-indicators">
<button type="button" data-bs-target="#myCarousel" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
<button type="button" data-bs-target="#myCarousel" data-bs-slide-to="1" aria-label="Slide 2"></button>
<button type="button" data-bs-target="#myCarousel" data-bs-slide-to="2" aria-label="Slide 3"></button>
</div>
<!-- Wrapper for slides -->
<div class="carousel-inner">
<div class="carousel-item active">
<img src="ui/static/images/flexmeasures-preview.jpg"
alt="The FlexMeasures platform on a laptop."
title="FlexMeasures provides in-depth analytics of flexibility in your portfolio."
>
<div class="carousel-caption">
In-depth analytics of flexibility in your portfolio.
</div>
</div>
<div class="carousel-item">
<img src="ui/static/images/tj-k-349056-unsplash.jpg"
alt="A landscape with wind farms."
title="FlexMeasures helps to forecast costs and revenues with precision."
>
<div class="carousel-caption">
Costs and revenues forecast with precision.
</div>
</div>
<div class="carousel-item">
<img src="ui/static/images/chase-lewis-506404-unsplash.jpg"
alt="A tesla charging station."
title="FlexMeasures provides charging strategies that help balance the grid."
>
<div class="carousel-caption">
Charging strategies that help balance the grid.
</div>
</div>
</div>
<!-- Left and right controls -->
<button class="carousel-control-prev" type="button" data-bs-target="#myCarousel" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#myCarousel" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
</div>