本記事はこれです。
iOS以外でSwiftの出番がない話
皆さんはiOS以外でSwiftを採用したことはありますか?私はないです。Swiftとかいうマイナーな言語を授業や研修で使うわけがありません。
「言語何にするー?」
「Ruby/Java/Pythonならみんな書けるっしょー?」完
たまにはSwiftって言われてみたい……
全員がiOSエンジニアにも関わらずiOS以外をやる用事があればSwiftになるかも?
たとえば、iOSコミュニティでサーバサイドをやることになったとか……
アクセスポイント毎の接続数をSwiftを使って取得する
具体的には
自前でカンファレンスのネットワーク環境をやろうと思った時には、ログを集めたり監視したりするように作らなければならない。ここでネットワーク管理ソフトウェアZabbixの利用が候補に上がる。
ざっくりとした図:
例えば、各APの接続数は、APの親玉であるWireless LAN ControllerからZabbixに届けられる。
ZabbixはREST APIで叩くことができるので、あとは煮るなり焼くなりVaporでヒートマップを出すなり自由。もしwebassemblyが完全対応すればWi-Fiヒートマップの描画までSwiftがやっちゃうかもしれない。
SwiftでZabbix REST APIを叩く
Linux(適当なUbuntu)サーバ上で叩くので、Linux対応のライブラリがあると便利。Package.swiftが置いてあるかというよりも、READMEで名言されていたり #if os(Linux)
がソースコード上にあったりIBMだったりするほうが信用度高め。
let request = RestRequest(method: .post, url: "http://Zabbixホスト/zabbix/api_jsonrpc.php") request.messageBody = try! encoder.encode(略) request.response { data, response, error in 煮るなり焼くなり }
略の部分に、たとえば
{ "auth":"ログインした時に返ってきたやつ", "method":"item.get", "id":1, "params":{ "search": { "name":"* Ap If No Of Users * GHz" }, "searchWildcardsEnabled":true, "output": ["name", "key_", "lastvalue", "prevvalue"] }, "jsonrpc":"2.0" }
というふうになる struct Hoge: Encodable
を与えておくとZabbixから接続数が取れる。
Zabbix自体をカンファレンス参加者に叩かれるわけにはいかないし、キャッシュの役割をする人がいてほしいので、Vaporを立ててそこからAPIやらhtmlやらを出させるとなおよし。
routes.swiftに上手に書けばVapor1人で両方出せる。テンプレートを使ってりっちにhtmlをやりたい場合はleafもセットで。
.package(url: "https://github.com/vapor/vapor.git", from: "3.0.0"), .package(url: "https://github.com/vapor/leaf.git", from: "3.0.1"),
なんでこんなことしなくちゃいけないの?
え、自分の所属するコミュニティのカンファレンスのネットワーク環境やっていきたくないんですか?
まとめ
興味がある人はそのへんのカンファレンスのネットワークチームを乗っ取っていっしょにSwiftまみれにしましょう!iOS関係ならSwiftを使ってもメンテの人手には困……らないかどうかはわからない。責任は取りません。
ちなみに上の図の画像はいらすとやさんです。アクセスポイントにははんぺんを使いました。便利ですね。