MCPcopy Create free account
hub / github.com/Icinga/icinga2 / OnConfigUpdateHeavy

Method OnConfigUpdateHeavy

lib/db_ido/timeperioddbobject.cpp:35–86  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33}
34
35void TimePeriodDbObject::OnConfigUpdateHeavy()
36{
37 TimePeriod::Ptr tp = static_pointer_cast<TimePeriod>(GetObject());
38
39 DbQuery query_del1;
40 query_del1.Table = GetType()->GetTable() + "_timeranges";
41 query_del1.Type = DbQueryDelete;
42 query_del1.Category = DbCatConfig;
43 query_del1.WhereCriteria = new Dictionary({
44 { "timeperiod_id", DbValue::FromObjectInsertID(tp) }
45 });
46 OnQuery(query_del1);
47
48 Dictionary::Ptr ranges = tp->GetRanges();
49
50 if (!ranges)
51 return;
52
53 time_t refts = Utility::GetTime();
54 ObjectLock olock(ranges);
55 for (const Dictionary::Pair& kv : ranges) {
56 int wday = LegacyTimePeriod::WeekdayFromString(kv.first);
57
58 if (wday == -1)
59 continue;
60
61 tm reference = Utility::LocalTime(refts);
62
63 Array::Ptr segments = new Array();
64 LegacyTimePeriod::ProcessTimeRanges(kv.second, &reference, segments);
65
66 ObjectLock olock(segments);
67 for (const Value& vsegment : segments) {
68 Dictionary::Ptr segment = vsegment;
69 int begin = segment->Get("begin");
70 int end = segment->Get("end");
71
72 DbQuery query;
73 query.Table = GetType()->GetTable() + "_timeranges";
74 query.Type = DbQueryInsert;
75 query.Category = DbCatConfig;
76 query.Fields = new Dictionary({
77 { "instance_id", 0 }, /* DbConnection class fills in real ID */
78 { "timeperiod_id", DbValue::FromObjectInsertID(tp) },
79 { "day", wday },
80 { "start_sec", begin % 86400 },
81 { "end_sec", end % 86400 }
82 });
83 OnQuery(query);
84 }
85 }
86}

Callers

nothing calls this directly

Calls 2

GetTableMethod · 0.80
GetMethod · 0.45

Tested by

no test coverage detected