Skip to content

Commit 4fed3e0

Browse files
committed
rest: guess field type if possible
1 parent 4e85706 commit 4fed3e0

File tree

7 files changed

+301
-78
lines changed

7 files changed

+301
-78
lines changed

Changes

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ next:
55
- Rest:
66
- add transformation and disaggregation functions
77
- add support for timeperiod / time queries in where clause
8+
- add percentage to availability queries
89

910
3.14.2 Sat Mar 23 19:21:39 CET 2024
1011
- fix embedding 3rd party tools

docs/documentation/rest.asciidoc

+23
Original file line numberDiff line numberDiff line change
@@ -1132,15 +1132,25 @@ Optional arguments:
11321132
|===========================================
11331133
|Attribute | Type | Unit | Description
11341134
|scheduled_time_down | number | s | total seconds in state down (during downtimes)
1135+
|scheduled_time_down_percent | number | % | time down in percent of total time (during downtimes)
11351136
|scheduled_time_indeterminate | number | s | total seconds unknown (during downtimes)
1137+
|scheduled_time_indeterminate_percent | number | % | time unknown in percent of total time (during downtimes)
11361138
|scheduled_time_unreachable | number | s | total seconds in state unreachable (during downtimes)
1139+
|scheduled_time_unreachable_percent | number | % | time unreachable in percent of total time (during downtimes)
11371140
|scheduled_time_up | number | s | total seconds in state up (during downtimes)
1141+
|scheduled_time_up_percent | number | % | time up in percent of total time (during downtimes)
11381142
|time_down | number | s | total seconds in state down
1143+
|time_down_percent | number | % | time down in percent of total time
11391144
|time_indeterminate_nodata | number | s | total seconds without any data
1145+
|time_indeterminate_nodata_percent | number | % | time without any data in percent of total time
11401146
|time_indeterminate_notrunning | number | s | total seconds during core not running
1147+
|time_indeterminate_notrunning_percent | number | % | time during core not running in percent of total time
11411148
|time_indeterminate_outside_timeperiod | number | s | total seconds outside the given timeperiod
1149+
|time_indeterminate_outside_timeperiod_percent | number | % | time outside the given timeperiod in percent of total time
11421150
|time_unreachable | number | s | total seconds in state unreachable
1151+
|time_unreachable_percent | number | % | time unreachable in percent of total time
11431152
|time_up | number | s | total seconds in state up
1153+
|time_up_percent | number | % | time up in percent of total time
11441154
|===========================================
11451155

11461156

@@ -1528,17 +1538,29 @@ Optional arguments:
15281538
|===========================================
15291539
|Attribute | Type | Unit | Description
15301540
|scheduled_time_critical | number | s | total seconds in state critical (during downtimes)
1541+
|scheduled_time_critical_percent | number | % | time critical in percent of total time (during downtimes)
15311542
|scheduled_time_indeterminate | number | s | total seconds unknown (during downtimes)
1543+
|scheduled_time_indeterminate_percent | number | % | time unknown in percent of total time (during downtimes)
15321544
|scheduled_time_ok | number | s | total seconds in state ok (during downtimes)
1545+
|scheduled_time_ok_percent | number | % | time ok in percent of total time (during downtimes)
15331546
|scheduled_time_unknown | number | s | total seconds in state unknown (during downtimes)
1547+
|scheduled_time_unknown_percent | number | % | time unknown in percent of total time (during downtimes)
15341548
|scheduled_time_warning | number | s | total seconds in state warning (during downtimes)
1549+
|scheduled_time_warning_percent | number | % | time warning in percent of total time (during downtimes)
15351550
|time_critical | number | s | total seconds in state critical
1551+
|time_critical_percent | number | % | time critical in percent of total time
15361552
|time_indeterminate_nodata | number | s | total seconds without any data
1553+
|time_indeterminate_nodata_percent | number | % | time without any data in percent of total time (during downtimes)
15371554
|time_indeterminate_notrunning | number | s | total seconds during core not running
1555+
|time_indeterminate_notrunning_percent | number | % | time during core not running in percent of total time
15381556
|time_indeterminate_outside_timeperiod | number | s | total seconds outside the given timeperiod
1557+
|time_indeterminate_outside_timeperiod_percent | number | % | time outside the given timeperiod in percent of total time
15391558
|time_ok | number | s | total seconds in state ok
1559+
|time_ok_percent | number | % | time ok in percent of total time
15401560
|time_unknown | number | s | total seconds in state unknown
1561+
|time_unknown_percent | number | % | time unknown in percent of total time
15411562
|time_warning | number | s | total seconds in state warning
1563+
|time_warning_percent | number | % | time warning in percent of total time
15421564
|===========================================
15431565

15441566

@@ -2336,3 +2358,4 @@ Update timeperiods configuration partially.
23362358
=== DELETE /timeperiods/<name>/config
23372359

23382360
Deletes given timeperiod from configuration.
2361+

lib/Thruk/Base.pm

+4-3
Original file line numberDiff line numberDiff line change
@@ -507,9 +507,10 @@ returns cleaned string
507507
508508
=cut
509509
sub trim_whitespace {
510-
$_[0] =~ s/^\s+//mxo;
511-
$_[0] =~ s/\s+$//mxo;
512-
return($_[0]);
510+
my $val = $_[0];
511+
$val =~ s/^\s+//mxo;
512+
$val =~ s/\s+$//mxo;
513+
return($val);
513514
}
514515

515516

lib/Thruk/Controller/Rest/V1/docs.pm

+132
Original file line numberDiff line numberDiff line change
@@ -767,59 +767,119 @@ __DATA__
767767
"type": "number",
768768
"unit": "s"
769769
},
770+
{
771+
"description": "",
772+
"name": "scheduled_time_down_percent",
773+
"type": "number",
774+
"unit": "%"
775+
},
770776
{
771777
"description": "total seconds unknown (during downtimes)",
772778
"name": "scheduled_time_indeterminate",
773779
"type": "number",
774780
"unit": "s"
775781
},
782+
{
783+
"description": "",
784+
"name": "scheduled_time_indeterminate_percent",
785+
"type": "number",
786+
"unit": "%"
787+
},
776788
{
777789
"description": "total seconds in state unreachable (during downtimes)",
778790
"name": "scheduled_time_unreachable",
779791
"type": "number",
780792
"unit": "s"
781793
},
794+
{
795+
"description": "",
796+
"name": "scheduled_time_unreachable_percent",
797+
"type": "number",
798+
"unit": "%"
799+
},
782800
{
783801
"description": "total seconds in state up (during downtimes)",
784802
"name": "scheduled_time_up",
785803
"type": "number",
786804
"unit": "s"
787805
},
806+
{
807+
"description": "",
808+
"name": "scheduled_time_up_percent",
809+
"type": "number",
810+
"unit": "%"
811+
},
788812
{
789813
"description": "total seconds in state down",
790814
"name": "time_down",
791815
"type": "number",
792816
"unit": "s"
793817
},
818+
{
819+
"description": "",
820+
"name": "time_down_percent",
821+
"type": "number",
822+
"unit": "%"
823+
},
794824
{
795825
"description": "total seconds without any data",
796826
"name": "time_indeterminate_nodata",
797827
"type": "number",
798828
"unit": "s"
799829
},
830+
{
831+
"description": "",
832+
"name": "time_indeterminate_nodata_percent",
833+
"type": "number",
834+
"unit": "%"
835+
},
800836
{
801837
"description": "total seconds during core not running",
802838
"name": "time_indeterminate_notrunning",
803839
"type": "number",
804840
"unit": "s"
805841
},
842+
{
843+
"description": "",
844+
"name": "time_indeterminate_notrunning_percent",
845+
"type": "number",
846+
"unit": "%"
847+
},
806848
{
807849
"description": "total seconds outside the given timeperiod",
808850
"name": "time_indeterminate_outside_timeperiod",
809851
"type": "number",
810852
"unit": "s"
811853
},
854+
{
855+
"description": "",
856+
"name": "time_indeterminate_outside_timeperiod_percent",
857+
"type": "number",
858+
"unit": "%"
859+
},
812860
{
813861
"description": "total seconds in state unreachable",
814862
"name": "time_unreachable",
815863
"type": "number",
816864
"unit": "s"
817865
},
866+
{
867+
"description": "",
868+
"name": "time_unreachable_percent",
869+
"type": "number",
870+
"unit": "%"
871+
},
818872
{
819873
"description": "total seconds in state up",
820874
"name": "time_up",
821875
"type": "number",
822876
"unit": "s"
877+
},
878+
{
879+
"description": "",
880+
"name": "time_up_percent",
881+
"type": "number",
882+
"unit": "%"
823883
}
824884
]
825885
}
@@ -1457,71 +1517,143 @@ __DATA__
14571517
"type": "number",
14581518
"unit": "s"
14591519
},
1520+
{
1521+
"description": "",
1522+
"name": "scheduled_time_critical_percent",
1523+
"type": "number",
1524+
"unit": "%"
1525+
},
14601526
{
14611527
"description": "total seconds unknown (during downtimes)",
14621528
"name": "scheduled_time_indeterminate",
14631529
"type": "number",
14641530
"unit": "s"
14651531
},
1532+
{
1533+
"description": "",
1534+
"name": "scheduled_time_indeterminate_percent",
1535+
"type": "number",
1536+
"unit": "%"
1537+
},
14661538
{
14671539
"description": "total seconds in state ok (during downtimes)",
14681540
"name": "scheduled_time_ok",
14691541
"type": "number",
14701542
"unit": "s"
14711543
},
1544+
{
1545+
"description": "",
1546+
"name": "scheduled_time_ok_percent",
1547+
"type": "number",
1548+
"unit": "%"
1549+
},
14721550
{
14731551
"description": "total seconds in state unknown (during downtimes)",
14741552
"name": "scheduled_time_unknown",
14751553
"type": "number",
14761554
"unit": "s"
14771555
},
1556+
{
1557+
"description": "",
1558+
"name": "scheduled_time_unknown_percent",
1559+
"type": "number",
1560+
"unit": "%"
1561+
},
14781562
{
14791563
"description": "total seconds in state warning (during downtimes)",
14801564
"name": "scheduled_time_warning",
14811565
"type": "number",
14821566
"unit": "s"
14831567
},
1568+
{
1569+
"description": "",
1570+
"name": "scheduled_time_warning_percent",
1571+
"type": "number",
1572+
"unit": "%"
1573+
},
14841574
{
14851575
"description": "total seconds in state critical",
14861576
"name": "time_critical",
14871577
"type": "number",
14881578
"unit": "s"
14891579
},
1580+
{
1581+
"description": "",
1582+
"name": "time_critical_percent",
1583+
"type": "number",
1584+
"unit": "%"
1585+
},
14901586
{
14911587
"description": "total seconds without any data",
14921588
"name": "time_indeterminate_nodata",
14931589
"type": "number",
14941590
"unit": "s"
14951591
},
1592+
{
1593+
"description": "",
1594+
"name": "time_indeterminate_nodata_percent",
1595+
"type": "number",
1596+
"unit": "%"
1597+
},
14961598
{
14971599
"description": "total seconds during core not running",
14981600
"name": "time_indeterminate_notrunning",
14991601
"type": "number",
15001602
"unit": "s"
15011603
},
1604+
{
1605+
"description": "",
1606+
"name": "time_indeterminate_notrunning_percent",
1607+
"type": "number",
1608+
"unit": "%"
1609+
},
15021610
{
15031611
"description": "total seconds outside the given timeperiod",
15041612
"name": "time_indeterminate_outside_timeperiod",
15051613
"type": "number",
15061614
"unit": "s"
15071615
},
1616+
{
1617+
"description": "",
1618+
"name": "time_indeterminate_outside_timeperiod_percent",
1619+
"type": "number",
1620+
"unit": "%"
1621+
},
15081622
{
15091623
"description": "total seconds in state ok",
15101624
"name": "time_ok",
15111625
"type": "number",
15121626
"unit": "s"
15131627
},
1628+
{
1629+
"description": "",
1630+
"name": "time_ok_percent",
1631+
"type": "number",
1632+
"unit": "%"
1633+
},
15141634
{
15151635
"description": "total seconds in state unknown",
15161636
"name": "time_unknown",
15171637
"type": "number",
15181638
"unit": "s"
15191639
},
1640+
{
1641+
"description": "",
1642+
"name": "time_unknown_percent",
1643+
"type": "number",
1644+
"unit": "%"
1645+
},
15201646
{
15211647
"description": "total seconds in state warning",
15221648
"name": "time_warning",
15231649
"type": "number",
15241650
"unit": "s"
1651+
},
1652+
{
1653+
"description": "",
1654+
"name": "time_warning_percent",
1655+
"type": "number",
1656+
"unit": "%"
15251657
}
15261658
]
15271659
}

lib/Thruk/Controller/Rest/V1/outages.pm

+29
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ sub _rest_query_time_filter {
268268
}
269269
# combine remaining filter again
270270
$c->req->parameters->{'q'} = Thruk::Utils::Status::filter2text($c, undef, $filter);
271+
272+
return;
271273
}
272274

273275
##########################################################
@@ -349,9 +351,36 @@ sub _rest_availability {
349351
require Thruk::Utils::Avail;
350352
my $avail = Thruk::Utils::Avail::calculate_availability($c);
351353

354+
# add percentage values
355+
my $duration = $avail->{'avail'}->{'total'}->{'duration'};
356+
for my $hst (sort keys %{$avail->{'avail'}->{'hosts'}}) {
357+
_rest_add_avail_percent($avail->{'avail'}->{'hosts'}->{$hst}, $duration);
358+
}
359+
for my $hst (sort keys %{$avail->{'avail'}->{'services'}}) {
360+
for my $svc (sort keys %{$avail->{'avail'}->{'services'}->{$hst}}) {
361+
_rest_add_avail_percent($avail->{'avail'}->{'services'}->{$hst}->{$svc}, $duration);
362+
}
363+
}
364+
352365
return($avail);
353366
}
354367

368+
##########################################################
369+
sub _rest_add_avail_percent {
370+
my($avail, $duration) = @_;
371+
372+
for my $key (keys %{$avail}) {
373+
next if $key =~ m/_percent$/gmx;
374+
my $perc = 0;
375+
if($duration > 0) {
376+
$perc = ($avail->{$key} / $duration) * 100;
377+
}
378+
$avail->{$key.'_percent'} = $perc;
379+
}
380+
381+
return;
382+
}
383+
355384
##########################################################
356385
sub _rest_outages {
357386
my($c) = @_;

0 commit comments

Comments
 (0)