@@ -136,11 +136,21 @@ def index(env):
136
136
:type env: :obj:`string`
137
137
"""
138
138
envs = environments ()
139
+ check_env (env , envs )
140
+
139
141
metrics = {
140
142
'num_nodes' : 0 ,
141
143
'num_resources' : 0 ,
142
- 'avg_resources_node' : 0 }
143
- check_env (env , envs )
144
+ 'avg_resources_node' : 0 ,
145
+ }
146
+ nodes_overview = []
147
+ stats = {
148
+ 'changed' : 0 ,
149
+ 'unchanged' : 0 ,
150
+ 'failed' : 0 ,
151
+ 'unreported' : 0 ,
152
+ 'noop' : 0
153
+ }
144
154
145
155
if env == '*' :
146
156
query = app .config ['OVERVIEW_FILTER' ]
@@ -153,21 +163,22 @@ def index(env):
153
163
puppetdb .metric ,
154
164
"{0}{1}" .format (prefix , ':%sname=num-nodes' % query_type ),
155
165
version = metric_version )
156
- num_resources = get_or_abort (
157
- puppetdb .metric ,
158
- "{0}{1}" .format (prefix , ':%sname=num-resources' % query_type ),
159
- version = metric_version )
160
166
161
- metrics ['num_nodes' ] = num_nodes ['Value' ]
162
- metrics ['num_resources' ] = num_resources ['Value' ]
163
- try :
164
- # Compute our own average because avg_resources_node['Value']
165
- # returns a string of the format "num_resources/num_nodes"
166
- # example: "1234/9" instead of doing the division itself.
167
- metrics ['avg_resources_node' ] = "{0:10.0f}" .format (
168
- (num_resources ['Value' ] / num_nodes ['Value' ]))
169
- except ZeroDivisionError :
170
- metrics ['avg_resources_node' ] = 0
167
+ if app .config ['RESOURCES_STATS_ENABLED' ]:
168
+ num_resources = get_or_abort (
169
+ puppetdb .metric ,
170
+ "{0}{1}" .format (prefix , ':%sname=num-resources' % query_type ),
171
+ version = metric_version )
172
+
173
+ metrics ['num_resources' ] = num_resources ['Value' ]
174
+ try :
175
+ # Compute our own average because avg_resources_node['Value']
176
+ # returns a string of the format "num_resources/num_nodes"
177
+ # example: "1234/9" instead of doing the division itself.
178
+ metrics ['avg_resources_node' ] = "{0:10.0f}" .format (
179
+ (num_resources ['Value' ] / num_nodes ['Value' ]))
180
+ except ZeroDivisionError :
181
+ metrics ['avg_resources_node' ] = 0
171
182
else :
172
183
query = AndOperator ()
173
184
query .add (EqualsOperator ('catalog_environment' , env ))
@@ -179,55 +190,53 @@ def index(env):
179
190
if app .config ['OVERVIEW_FILTER' ] is not None :
180
191
query .add (app .config ['OVERVIEW_FILTER' ])
181
192
182
- num_resources_query = ExtractOperator ()
183
- num_resources_query .add_field (FunctionOperator ('count' ))
184
- num_resources_query .add_query (EqualsOperator ("environment" , env ))
185
-
186
193
num_nodes = get_or_abort (
187
194
puppetdb ._query ,
188
195
'nodes' ,
189
196
query = num_nodes_query )
190
- num_resources = get_or_abort (
191
- puppetdb ._query ,
192
- 'resources' ,
193
- query = num_resources_query )
194
- metrics ['num_nodes' ] = num_nodes [0 ]['count' ]
195
- metrics ['num_resources' ] = num_resources [0 ]['count' ]
196
- try :
197
- metrics ['avg_resources_node' ] = "{0:10.0f}" .format (
198
- (num_resources [0 ]['count' ] / num_nodes [0 ]['count' ]))
199
- except ZeroDivisionError :
200
- metrics ['avg_resources_node' ] = 0
201
-
202
- nodes = get_or_abort (puppetdb .nodes ,
203
- query = query ,
204
- unreported = app .config ['UNRESPONSIVE_HOURS' ],
205
- with_status = True ,
206
- with_event_numbers = app .config ['WITH_EVENT_NUMBERS' ])
207
197
208
- nodes_overview = []
209
- stats = {
210
- 'changed' : 0 ,
211
- 'unchanged' : 0 ,
212
- 'failed' : 0 ,
213
- 'unreported' : 0 ,
214
- 'noop' : 0
215
- }
198
+ metrics ['num_nodes' ] = num_nodes [0 ]['count' ]
216
199
217
- for node in nodes :
218
- if node .status == 'unreported' :
219
- stats ['unreported' ] += 1
220
- elif node .status == 'changed' :
221
- stats ['changed' ] += 1
222
- elif node .status == 'failed' :
223
- stats ['failed' ] += 1
224
- elif node .status == 'noop' :
225
- stats ['noop' ] += 1
226
- else :
227
- stats ['unchanged' ] += 1
200
+ if app .config ['RESOURCES_STATS_ENABLED' ]:
201
+
202
+ num_resources_query = ExtractOperator ()
203
+ num_resources_query .add_field (FunctionOperator ('count' ))
204
+ num_resources_query .add_query (EqualsOperator ("environment" , env ))
205
+
206
+ num_resources = get_or_abort (
207
+ puppetdb ._query ,
208
+ 'resources' ,
209
+ query = num_resources_query )
210
+
211
+ metrics ['num_resources' ] = num_resources [0 ]['count' ]
212
+ try :
213
+ metrics ['avg_resources_node' ] = "{0:10.0f}" .format (
214
+ (num_resources [0 ]['count' ] / num_nodes [0 ]['count' ]))
215
+ except ZeroDivisionError :
216
+ metrics ['avg_resources_node' ] = 0
217
+
218
+ if app .config ['NODES_STATUS_DETAIL_ENABLED' ]:
219
+
220
+ nodes = get_or_abort (puppetdb .nodes ,
221
+ query = query ,
222
+ unreported = app .config ['UNRESPONSIVE_HOURS' ],
223
+ with_status = True ,
224
+ with_event_numbers = app .config ['WITH_EVENT_NUMBERS' ])
225
+
226
+ for node in nodes :
227
+ if node .status == 'unreported' :
228
+ stats ['unreported' ] += 1
229
+ elif node .status == 'changed' :
230
+ stats ['changed' ] += 1
231
+ elif node .status == 'failed' :
232
+ stats ['failed' ] += 1
233
+ elif node .status == 'noop' :
234
+ stats ['noop' ] += 1
235
+ else :
236
+ stats ['unchanged' ] += 1
228
237
229
- if node .status != 'unchanged' :
230
- nodes_overview .append (node )
238
+ if node .status != 'unchanged' :
239
+ nodes_overview .append (node )
231
240
232
241
return render_template (
233
242
'index.html' ,
@@ -626,50 +635,32 @@ def facts(env):
626
635
"""
627
636
envs = environments ()
628
637
check_env (env , envs )
638
+ facts = []
639
+ order_by = '[{"field": "name", "order": "asc"}]'
629
640
facts = get_or_abort (puppetdb .fact_names )
630
641
631
- # we consider a column label to count for ~5 lines
632
- column_label_height = 5
633
-
634
- # 1 label per different letter and up to 3 more labels for letters spanning
635
- # multiple columns.
636
- column_label_count = 3 + len (set (map (lambda fact : fact [0 ].upper (), facts )))
637
-
638
- break_size = (len (facts ) + column_label_count * column_label_height ) / 4.0
639
- next_break = break_size
640
-
641
- facts_columns = []
642
- facts_current_column = []
643
- facts_current_letter = []
642
+ facts_columns = [[]]
644
643
letter = None
644
+ letter_list = None
645
+ break_size = (len (facts ) / 4 ) + 1
646
+ next_break = break_size
645
647
count = 0
646
-
647
648
for fact in facts :
648
649
count += 1
649
650
650
- if count > next_break :
651
- next_break += break_size
652
- if facts_current_letter :
653
- facts_current_column .append (facts_current_letter )
654
- if facts_current_column :
655
- facts_columns .append (facts_current_column )
656
- facts_current_column = []
657
- facts_current_letter = []
658
- letter = None
659
-
660
- if letter != fact [0 ].upper ():
661
- if facts_current_letter :
662
- facts_current_column .append (facts_current_letter )
663
- facts_current_letter = []
651
+ if letter != fact [0 ].upper () or not letter :
652
+ if count > next_break :
653
+ # Create a new column
654
+ facts_columns .append ([])
655
+ next_break += break_size
656
+ if letter_list :
657
+ facts_columns [- 1 ].append (letter_list )
658
+ # Reset
664
659
letter = fact [0 ].upper ()
665
- count += column_label_height
666
-
667
- facts_current_letter .append (fact )
660
+ letter_list = []
668
661
669
- if facts_current_letter :
670
- facts_current_column .append (facts_current_letter )
671
- if facts_current_column :
672
- facts_columns .append (facts_current_column )
662
+ letter_list .append (fact )
663
+ facts_columns [- 1 ].append (letter_list )
673
664
674
665
return render_template ('facts.html' ,
675
666
facts_columns = facts_columns ,
@@ -921,7 +912,7 @@ def metrics(env):
921
912
metrics .append (domain + ':' + prop )
922
913
else :
923
914
raise ValueError ("Unknown metric version {} for database version {}"
924
- .format (metric_version , db_version ))
915
+ .format (metric_version , database_version ))
925
916
926
917
return render_template ('metrics.html' ,
927
918
metrics = sorted (metrics ),
0 commit comments