아주 심플하지만, 정말 해보고 싶었던 기능이었다..
중요한 웹 서버가 장애가 났을 때, 모니터링을 SMS로 받지만 모든 사람이 다 받기에는 고역이다.
그래서, 관리자도 알게 하고 주위로부터 일종의 경고를 알림으로서, 지금 우리는 장애를 처리하고 있다는 것을 알려주고 싶었다.
(자세한 내용은 아래 레퍼런스 참조)
http://knight76.tistory.com/entry/아두이노-프로세싱-연동-어플에서-버튼을-누르면-불-깜빡거리게-하기
http://knight76.tistory.com/entry/프로세싱-언어가-자바-언어로-변환
http://knight76.tistory.com/entry/프로세싱processing-이클립스연동
http://knight76.tistory.com/entry/me2day-의-특정-글에-리플을-달면-램프-깜박이게-하기-아두이노-이클립스-연동
이클립스 자바 소스
localhost로 떠있는 웹서버가 죽으면, 바로 깜박거리게 한다.
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Timer;
import java.util.TimerTask;
import processing.core.PApplet;
import processing.serial.Serial;
public class PingTest extends PApplet {
static int replyNumber = 0;
Serial port;
/**
* 초기화
*/
public void setup() {
System.out.println("setup - start");
System.out.println("Available serial ports:" + Serial.list().length);
for (String comport : Serial.list()) {
System.out.println(comport);
}
if (Serial.list().length == 0) {
System.out.println("## NO DETECT ##:");
System.out.println("end programe");
System.exit(0);
}
// list[1]에 com3로 arduino가 붙어 있다.
port = new Serial(this, Serial.list()[1], 9600);
ScheduleJob job = new ScheduleJob();
Timer jobScheduler = new Timer();
jobScheduler.schedule(job, 0, 3000);
System.out.println("setup - end");
}
// draw 메소드를 override 해줘야 JApplet을 이용해서 serial 을 사용하는 코드에서 문제가 나지 않는다.
public void draw() {
}
static public void main(String args[]) {
PApplet.main(new String[] { "--bgcolor=#F0F0F0", "PingTest" });
}
/**
* Timer Task를 상속함
*
*/
class ScheduleJob extends TimerTask {
@Override
public void run() {
if (!isok()) {
blink();
}
}
}
public boolean isok() {
String url = "http://localhost/";
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con;
try {
con = (HttpURLConnection) new URL(url).openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(5000);
con.connect();
} catch (MalformedURLException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 깜빡, 깜빡~
*/
public void blink() {
for (int i = 0; i < 3; i++) {
// turn on led
port.write(255);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
port.write(0);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
접속이 안되면, Exception이 생기고, LED가 깜박거리게 된다.
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
여기서 좀 더 응용을 하면, http response가 200, 304가 아닌 것에 대한 모든 것에 대해서 에러로 처리할 수도 있을 것이다.
'아두이노' 카테고리의 다른 글
프로세싱 언어와 PDE 코드 살펴보기 #1 (2) | 2011.12.20 |
---|---|
아두이노(arduino)와 선풍기 연결 (1) | 2011.12.20 |
me2day 의 특정 글에 리플을 달면 램프 깜박이게 하기 (아두이노-이클립스-Serial RXTX 연동) (0) | 2011.12.16 |
프로세싱(processing) + 이클립스(연동) (1) | 2011.12.12 |
프로세싱 언어가 자바 언어로 변환 (0) | 2011.12.09 |