Coverage Report

Created: 2024-07-27 06:53

/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