こないだから触っていた 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)