File size: 2,592 Bytes
b143975
1519172
 
 
 
 
 
 
 
 
7288c34
 
 
 
 
 
 
 
 
 
1519172
b143975
 
 
 
 
 
 
 
 
 
 
 
1519172
 
 
 
b143975
 
 
 
 
 
 
1519172
 
 
 
7288c34
 
 
 
 
 
 
 
 
 
 
 
b143975
 
1519172
b143975
1519172
 
 
 
 
 
 
 
7288c34
 
 
 
 
 
 
 
 
 
 
 
b143975
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""Constants for KPI cache module."""
from app.kpi_cache.widget_groups import (
    OPERATIONS_WIDGETS,
    INVENTORY_WIDGETS,
    FINANCIAL_WIDGETS,
    SALES_WIDGETS,
    CUSTOMERS_WIDGETS,
    CATALOGUE_WIDGETS,
    SPA_BOOKINGS_WIDGETS,
    TRADE_NETWORK_WIDGETS,
    SALES_CHART_WIDGETS,
    OPERATIONS_CHART_WIDGETS,
    STAFF_CHART_WIDGETS,
    CUSTOMERS_CHART_WIDGETS,
    CATALOGUE_CHART_WIDGETS,
    SALES_TABLE_WIDGETS,
    OPERATIONS_TABLE_WIDGETS,
    STAFF_TABLE_WIDGETS,
    CUSTOMERS_TABLE_WIDGETS,
    CATALOGUE_TABLE_WIDGETS,
)

# MongoDB collection name for durable KPI snapshots
KPI_CACHE_COLLECTION = "kpi_cache"

# Redis key prefix for hot L1 cache
REDIS_KPI_PREFIX = "kpi"

# Redis TTLs (seconds) — L1 hot cache, shorter than MongoDB snapshots
REDIS_TTL_FINANCIAL = 1800   # 30 min
REDIS_TTL_INVENTORY = 600    # 10 min
REDIS_TTL_OPERATIONS = 600   # 10 min
REDIS_TTL_SALES = 900        # 15 min
REDIS_TTL_CUSTOMERS = 600    # 10 min
REDIS_TTL_CATALOGUE = 600    # 10 min
REDIS_TTL_SPA_BOOKINGS = 300  # 5 min — booking state changes frequently
REDIS_TTL_TRADE_NETWORK = 900  # 15 min

# Widget category → Redis TTL mapping
WIDGET_REDIS_TTL: dict = {
    "financial": REDIS_TTL_FINANCIAL,
    "inventory": REDIS_TTL_INVENTORY,
    "operations": REDIS_TTL_OPERATIONS,
    "sales": REDIS_TTL_SALES,
    "customers": REDIS_TTL_CUSTOMERS,
    "catalogue": REDIS_TTL_CATALOGUE,
    "spa_bookings": REDIS_TTL_SPA_BOOKINGS,
    "trade_network": REDIS_TTL_TRADE_NETWORK,
    # Chart widget categories share TTLs with their scalar counterparts
    "sales_charts": REDIS_TTL_SALES,
    "operations_charts": REDIS_TTL_OPERATIONS,
    "staff_charts": REDIS_TTL_OPERATIONS,
    "customers_charts": REDIS_TTL_CUSTOMERS,
    "catalogue_charts": REDIS_TTL_CATALOGUE,
    # Table widget categories
    "sales_tables": 300,
    "operations_tables": 120,
    "staff_tables": 300,
    "customers_tables": 600,
    "catalogue_tables": 600,
}

# Merged registry — assembled from per-category widget group files
KPI_WIDGET_REGISTRY: dict = {
    **OPERATIONS_WIDGETS,
    **INVENTORY_WIDGETS,
    **FINANCIAL_WIDGETS,
    **SALES_WIDGETS,
    **CUSTOMERS_WIDGETS,
    **CATALOGUE_WIDGETS,
    **SPA_BOOKINGS_WIDGETS,
    **TRADE_NETWORK_WIDGETS,
    # Chart widgets
    **SALES_CHART_WIDGETS,
    **OPERATIONS_CHART_WIDGETS,
    **STAFF_CHART_WIDGETS,
    **CUSTOMERS_CHART_WIDGETS,
    **CATALOGUE_CHART_WIDGETS,
    # Table widgets
    **SALES_TABLE_WIDGETS,
    **OPERATIONS_TABLE_WIDGETS,
    **STAFF_TABLE_WIDGETS,
    **CUSTOMERS_TABLE_WIDGETS,
    **CATALOGUE_TABLE_WIDGETS,
}