Example #1
0
void PerformanceMonitor::OnTimer(UINT_PTR /*timer_id*/) {
  std::vector<double> cpu;
  if (cpu_counter_->Next(&cpu) && !cpu.empty()) {
    auto max = std::max_element(cpu.begin(), cpu.end());
    if (*max > cpu_usage_threshold_)
      cpu_time_ = 0;
    else
      ++cpu_time_;
  }

  std::vector<double> disk;
  if (disk_counter_->Next(&disk) && !disk.empty()) {
    auto max = std::max_element(disk.begin(), disk.end());
    if (*max > disk_usage_threshold_)
      disk_time_ = 0;
    else
      ++disk_time_;
  }

  std::vector<double> traffic;
  if (traffic_counter_->Next(&traffic) && !traffic.empty()) {
    auto total = std::accumulate(traffic.begin(), traffic.end(), 0.0);
    if (total > traffic_threshold_)
      traffic_time_ = 0;
    else
      ++traffic_time_;
  }

  if (!enabled_)
    return;

  auto would_block =
      monitor_cpu_ && cpu_time_ < cpu_time_threshold_ ||
      monitor_disk_ && disk_time_ < disk_time_threshold_ ||
      monitor_traffic_ && traffic_time_ < traffic_time_threshold_;

  if (block_ && !would_block) {
    UnblockShutdown();

    if (sleep_) {
      sleep_ = false;
      SetSuspendState(FALSE, FALSE, FALSE);
    }
  } else if (!block_ && would_block) {
    BlockShutdown();
  }
}
Example #2
0
void ProcessLocalData(LOCALPKT *local)
{
BOOL ok;
static char *fid = "ProcessLocalData";

    local->raw.hdr.status = ISI_RAW_STATUS_OK;

    MUTEX_LOCK(&local->mutex);

    /* If appropriate, add sequence number and time stamps to the packet headers */

        switch (local->raw.hdr.desc.type) {
          case ISI_TYPE_IDA9:
            CompleteIda9Header(&local->raw, local->dl, local->rt593);
            break;
          case ISI_TYPE_IDA5:
          case ISI_TYPE_IDA6:
            CompleteIda5Header(&local->raw, local->dl);
            break;
          case ISI_TYPE_IDA10:
            CompleteIda10Header(&local->raw, local->dl);
            break;
#ifdef INCLUDE_Q330
          case ISI_TYPE_QDPLUS:
            CompleteQdplusHeader(&local->raw, local->dl);
            break;
#endif /* INCLUDE_Q330 */
        }

    /* Write to the disk loop */

        BlockShutdown(fid);
            ok = isidlWriteToDiskLoop(local->dl, &local->raw, ISI_OPTION_GENERATE_SEQNO);
        UnblockShutdown(fid);
    MUTEX_UNLOCK(&local->mutex);

    if (!ok) {
        LogMsg(LOG_INFO, "%s: isidlWriteToDiskLoop: %s", fid, strerror(errno));
        Exit(MY_MOD_ID + 2);
    }
}