trafficmonitor init...2
This commit is contained in:
parent
593e6ba0e9
commit
c0e3dc577b
@ -36,56 +36,24 @@ class CollectorModel extends CommonModel
|
|||||||
->first(); // 첫 번째 레코드(=가장 최신)
|
->first(); // 첫 번째 레코드(=가장 최신)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* DESC 기준 95% + 1번째 값을 가져오는 함수
|
|
||||||
*
|
|
||||||
* @param string $field in_kbits 또는 out_kbits
|
|
||||||
* @param string $startDate '2024-10-01'
|
|
||||||
* @param string $endDate '2024-10-30'
|
|
||||||
* @return mixed 해당 자리의 수치값
|
|
||||||
*/
|
|
||||||
public function get95PercentileValue_OLD(TrafficEntity $trafficEntity, string $field, string $startDate, string $endDate)
|
|
||||||
{
|
|
||||||
// 1) 해당 조건의 전체 개수 구하기
|
|
||||||
$total =
|
|
||||||
$this->where("trafficinfo_uid", $trafficEntity->getPK())
|
|
||||||
->where("created_at >=", $startDate)
|
|
||||||
->where("created_at <=", $endDate)
|
|
||||||
->countAllResults(true); // true해야 queryu reset 함
|
|
||||||
// false = 쿼리 빌더 초기화 X
|
|
||||||
if ($total === 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
// 2) index = floor(total * 0.95)
|
|
||||||
$index = floor($total * 0.95);
|
|
||||||
// 3) 95% + 1 번째 값 조회
|
|
||||||
$builder = $this->builder();
|
|
||||||
$builder->select($field)
|
|
||||||
->where("trafficinfo_uid", $trafficEntity->getPK())
|
|
||||||
->where("created_at >=", $startDate)
|
|
||||||
->where("created_at <=", $endDate)
|
|
||||||
->orderBy($field, "DESC")
|
|
||||||
->limit(1, $index - 1); // LIMIT offset, 1
|
|
||||||
|
|
||||||
// 🔥 실행되기 전에 SQL 확인
|
|
||||||
$sql = $builder->getCompiledSelect(false); //반드시 false해야 queryu reset 않함
|
|
||||||
log_message('debug', '[95PERCENTILE QUERY] ' . $sql);
|
|
||||||
$row = $builder->get()->getFirstRow('array');
|
|
||||||
return $row[$field] ?? null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get95PercentileValue(TrafficEntity $trafficEntity, string $field, string $startDate, string $endDate)
|
public function get95PercentileValue(TrafficEntity $trafficEntity, string $field, string $startDate, string $endDate)
|
||||||
{
|
{
|
||||||
$sql = "WITH ranked AS (
|
$sql = "WITH ranked AS (
|
||||||
SELECT `{$field}`,`created_at`, ROW_NUMBER() OVER (ORDER BY `in` DESC) AS rn,COUNT(*) OVER () AS total
|
SELECT `{$field}`,`created_at`, ROW_NUMBER() OVER (ORDER BY `{$field}` DESC) AS rn,COUNT(*) OVER () AS total
|
||||||
FROM {$this->table}
|
FROM {$this->table}
|
||||||
WHERE trafficinfo_uid = ?
|
WHERE trafficinfo_uid = ?
|
||||||
AND created_at BETWEEN ? AND ?
|
AND created_at BETWEEN ? AND ?
|
||||||
)
|
)
|
||||||
SELECT `{$field}`
|
SELECT `{$field}`
|
||||||
FROM ranked
|
FROM ranked
|
||||||
WHERE rn = FLOOR(total * 0.05) + 1
|
WHERE rn = FLOOR(total * 0.05)
|
||||||
LIMIT 1";
|
LIMIT 1";
|
||||||
return $this->query($sql, [$trafficEntity->getPK(), $startDate, $endDate])->getRowArray()[$field];
|
$result = $this->query($sql, [
|
||||||
|
$trafficEntity->getPK(),
|
||||||
|
$startDate,
|
||||||
|
$endDate
|
||||||
|
]);
|
||||||
|
log_message('debug', '[95PERCENTILE SQL] :' . $this->db->getLastQuery());
|
||||||
|
return $result->getRow()->$field ?? null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -118,7 +118,7 @@
|
|||||||
const out95 = calculates.out_kbits ?? '-';
|
const out95 = calculates.out_kbits ?? '-';
|
||||||
|
|
||||||
// 차트 제목 업데이트
|
// 차트 제목 업데이트
|
||||||
chartTitleElement.textContent = `트래픽 속도 추이 (IN: ${in95} Kbit/s, OUT: ${out95} Kbit/s)`;
|
chartTitleElement.textContent = `트래픽 속도 추이 , 상위5%를 제외한 최대값=>(IN: ${in95} Kbit/s, OUT: ${out95} Kbit/s)`;
|
||||||
|
|
||||||
const data = result.data || [];
|
const data = result.data || [];
|
||||||
if (data.length === 0) {
|
if (data.length === 0) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user