Gauche-makiki で ホストが使用している port を表示する
こないだから触っていた netstatツールコンテナができました。
Gauche に付属していた example をごにょごにょしました。
実際に ポート情報を出力する部分(抜粋)はこんな感じ。
全体像は以下URLでコード見れます
https://github.com/moremagic/docker-netstat
結構複雑になっちゃった気がします。
もう少しうまい書き方があるんだろうな。
修行しよう
;; port-check app (define-http-handler "/port-check" (^[req app] (respond/ok req (html:html (html:head (html:title "Makiki-port-check")) (html:body (html:h1 "You're running server port-check") (html:p "The server is running since " app "at port " (request-server-port req) " on host " (request-server-host req) ".") (html:pre (string-join (use-port-string (iota (- 51000 32700) 32700) (strlist->numlist (map (^[s] (string-drop s 3)) (partition (^[s] (string-prefix? ":::" s)) (map (pick-num 3) (map (^[str] (string-split str #/\s+/)) (cmd-call '(netstat -an)))))))) "</br>")))))))
なお、 Dockerコンテナとして起動する場合は以下のようにしてみてください
docker run -dP --net=host moremagic/docker-netstat
http://hostname:8012/ にアクセスしてみてください。
COMMENT: AUTHOR: moremagic IP: 122.209.124.163 date: 2016-07-27T13:10:51.000Z
ひゃぁ!わざわざレビューありがとうございます!!
Gauche 楽しく使わせていただいております。
> member?はこの目的ならSchemeの標準関数memberが使えます
> pickはGauche組み込みのtakeが使えます
やっぱり標準で関数あるんですね!
ドキュメント、もっと見なくては・・・
> strlist->numlist は (map string->number strlist) でいけます。
おぉ!なるほど!!
こういう時に map がすぐに使えるようになりたいなぁ
さっそく書き直してみます!
> use-port-stringもmapでいけて、さらにstring interpolationを使うと短くなります。
> (map (^p (if (member p use) #"~|p|( in use)" #"~|p|")) lst)
んん?
ちょっと難しいのでちょっとゆっくり読んでみます!
仕事で使ってない上にユーザー数が少ないのでレビューは大変ありがたいです。
これからもよろしくおねがいします!
COMMENT: AUTHOR: shiro IP: 24.165.31.22 date: 2016-07-27T11:38:01.000Z
いくつか簡潔にする提案です。
member?はこの目的ならSchemeの標準関数memberが使えます
pickはGauche組み込みのtakeが使えます
strlist->numlist は (map string->number strlist) でいけます。
use-port-stringもmapでいけて、さらにstring interpolationを使うと短くなります。
(map (^p (if (member p use) #"~|p|( in use)" #"~|p|")) lst)
moremagic
2016-07-23