/src/rocksdb/options/offpeak_time_info.cc
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) Meta Platforms, Inc. and affiliates. |
2 | | // This source code is licensed under both the GPLv2 (found in the |
3 | | // COPYING file in the root directory) and Apache 2.0 License |
4 | | // (found in the LICENSE.Apache file in the root directory). |
5 | | |
6 | | #include "options/offpeak_time_info.h" |
7 | | |
8 | | #include "rocksdb/system_clock.h" |
9 | | #include "util/string_util.h" |
10 | | |
11 | | namespace ROCKSDB_NAMESPACE { |
12 | 0 | OffpeakTimeOption::OffpeakTimeOption() : OffpeakTimeOption("") {} |
13 | 13.9k | OffpeakTimeOption::OffpeakTimeOption(const std::string& offpeak_time_string) { |
14 | 13.9k | SetFromOffpeakTimeString(offpeak_time_string); |
15 | 13.9k | } |
16 | | |
17 | | void OffpeakTimeOption::SetFromOffpeakTimeString( |
18 | 13.9k | const std::string& offpeak_time_string) { |
19 | 13.9k | const int old_start_time = daily_offpeak_start_time_utc; |
20 | 13.9k | const int old_end_time = daily_offpeak_end_time_utc; |
21 | 13.9k | if (TryParseTimeRangeString(offpeak_time_string, daily_offpeak_start_time_utc, |
22 | 13.9k | daily_offpeak_end_time_utc)) { |
23 | 13.9k | daily_offpeak_time_utc = offpeak_time_string; |
24 | 13.9k | } else { |
25 | 0 | daily_offpeak_start_time_utc = old_start_time; |
26 | 0 | daily_offpeak_end_time_utc = old_end_time; |
27 | 0 | } |
28 | 13.9k | } |
29 | | |
30 | | OffpeakTimeInfo OffpeakTimeOption::GetOffpeakTimeInfo( |
31 | 0 | const int64_t& current_time) const { |
32 | 0 | OffpeakTimeInfo offpeak_time_info; |
33 | 0 | if (daily_offpeak_start_time_utc == daily_offpeak_end_time_utc) { |
34 | 0 | return offpeak_time_info; |
35 | 0 | } |
36 | 0 | int seconds_since_midnight = static_cast<int>(current_time % kSecondsPerDay); |
37 | 0 | int seconds_since_midnight_to_nearest_minute = |
38 | 0 | (seconds_since_midnight / kSecondsPerMinute) * kSecondsPerMinute; |
39 | | // if the offpeak duration spans overnight (i.e. 23:30 - 4:30 next day) |
40 | 0 | if (daily_offpeak_start_time_utc > daily_offpeak_end_time_utc) { |
41 | 0 | offpeak_time_info.is_now_offpeak = |
42 | 0 | daily_offpeak_start_time_utc <= |
43 | 0 | seconds_since_midnight_to_nearest_minute || |
44 | 0 | seconds_since_midnight_to_nearest_minute <= daily_offpeak_end_time_utc; |
45 | 0 | } else { |
46 | 0 | offpeak_time_info.is_now_offpeak = |
47 | 0 | daily_offpeak_start_time_utc <= |
48 | 0 | seconds_since_midnight_to_nearest_minute && |
49 | 0 | seconds_since_midnight_to_nearest_minute <= daily_offpeak_end_time_utc; |
50 | 0 | } |
51 | 0 | offpeak_time_info.seconds_till_next_offpeak_start = |
52 | 0 | seconds_since_midnight < daily_offpeak_start_time_utc |
53 | 0 | ? daily_offpeak_start_time_utc - seconds_since_midnight |
54 | 0 | : ((daily_offpeak_start_time_utc + kSecondsPerDay) - |
55 | 0 | seconds_since_midnight); |
56 | 0 | return offpeak_time_info; |
57 | 0 | } |
58 | | |
59 | | } // namespace ROCKSDB_NAMESPACE |