포인트 검색 (/ui/point) — 시계열 데이터 조회
특정 태그의 수집된 시계열 데이터 를 기간으로 조회하고, 결과를 표 / CSV 로 내려받는 화면입니다. 운영자가 어제 09시 ~ 11시 사이 PLC 값이 정상 범위였는지 같은 점검을 빠르게 수행할 때 사용합니다.
좌측 사이드바 데이터베이스 아이콘(fa-database) → 클릭 또는 직접 http://<게이트웨이>/ui/point.
1. 화면 구조
┌────────────────────────────────────────────────────────────────┐
│ ⊙ 포인트 검색 — 시계열 데이터 조회 · TM_TAG_POINT [←] [↻] │
├────────────────────┬───────────────────────────────────────────┤
│ [검색 조건] │ [포인트 목록 — 최신 순] [CSV 다운로드] │
│ ─ 검색 기간 │ ┌──────────────────────────────────────┐ │
│ ─ OPC ID * │ │ 시각 │ 태그 ID │ 값 │ 타입 │ 품질 │ 에러 │ │
│ ─ 태그 ID * │ └──────────────────────────────────────┘ │
│ [검색] │ … │
└────────────────────┴───────────────────────────────────────────┘
좌측 패널 width 는 표준 col-md-2 보다 +50px 더 넓혀 라벨/콤보박스 잘림을 방지합니다.
2. 상단 바
| 버튼 | 동작 |
|---|---|
← (fa-arrow-left) | /ui/main 으로 돌아가기 |
↻ (fa-sync) | point.search() 다시 호출 (기존 조건 유지, 새로고침 용도) |
3. 검색 조건 (좌측 패널)
3.1 검색 기간 (s_date_range)
- daterangepicker 기반 — 형식
YYYY-MM-DD HH:mm ~ YYYY-MM-DD HH:mm - 화면 진입 시 최근 1시간 으로 자동 채워집니다 (
moment().subtract(1, 'hours')~moment()) - 클릭 → 달력 + 시간 선택 팝업
3.2 OPC ID (필수)
POST /connect/opc/list결과로 콤보박스 채움 —opc_id알파벳 ASC 정렬- 라벨 형식:
OPC_ID (OPC_NAME)— name 이 비면OPC_ID만 표시 - 선택을 바꾸면 아래 태그 ID 콤보가 그 OPC 소속 태그로 다시 로드됩니다
3.3 태그 ID (필수)
- OPC 선택 전:
disabled+ 안내 옵션 — OPC 선택 후 로드 — - OPC 선택 후
POST /connect/tag/list { opc_id }결과로 채움 —tag_idASC 정렬 - 라벨 형식:
TAG_ID (TAG_NAME)— name 이 비면TAG_ID만 - 로드 실패 시 — 로드 실패 — 옵션 노출 + 토스트 에러
태그를 안 고르고 검색을 누르면
"OPC 와 태그를 먼저 선택해 주십시오." 모달이 뜹니다 (bootbox alert) — 데이터 부재로 빈 결과 + 시간만 낭비되는 것을 방지하는 가드입니다.
4. 결과 테이블 (6 컬럼)
GET /point/search 응답을 DataTables 가 그립니다. 기본 정렬은 시각 desc (가장 최근부터).
| # | 컬럼 | 폭 | 정렬 | 표시 / 의미 |
|---|---|---|---|---|
| 1 | 시각 | 180px | desc default | timestamp.iso 또는 raw timestamp — 중앙 정렬 |
| 2 | 태그 ID | 180px | — | 검색한 태그 ID — 중앙 정렬 |
| 3 | 값 | * (가변) | — | 타입에 따라 정렬이 달라집니다 — integer/long/float/double 은 우측, boolean/string 등은 중앙 (UI-DESIGN 의 표 값 정렬 규칙) — 굵은 글씨 |
| 4 | 타입 | 100px | — | formatTypeBadge() 로 만든 색 뱃지 (예: STRING / INT / DOUBLE / BOOL) |
| 5 | 품질 | 70px | — | OPC quality code (예: 192=Good). 비면 빈 칸 |
| 6 | 에러 | 70px | — | error_code 가 0/null 이면 — (회색), 그 외에는 빨강 코드 표시 |
페이지 길이: 10 / 20 / 50 / 100 / 1000 — 기본 100. 한국어 인터페이스 (Korean.json).
5. CSV 다운로드
우측 상단 CSV 다운로드 버튼 — point.csv() 호출.
- 로컬 export — 마지막 검색 결과 (
point._lastData) 를 클라이언트 측에서 CSV 로 변환 → 즉시 다운로드. 서버 추가 호출 없음 - 파일명:
point_<TAG_ID>_<TIMESTAMP>.csv형태 (예:point_TAG_LS_XBC_0001_20260510_1530.csv) - 컬럼: 시각 / 태그 ID / 값 / 타입 / 품질 / 에러 — UI 표와 동일
검색 결과가 없는데 CSV 누르면
"먼저 검색해 주십시오." 안내 모달 — 빈 CSV 발급 방지.
6. 데이터 출처
화면이 조회하는 백엔드 흐름:
PLC → Collector → PointProcessor → Cassandra: tm_tag_point (TTL = edge.ttl 일)
↑
/point/search?tag_id&from&to
- TTL 만료된 데이터는 더 이상 조회되지 않습니다.
app.properties의edge.ttl기본 30 일. tm_tag_point의 row 는(tag_id, time_bucket, time)클러스터링 — 짧은 기간 검색이 빠릅니다. 한 달 이상 한 번에 긁으면 응답이 느려질 수 있어 수십 분 ~ 몇 시간 단위 권장.
7. 운영 팁
- 이상 값 추적: 알람이 떴던 시각을 검색 기간 안에 두고 그 태그를 조회 — 갑작스런 spike / 0 값 / quality 변화가 보입니다
- PLC 통신 끊김: 동일 태그의 에러 컬럼이 일정 시간 빨강 코드로 도배되어 있으면 PLC 응답 실패 구간 —
/ui/connect/list에서 수집 상태 와 교차 확인 - CSV 후 Excel: 다운로드 받은 CSV 를 Excel/LibreOffice 에서 열고 값 컬럼으로 추세 차트를 그리면 빠른 시각화 — 본격 차트는 실시간 값 보기 또는 태그 값 추이 보기 활용
8. 관련 문서
- 실시간 값 보기 (
/ui/connect/tag-view) — 단일 태그를 1초 폴링 + 라이브 차트 - 수집 이력 보기
- REST API —
GET /api/v1/tag/{tag_id}/value— X-API-Key 로 외부 시스템에서 동일 데이터를 직접 조회