Gws 20140117 lt
Click here to load reader
-
Upload
nobuhiro-sue -
Category
Documents
-
view
183 -
download
1
Transcript of Gws 20140117 lt
2014.1.17
須江信洋(@nobusue)
http://d.hatena.ne.jp/nobusue
https://www.facebook.com/nobuhiro.sue
G*ワークショップZ
2014新春LT大会
『Vert.xで何か作ってみた』
自己紹介
須江 信洋(すえ のぶひろ) Twitter: @nobusue
https://www.facebook.com/nobuhiro.sue
約10年ほどJavaEE関連の仕事をしてます
2013年10月よりフリーランス(個人事業主)
G*(Groovy関連技術)との関わり JGGUGサポートスタッフ
「プログラミングGROOVY」執筆チーム
「Groovy イン・アクション」翻訳チーム
2
憶えてますか?
3
2013.10.18 (10.20 updated)
須江信洋(@nobusue)
http://d.hatena.ne.jp/nobusue
https://www.facebook.com/nobuhiro.sue
G*ワークショップZ
Vert.xハンズオン w/ CRaSH
使わないと忘れちゃうよね・・・
ということで、作ってみました
Vert.x WebTail (仮称) WebSocketとNIO2でブラウザにtail –f
node.jsではポピュラーなネタらしい
でも、なんちゃってtail(内部でtail –fコマンド実行)ばっか・・・・
4
動機
Windowsでもtail-f 使いたい!!!
5
こんなの作ってみた
6
ファイル Verticle
socket
WebSocket
Vert.x Runtime(JVM)
polling
NIO2の
SeekableByteChannelで
ファイル末尾を読み込み
ブラウザ
WebTail.groovy (WebSocket)
7
def eb = vertx.eventBus
vertx.createHttpServer().websocketHandler { ws ->
eb.registerHandler("update", { message ->
ws.writeTextFrame(message.body())
})
}.requestHandler { req ->
if (req.uri == "/") req.response.sendFile “console.html"
}.listen(8080)
WebTail.groovy (tail部分抜粋)
8
def timerID = vertx.setPeriodic(1000) { timerID ->
size = sbc.size()
def sb = new StringBuilder()
if( size > lastsize ) {
while(sbc.read(buf) > 0) {
buf.flip()
sb << Charset.forName(encoding).decode(buf).toString()
}
print sb
eb.publish("update", sb.toString())
} else if ( size < lastsize ) {
サンプルコード
GitHubに置いてあります https://github.com/nobusue/vertx-webtail
「とりあえず動く」レベルの実装なので、改造歓迎
9
今後の野望
割と簡単にtail –fができたので満足
いろいろ拡張したい ポーリング ⇒ Java7のWatchService
メッセージ変換 ⇒ JSONなど
ElasticSearch対応 JSON変換してREST APIで投入すればいけそう
td-agentの代替 大人の事情でRuby系がNGな環境で・・・
10