diff --git a/app/tools/controller/timer/NginxLogStatAggregate.php b/app/tools/controller/timer/NginxLogStatAggregate.php new file mode 100644 index 0000000..a21f7b4 --- /dev/null +++ b/app/tools/controller/timer/NginxLogStatAggregate.php @@ -0,0 +1,20 @@ +request->param('date', ''); + $manualHour = $this->request->param('hour', ''); + + if ($manualDate !== '' && $manualHour !== '') { + // 手动模式:强校验 + $dateInt = (int) $manualDate; + $hourInt = (int) $manualHour; + // YYYYMMDD 范围:10000101 ~ 99991231;hour: 0-23 + if ($dateInt < 10000101 || $dateInt > 99991231) { + return json_encode(['error' => 'invalid date format, expect YYYYMMDD'], JSON_UNESCAPED_UNICODE); + } + if ($hourInt < 0 || $hourInt > 23) { + return json_encode(['error' => 'invalid hour, expect 0-23'], JSON_UNESCAPED_UNICODE); + } + } else { + // 默认模式:取当前时间 - 1 小时(按服务器时区,框架 default_timezone=Asia/Shanghai) + $ts = time() - 3600; + $dateInt = (int) date('Ymd', $ts); + $hourInt = (int) date('G', $ts); + } + + // 3. 依赖倒置:调用 app 层入口类(业务侧可重写拦截) + $aggregator = new \app\common\service\NginxLogAggregator(); + $result = $aggregator->aggregateHour($dateInt, $hourInt); + + // 4. return JSON(补充窗口信息便于日志检索) + return json_encode(array_merge([ + 'stat_date' => $dateInt, + 'stat_hour' => $hourInt, + ], $result), JSON_UNESCAPED_UNICODE); + } +}