Skip to content

Commit eec4108

Browse files
authored
Add fixtures for output data by hub and by component (#17)
1 parent 9d03611 commit eec4108

3 files changed

Lines changed: 558 additions & 10 deletions

File tree

tests/generate_data.py

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,29 +50,53 @@ def generate_test_data(
5050
json.dump(data, f, indent=4)
5151

5252

53-
def generate_test_output():
53+
def generate_test_output_hub():
5454
"""
55-
Generate test output based on the test usage and test cost data.
55+
Generate test output grouped by hub based on the test usage and test cost data.
5656
"""
5757
with open("test_data_usage.json") as f:
5858
data_usage = json.load(f)
59-
6059
with open("test_data_cost.json") as f:
6160
data_cost = json.load(f)
62-
6361
df_usage = pd.DataFrame(data_usage)
6462
df_cost = pd.DataFrame(data_cost)
65-
6663
total_usage = df_usage.groupby(["date", "component", "hub"])["value"].transform(
6764
"sum"
6865
)
69-
7066
df_usage["cost_factor"] = df_usage["value"] / total_usage
71-
7267
merged = df_usage.merge(df_cost, on=["date", "component", "hub"], how="left")
73-
7468
merged["cost"] = merged["cost_factor"] * merged["value_y"]
75-
7669
df_usage["cost"] = merged["cost"]
70+
df_usage.to_json("test_output_hub.json", orient="records", indent=4)
71+
7772

78-
df_usage.to_json("test_output.json", orient="records", indent=4)
73+
def generate_test_output_component():
74+
"""
75+
Generate test output grouped by component based on the test usage and test cost data.
76+
"""
77+
with open("test_data_usage.json") as f:
78+
data_usage = json.load(f)
79+
with open("test_data_cost.json") as f:
80+
data_cost = json.load(f)
81+
df_usage = pd.DataFrame(data_usage)
82+
df_usage = df_usage.groupby(["date", "component", "user"], as_index=False).sum()
83+
df_cost = pd.DataFrame(data_cost)
84+
df_cost = (
85+
df_cost.groupby(["date", "component"], as_index=False)
86+
.sum()
87+
.drop(columns=["hub"])
88+
)
89+
total_usage = df_usage.groupby(["date", "component"], as_index=False)[
90+
"value"
91+
].transform("sum")
92+
df_usage["cost_factor"] = (
93+
df_usage.groupby(["date", "component", "user"], as_index=False)[
94+
"value"
95+
].transform("sum")
96+
/ total_usage
97+
)
98+
merged = df_usage.merge(df_cost, on=["date", "component"], how="left")
99+
merged["cost"] = merged["cost_factor"] * merged["value_y"]
100+
df_usage["cost"] = merged["cost"]
101+
df_usage = df_usage.drop(columns=["hub"])
102+
df_usage.to_json("test_output_component.json", orient="records", indent=4)

tests/test_output_component.json

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
[
2+
{
3+
"date":"2025-01-01",
4+
"component":"compute",
5+
"user":"user_0",
6+
"value":8.0,
7+
"cost_factor":0.2,
8+
"cost":156.8
9+
},
10+
{
11+
"date":"2025-01-01",
12+
"component":"compute",
13+
"user":"user_1",
14+
"value":9.0,
15+
"cost_factor":0.225,
16+
"cost":176.4
17+
},
18+
{
19+
"date":"2025-01-01",
20+
"component":"compute",
21+
"user":"user_2",
22+
"value":12.0,
23+
"cost_factor":0.3,
24+
"cost":235.2
25+
},
26+
{
27+
"date":"2025-01-01",
28+
"component":"compute",
29+
"user":"user_3",
30+
"value":8.0,
31+
"cost_factor":0.2,
32+
"cost":156.8
33+
},
34+
{
35+
"date":"2025-01-01",
36+
"component":"compute",
37+
"user":"user_4",
38+
"value":3.0,
39+
"cost_factor":0.075,
40+
"cost":58.8
41+
},
42+
{
43+
"date":"2025-01-01",
44+
"component":"home-directory",
45+
"user":"user_0",
46+
"value":9.0,
47+
"cost_factor":0.18,
48+
"cost":16.92
49+
},
50+
{
51+
"date":"2025-01-01",
52+
"component":"home-directory",
53+
"user":"user_1",
54+
"value":9.0,
55+
"cost_factor":0.18,
56+
"cost":16.92
57+
},
58+
{
59+
"date":"2025-01-01",
60+
"component":"home-directory",
61+
"user":"user_2",
62+
"value":18.0,
63+
"cost_factor":0.36,
64+
"cost":33.84
65+
},
66+
{
67+
"date":"2025-01-01",
68+
"component":"home-directory",
69+
"user":"user_3",
70+
"value":7.0,
71+
"cost_factor":0.14,
72+
"cost":13.16
73+
},
74+
{
75+
"date":"2025-01-01",
76+
"component":"home-directory",
77+
"user":"user_4",
78+
"value":7.0,
79+
"cost_factor":0.14,
80+
"cost":13.16
81+
},
82+
{
83+
"date":"2025-01-02",
84+
"component":"compute",
85+
"user":"user_0",
86+
"value":16.0,
87+
"cost_factor":0.4,
88+
"cost":431.6
89+
},
90+
{
91+
"date":"2025-01-02",
92+
"component":"compute",
93+
"user":"user_1",
94+
"value":4.0,
95+
"cost_factor":0.1,
96+
"cost":107.9
97+
},
98+
{
99+
"date":"2025-01-02",
100+
"component":"compute",
101+
"user":"user_2",
102+
"value":11.0,
103+
"cost_factor":0.275,
104+
"cost":296.725
105+
},
106+
{
107+
"date":"2025-01-02",
108+
"component":"compute",
109+
"user":"user_3",
110+
"value":5.0,
111+
"cost_factor":0.125,
112+
"cost":134.875
113+
},
114+
{
115+
"date":"2025-01-02",
116+
"component":"compute",
117+
"user":"user_4",
118+
"value":4.0,
119+
"cost_factor":0.1,
120+
"cost":107.9
121+
},
122+
{
123+
"date":"2025-01-02",
124+
"component":"home-directory",
125+
"user":"user_0",
126+
"value":16.0,
127+
"cost_factor":0.3333333333,
128+
"cost":193.6666666667
129+
},
130+
{
131+
"date":"2025-01-02",
132+
"component":"home-directory",
133+
"user":"user_1",
134+
"value":12.0,
135+
"cost_factor":0.25,
136+
"cost":145.25
137+
},
138+
{
139+
"date":"2025-01-02",
140+
"component":"home-directory",
141+
"user":"user_2",
142+
"value":3.0,
143+
"cost_factor":0.0625,
144+
"cost":36.3125
145+
},
146+
{
147+
"date":"2025-01-02",
148+
"component":"home-directory",
149+
"user":"user_3",
150+
"value":11.0,
151+
"cost_factor":0.2291666667,
152+
"cost":133.1458333333
153+
},
154+
{
155+
"date":"2025-01-02",
156+
"component":"home-directory",
157+
"user":"user_4",
158+
"value":6.0,
159+
"cost_factor":0.125,
160+
"cost":72.625
161+
}
162+
]

0 commit comments

Comments
 (0)