/
WIGOMON

๋ฌธ์„œ ์ตœ์‹ ํ™”๋ฅผ ์œ„ํ•ด์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„ ๋˜๋Š” ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ๋ฐœ๊ฒฌ์ž๊ฐ€ ๊ผญ! ์ˆ˜์ •ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. !!!

WIGOMON

NIPA ์„œ๋น„์Šค์— ์ ์šฉํ•œ slack bot๊ณผ ํฐ ์ฐจ์ด๋Š” ์—†์ง€๋งŒ ์ž์‚ฌ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ์ ์„ ๊ณ ๋ คํ•ด ๊ฐ€๋ณ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค ์ฒดํฌ ์‹œ DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ๊ด€๋ฆฌ์šฉ ์›น์— ์—…๋กœ๋“œ ๋˜๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์†์ ์œผ๋กœ ์กฐํšŒํ•˜๋ฉด์„œ ์„œ๋น„์Šค์˜ ์ •์ƒ ๋™์ž‘์„ ํ™•์ธํ–ˆ๋‹ค.

ย 

URL url = new URL(dataUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDefaultUseCaches(false); connection.setDoInput(true); // ์„œ๋ฒ„์—์„œ ์ฝ๊ธฐ ๋ชจ๋“œ ์ง€์ • connection.setDoOutput(true); // ์„œ๋ฒ„๋กœ ์“ฐ๊ธฐ ๋ชจ๋“œ ์ง€์ • connection.setRequestMethod("POST"); connection.setRequestProperty("content-type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Cookie", session); try ( OutputStreamWriter outStream = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8); PrintWriter writer = new PrintWriter(outStream)) { String buffer = "eKey=E214"; writer.write(buffer); writer.flush(); } try (InputStreamReader tmp = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8); BufferedReader reader = new BufferedReader(tmp)) { StringBuilder builder = new StringBuilder(); String str; while ((str = reader.readLine()) != null) { builder.append(str + "\n"); } data = builder.toString(); }

ย 

ํ•ด๋‹น ์›น ์„œ๋ฒ„๋Š” ์„ธ์…˜์ด ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์‹œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์„ธ์…˜์„ ํ• ๋‹นํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ–ˆ๋‹ค.

ย 

private String getSession() { String session = ""; try { CookieManager cookieManager = new CookieManager(); CookieHandler.setDefault(cookieManager); URL url = new URL(loginUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDefaultUseCaches(false); connection.setDoInput(true); // ์„œ๋ฒ„์—์„œ ์ฝ๊ธฐ ๋ชจ๋“œ ์ง€์ • connection.setDoOutput(true); // ์„œ๋ฒ„๋กœ ์“ฐ๊ธฐ ๋ชจ๋“œ ์ง€์ • connection.setRequestMethod("POST"); connection.setRequestProperty("content-type", "application/x-www-form-urlencoded"); try (OutputStreamWriter outStream = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8); PrintWriter writer = new PrintWriter(outStream)) { String buffer = "a_username" + "=" + id + "&" + "a_password" + "=" + password + "&"; writer.write(buffer); writer.flush(); } connection.getContent(); List<HttpCookie> cookies = cookieManager.getCookieStore().getCookies(); for (HttpCookie cookie : cookies) { if (cookie.toString().contains("JSESSIONID")) { session = cookie.toString(); } } } catch (IOException e) { return session; } return session; }

ย 

์ด๋ ‡๊ฒŒ ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” wigomon ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ›„ ๋ณ€๊ฒฝ๋˜๋Š” cdc number์ด๋ฉฐ ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋ฉด ์ตœ์†Œ 1์‹œ๊ฐ„์— ํ•œ๋ฒˆ์€ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

ย 

๊ทธ๋ž˜์„œ ํ•ด๋‹น slack bot์€ ํ•œ์‹œ๊ฐ„์— ํ•œ๋ฒˆ์”ฉ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ์ด์ „์— ์กฐํšŒํ•œ ๊ฐ’๊ณผ ์ƒˆ๋กœ ์กฐํšŒํ•œ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ์„œ๋น„์Šค์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.

private void job() { logger.debug("Check last CDN number"); String lastCdcNo = new DataReader().getLastCdcNo(); if (lastCdcNo.equals(this.lastCdcNo)) { logger.debug("Service has problems"); slackBot.sendMentionedMessageToChannel("์„œ๋น„์Šค์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค."); errorFlag = true; cycleCount = 0; if (delayHour < delayHourLimit) { delayHour++; slackBot.sendMessageToChannel("์„œ๋น„์Šค ์ฒดํฌ ๋”œ๋ ˆ์ด๋ฅผ ๋Šฆ์ถฅ๋‹ˆ๋‹ค. (ํ˜„์žฌ " + delayHour + "์‹œ๊ฐ„)"); } } else if (errorFlag) { slackBot.sendMentionedMessageToChannel("์„œ๋น„์Šค๊ฐ€ ์ •์ƒํ™” ๋์Šต๋‹ˆ๋‹ค."); errorFlag = false; delayHour = baseDelayHour; } this.lastCdcNo = lastCdcNo; }

ย 

์„œ๋น„์Šค์— ๋ฌธ์ œ๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜์—ฌ ์žฅ์‹œ๊ฐ„ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๋•Œ ์ง€์†์ ์œผ๋กœ ๋ฉ”์„ธ์ง€๊ฐ€ ์˜ค๋Š”๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ๋”œ๋ ˆ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.

ย 

๋งˆ์ง€๋ง‰์œผ๋กœ ํ•ด๋‹น slack bot์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์„œ๋ฒ„ ์ž์ฒด์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ ์„œ๋น„์Šค ์ฒดํฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด ์„œ๋น„์Šค ์ฒดํฌ๊ฐ€ 24๋ฒˆ ์ด๋ฃจ์–ด์ง€๋ฉด (์ตœ์†Œ 24์‹œ๊ฐ„) ๊ด€๋ฆฌ์ž์—๊ฒŒ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.

public void work() { logger.debug("Service check start"); while (true) { try { Thread.sleep(delayHour * 60 * 60 * 1000); job(); if (++cycleCount > 24 * 7) { slackBot.sendMessageToChannel("WIGOMON Checker๊ฐ€ ์ •์ƒ ๋™์ž‘์ค‘์ž…๋‹ˆ๋‹ค."); cycleCount = 0; } } catch (InterruptedException | RuntimeException e) { e.printStackTrace(); } } }

ย 

ย 

Copyright(c) WIGO Corp. All rights reserved.