๋ฌธ์ ์ต์ ํ๋ฅผ ์ํด์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ ๋๋ ์์ ํ ๋ถ๋ถ์ด ๋ฐ๊ฒฌ๋๋ฉด ๋ฐ๊ฒฌ์๊ฐ ๊ผญ! ์์ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. !!!
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();
}
}
}
ย
ย