/* @tier medium @module cm @transform common-online */ /* * cm_ol_0025.pgc - 파라미터 갱신 확인 서비스 (CM_OL_0025) [tier=medium] * * 파라미터키(PKEY)로 운영 파라미터(cm_param)를 조회하여 최종수정시각 * (upd_ts)을 요청 기준시각(SINCE, YYYYMMDDHH24MISS)과 비교, 기준시각 이후 * 변경 여부(CHANGED=Y/N)와 현재값을 응답한다. 캐시 갱신 판단에 사용한다. * (ATMI void SVC(TPSVCINFO*) 대응) */ #include #include #include "txcore.h" #include "txcore_dbio.h" #include "acq_util.h" #include "cm_core.h" EXEC SQL INCLUDE sqlca; TX_SERVICE(CM_OL_0025, ctx) { EXEC SQL BEGIN DECLARE SECTION; char h_pkey[32]; char h_pval[128]; char h_updts[16]; EXEC SQL END DECLARE SECTION; char pkey[32]; char since[16]; int changed; tx_log(TX_LOG_INFO, "[CM_OL_0025] 파라미터 갱신 확인 서비스 진입"); if (tx_buf_get(ctx->in, "PKEY", pkey, sizeof(pkey)) != TX_OK || tx_buf_get(ctx->in, "SINCE", since, sizeof(since)) != TX_OK) { tx_log(TX_LOG_ERROR, "[CM_OL_0025] PKEY/SINCE 누락"); tx_return(ctx, TX_EINVAL, ctx->out); return; } memset(&h_pkey, 0, sizeof(h_pkey)); memset(&h_pval, 0, sizeof(h_pval)); memset(&h_updts, 0, sizeof(h_updts)); strncpy(h_pkey, pkey, sizeof(h_pkey) - 1); EXEC SQL SELECT param_val, TO_CHAR(upd_ts, 'YYYYMMDDHH24MISS') INTO :h_pval, :h_updts FROM cm_param WHERE param_key = :h_pkey; if (sqlca.sqlcode == TX_SQL_NOTFOUND) { tx_log(TX_LOG_WARN, "[CM_OL_0025] 파라미터 없음 pkey=%s", pkey); tx_return(ctx, TX_ENOENT, ctx->out); return; } if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("CM_OL_0025 SELECT cm_param"); tx_return(ctx, TX_EDB, ctx->out); return; } /* 최종수정시각 문자열 사전식 비교: 기준시각보다 크면 변경됨 */ changed = (strncmp(h_updts, since, sizeof(h_updts)) > 0) ? 1 : 0; tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "PKEY", pkey); tx_buf_sets(ctx->out, "PVAL", h_pval); tx_buf_sets(ctx->out, "UPDTS", h_updts); tx_buf_sets(ctx->out, "CHANGED", changed ? "Y" : "N"); tx_log(TX_LOG_INFO, "[CM_OL_0025] 확인완료 pkey=%s upd=%s since=%s changed=%s", pkey, h_updts, since, changed ? "Y" : "N"); tx_return(ctx, TX_OK, ctx->out); }