Skip to content

Commit df0fc0e

Browse files
committed
first pass org stats page
1 parent ffb9954 commit df0fc0e

13 files changed

+654
-122
lines changed

appfleet-config/appfleet.yml

+18-31
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ git_source:
1414
path: /main
1515

1616
tags:
17-
billingId: "240024"
17+
billingId: '240024'
1818
org: seedcerl
1919
owner: nlong
2020

@@ -25,12 +25,9 @@ releases:
2525

2626
host_name:
2727
$release_name:
28-
prod:
29-
${self.project_handle}-${self.app_name}-${release_name}.stratus.nrel.gov
30-
stage:
31-
${self.project_handle}-${self.app_name}-${release_name}.stratus.nrel.gov
32-
dev:
33-
${self.project_handle}-${self.app_name}-${release_name}.stratus.nrel.gov
28+
prod: ${self.project_handle}-${self.app_name}-${release_name}.stratus.nrel.gov
29+
stage: ${self.project_handle}-${self.app_name}-${release_name}.stratus.nrel.gov
30+
dev: ${self.project_handle}-${self.app_name}-${release_name}.stratus.nrel.gov
3431

3532
target_groups:
3633
- name: ${self.project_handle}-${self.app_name}-${release_name}
@@ -55,12 +52,11 @@ target_groups:
5552
timeout: 60
5653
threshold_healthy: 2
5754
threshold_unhealthy: 5
58-
http_healthy_status: "200,301,302,400"
55+
http_healthy_status: '200,301,302,400'
5956

6057
ecs_service:
6158
name: ${self.project_handle}-${self.app_name}-${release_name}
62-
task_role:
63-
${self.project_handle}-${self.app_name}-ecstask-iam-role
59+
task_role: ${self.project_handle}-${self.app_name}-ecstask-iam-role
6460
task_memory: 2048
6561
grace_period: 300
6662
task_execution_role: nrel-ops-ecs-generic-task-execution-role
@@ -91,24 +87,20 @@ ecs_service:
9187
dev: 0
9288

9389
volumes:
94-
- name: &host-media
95-
seed_media
90+
- name: &host-media seed_media
9691
host_path: /${self.project_handle}-${self.app_name}-${release_name}
9792

9893
containers:
9994
- name: main
10095
image:
10196
$release_name:
102-
dev:
103-
991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
104-
stage:
105-
991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
106-
prod:
107-
991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
97+
dev: 991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
98+
stage: 991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
99+
prod: 991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
108100
healthcheck:
109101
command:
110-
- "CMD-SHELL"
111-
- "curl -f http://localhost/api/health_check/ || exit 1"
102+
- 'CMD-SHELL'
103+
- 'curl -f http://localhost/api/health_check/ || exit 1'
112104
interval: 120
113105
retries: 3
114106
timeout: 60
@@ -126,13 +118,12 @@ containers:
126118
stage: 512
127119
prod: 1024
128120
port_map:
129-
- "80:80"
121+
- '80:80'
130122
volume_mounts:
131123
- volume_name: *host-media
132124
container_path: /seed/media
133125
secrets:
134-
- name:
135-
/nrel/ec2/${self.project_handle}_${self.app_name}/postgres/${self.data_class}/${release_name}/${self.project_handle}_${self.app_name}
126+
- name: /nrel/ec2/${self.project_handle}_${self.app_name}/postgres/${self.data_class}/${release_name}/${self.project_handle}_${self.app_name}
136127
map:
137128
POSTGRES_USER: username
138129
POSTGRES_PASSWORD: password
@@ -146,12 +137,9 @@ containers:
146137
- name: celery
147138
image:
148139
$release_name:
149-
dev:
150-
991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
151-
stage:
152-
991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
153-
prod:
154-
991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
140+
dev: 991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
141+
stage: 991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
142+
prod: 991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-${self.project_handle}-${self.app_name}
155143
ssm_parameters:
156144
- /nrel/${self.project_handle}-${self.app_name}/${release_name}/
157145
cpu:
@@ -169,8 +157,7 @@ containers:
169157
- volume_name: *host-media
170158
container_path: /seed/media
171159
secrets:
172-
- name:
173-
/nrel/ec2/${self.project_handle}_${self.app_name}/postgres/${self.data_class}/${release_name}/${self.project_handle}_${self.app_name}
160+
- name: /nrel/ec2/${self.project_handle}_${self.app_name}/postgres/${self.data_class}/${release_name}/${self.project_handle}_${self.app_name}
174161
map:
175162
POSTGRES_USER: username
176163
POSTGRES_PASSWORD: password

appfleet-config/docker-compose.deploy.yaml

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
---
2-
32
services:
43
appfleet-pipeline:
5-
image:
6-
991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-appfleet-pipeline:${APPFLEET_DEPLOY_VERSION:-2.2.0-alpine-e1f2893}
4+
image: 991404956194.dkr.ecr.us-west-2.amazonaws.com/nrel-appfleet-pipeline:${APPFLEET_DEPLOY_VERSION:-2.2.0-alpine-e1f2893}
75
environment:
86
- APPFLEET_TAG_OVERRIDES=${APPFLEET_TAG_OVERRIDES}
97
- APPFLEET_RELEASE_NAME=${APPFLEET_RELEASE_NAME:-dev}
+90-14
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,104 @@
1-
# Generated by Django 3.2.25 on 2025-02-25 05:26
1+
# Generated by Django 3.2.25 on 2025-02-27 20:06
22

3-
from django.db import migrations, models
43
import django.db.models.deletion
4+
from django.db import migrations, models
55

66

77
class Migration(migrations.Migration):
8-
98
dependencies = [
10-
('orgs', '0041_add_at_tracking_fields'),
11-
('seed', '0242_add_meter_types'),
9+
("orgs", "0041_add_at_tracking_fields"),
10+
("seed", "0242_add_meter_types"),
1211
]
1312

1413
operations = [
1514
migrations.CreateModel(
16-
name='StatisticsSetup',
15+
name="StatisticsSetup",
1716
fields=[
18-
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19-
('gfa_units', models.CharField(choices=[('ft2', 'ft2'), ('m2', ',2')], default='ft2', max_length=20)),
20-
('electricity_units', models.CharField(choices=[('GJ', 'GJ'), ('kBtu', 'kBtu'), ('kWh', 'kWh'), ('MBtu/MMBtu', 'MBtu/MMBtu'), ('MWh', 'MWh')], default=None, max_length=50)),
21-
('natural_gas_units', models.CharField(choices=[('GJ', 'GJ'), ('kBtu', 'kBtu'), ('MBtu/MMBtu', 'MBtu/MMBtu'), ('therms', 'therms'), ('kWh', 'kWh'), ('kcf', 'kcf'), ('Mcf', 'Mcf')], default=None, max_length=50)),
22-
('electricity_column', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='electricity_column', to='seed.column')),
23-
('gfa_column', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='gfa_column', to='seed.column')),
24-
('natural_gas_column', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='natural_gas_column', to='seed.column')),
25-
('organization', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='orgs.organization')),
17+
("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
18+
("gfa_units", models.CharField(choices=[("ft2", "ft2"), ("m2", ",2")], default="ft2", max_length=20)),
19+
(
20+
"electricity_units",
21+
models.CharField(
22+
choices=[("GJ", "GJ"), ("kBtu", "kBtu"), ("kWh", "kWh"), ("MBtu/MMBtu", "MBtu/MMBtu"), ("MWh", "MWh")],
23+
default=None,
24+
max_length=50,
25+
),
26+
),
27+
(
28+
"natural_gas_units",
29+
models.CharField(
30+
choices=[
31+
("GJ", "GJ"),
32+
("kBtu", "kBtu"),
33+
("MBtu/MMBtu", "MBtu/MMBtu"),
34+
("therms", "therms"),
35+
("kWh", "kWh"),
36+
("kcf", "kcf"),
37+
("Mcf", "Mcf"),
38+
],
39+
default=None,
40+
max_length=50,
41+
),
42+
),
43+
(
44+
"electricity_eui_units",
45+
models.CharField(
46+
choices=[
47+
("kBtu/ft2", "kBtu/ft2"),
48+
("kBtu/m2", "kBtu/m2"),
49+
("kWh/ft2", "kWh/ft2"),
50+
("kWh/m2", "kWh/m2"),
51+
("GJ/m2", "GJ/m2"),
52+
("GJ/ft2", "GJ/ft2"),
53+
],
54+
default="kBtu/ft2",
55+
max_length=50,
56+
),
57+
),
58+
(
59+
"natural_gas_eui_units",
60+
models.CharField(
61+
choices=[
62+
("kBtu/ft2", "kBtu/ft2"),
63+
("kBtu/m2", "kBtu/m2"),
64+
("kWh/ft2", "kWh/ft2"),
65+
("kWh/m2", "kWh/m2"),
66+
("GJ/m2", "GJ/m2"),
67+
("GJ/ft2", "GJ/ft2"),
68+
],
69+
default="kBtu/ft2",
70+
max_length=50,
71+
),
72+
),
73+
(
74+
"electricity_column",
75+
models.ForeignKey(
76+
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="electricity_column", to="seed.column"
77+
),
78+
),
79+
(
80+
"electricity_eui_column",
81+
models.ForeignKey(
82+
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="electricity_eui_column", to="seed.column"
83+
),
84+
),
85+
(
86+
"gfa_column",
87+
models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="gfa_column", to="seed.column"),
88+
),
89+
(
90+
"natural_gas_column",
91+
models.ForeignKey(
92+
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="natural_gas_column", to="seed.column"
93+
),
94+
),
95+
(
96+
"natural_gas_eui_column",
97+
models.ForeignKey(
98+
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="natural_gas_eui_column", to="seed.column"
99+
),
100+
),
101+
("organization", models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to="orgs.organization")),
26102
],
27103
),
28104
]

seed/models/statistics_setups.py

+22-15
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,34 @@
1111
from seed.lib.superperms.orgs.models import Organization
1212
from seed.models.columns import Column
1313

14-
1514
logger = logging.getLogger(__name__)
1615

16+
1717
class StatisticsSetup(models.Model):
1818
# Stores all the configuration needed to calculate organization statistics
1919
# Retrieve default values
2020
# find the kbtu_thermal_conversion_factors entry under Electric that has "kWh" in it
21-
electric_factors = kbtu_thermal_conversion_factors("US").get('Electric', {})
22-
electric_factor = next((item for item in electric_factors.items() if 'kWh' in item), None)
21+
electric_factors = kbtu_thermal_conversion_factors("US").get("Electric", {})
22+
electric_default = next((item for item in electric_factors.items() if "kWh" in item), None)
2323
# find the value under "Natural Gas" that has "therms" in it
24-
gas_factors = kbtu_thermal_conversion_factors("US").get('Natural Gas', {})
25-
gas_factor = next((item for item in electric_factors.items() if 'therms' in item), None)
24+
gas_factors = kbtu_thermal_conversion_factors("US").get("Natural Gas", {})
25+
gas_default = next((item for item in electric_factors.items() if "therms" in item), None)
2626
# set area default to 'ft2'
27-
area_units_default = 'ft2'
27+
area_units_default = "ft2"
2828
AREA_UNITS = (
2929
("ft2", "ft2"),
3030
("m2", ",2"),
3131
)
3232

33-
ELECTRIC_UNITS = (
34-
("GJ", "GJ"),
35-
("kBtu", "kBtu"),
36-
("kWh", "kWh"),
37-
("MBtu/MMBtu", "MBtu/MMBtu"),
38-
("MWh", "MWh")
33+
ELECTRIC_UNITS = (("GJ", "GJ"), ("kBtu", "kBtu"), ("kWh", "kWh"), ("MBtu/MMBtu", "MBtu/MMBtu"), ("MWh", "MWh"))
34+
35+
EUI_UNITS = (
36+
("kBtu/ft2", "kBtu/ft2"),
37+
("kBtu/m2", "kBtu/m2"),
38+
("kWh/ft2", "kWh/ft2"),
39+
("kWh/m2", "kWh/m2"),
40+
("GJ/m2", "GJ/m2"),
41+
("GJ/ft2", "GJ/ft2"),
3942
)
4043

4144
GAS_UNITS = (
@@ -45,13 +48,17 @@ class StatisticsSetup(models.Model):
4548
("therms", "therms"),
4649
("kWh", "kWh"),
4750
("kcf", "kcf"),
48-
("Mcf", "Mcf")
51+
("Mcf", "Mcf"),
4952
)
5053

5154
organization = models.OneToOneField(Organization, on_delete=models.CASCADE)
5255
gfa_column = models.ForeignKey(Column, related_name="gfa_column", null=True, on_delete=models.SET_NULL)
5356
gfa_units = models.CharField(max_length=20, choices=AREA_UNITS, default=area_units_default)
5457
electricity_column = models.ForeignKey(Column, related_name="electricity_column", null=True, on_delete=models.SET_NULL)
55-
electricity_units = models.CharField(max_length=50, choices=ELECTRIC_UNITS, default=electric_factor)
58+
electricity_units = models.CharField(max_length=50, choices=ELECTRIC_UNITS, default=electric_default)
5659
natural_gas_column = models.ForeignKey(Column, related_name="natural_gas_column", null=True, on_delete=models.SET_NULL)
57-
natural_gas_units = models.CharField(max_length=50, choices=GAS_UNITS, default=gas_factor)
60+
natural_gas_units = models.CharField(max_length=50, choices=GAS_UNITS, default=gas_default)
61+
electricity_eui_column = models.ForeignKey(Column, related_name="electricity_eui_column", null=True, on_delete=models.SET_NULL)
62+
electricity_eui_units = models.CharField(max_length=50, choices=EUI_UNITS, default="kBtu/ft2")
63+
natural_gas_eui_column = models.ForeignKey(Column, related_name="natural_gas_eui_column", null=True, on_delete=models.SET_NULL)
64+
natural_gas_eui_units = models.CharField(max_length=50, choices=EUI_UNITS, default="kBtu/ft2")

seed/serializers/statistics_setups.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,9 @@ class Meta:
2121
"electricity_column",
2222
"electricity_units",
2323
"natural_gas_column",
24-
"natural_gas_units"
24+
"natural_gas_units",
25+
"electricity_eui_column",
26+
"electricity_eui_units",
27+
"natural_gas_eui_column",
28+
"natural_gas_eui_units",
2529
)

0 commit comments

Comments
 (0)