Handhole
This is develop/maintenance tool for StreamAPI
Target
Make it eacy to use StreamAPI : StreamAPIをもっと簡単に
データがどこを流れている、どう流れているかわかりにくい点、 そしてデータを流し込んだり、パイプをつなぐ操作が煩雑なので、負荷を軽減をするために作りました。
Install
npm install handhole
Use
var Handhole = ; var hh = ;var hh = ;
Methods
Pipe Controlle
method | exsample | descript |
---|---|---|
insert | hh.insert([target], stream or array) |
指定したstreamの前に追加する |
remove | hh.remove(target) |
指定したstreamを取り除く |
pipe | hh.pipe([target], stream or array) |
指定したstreamの後ろに追加 |
unpipe | hh.unpipe(target) |
指定したstreamの後ろを切り離す |
split | hh.sprit(to,[from]) |
指定したstreamから切り離す |
Stream Module
method | exsample | descript |
---|---|---|
hopper | hh.hopper([target]) |
データを流し込み口を作る。指定があればtargetの前に追加する |
flowMater | hh.flowMater([target]) |
データ量(count,size)を計測する。終了時に他totalを返す |
valve | hh.valve([DPS],[target]) |
DPS(data/sec)を調整する(0=stop, 0 > no limit) |
Module for Dev
開発時に陥りがちな不具合を避ける。 開発時に終端までpipeを通してないことは多いので、とりあえず終端にモニターをつける
method | exsample | descript |
---|---|---|
garbage | hh.garbage(target, [done]) |
trash chunk data |
garbageAll | hh.garbageAll(target, [done]) |
set garbage to all EndTerm |
Information Methods
Get stream information
list
Return registered stream list
var hh = ;var list = hh;console;// [// {// id:0, // uniqueid// name:"s1", // name(from transform function name)// obj:StreamObject, // stream object// next:[1] // list pipes id// },// ...// ]
viewlist
Check stream list by looking
var hh = ;var list = hh;console;// [// {// id:0, // unique id// name:"s1", // name(from transform function name)// next:[1] // list pipes id// },// {// id:1,// mame:"s2",// next:[] // have not next pipe// }// ]
term
Get stream by termination type.
var hh = ; // alonehh; // loophh;hh var term = hh;console;// {// start:[...], // start term. ex.s1// end:[...], // end term. ex.s2// alone:[...], // alone streams. ex.s3// loop:[...], // loop streams. ex.[s4,s5]// other:[...], // others// }
Controll Methods
Insert
__targetの前に__streamを追加する
hh.insert([target], stream or array)
var t = ABC; // A-B-C var hh = ; // 指定なしなら先頭に追加hh; // D-A-B-C // 指定をすれば前のStreamとの間に追加hh // D-A-E-B-C // readableの前には入れられないvar r = fs;var hh = ;hh; // Error!!!
Pipe
__targetの後ろに__streamを追加する
hh.pipe([target], stream or array)
var t = ABC; // A-B-Cvar hh = ; // 指定なしなら最後尾に追加hh; // A-B-C-D // 指定をすれば並列に接続hh // A-B-C-D // |-E // ループ構造は基本的には作れないhh // Error! stream loop is very slow // if want to use// hh._loopflag = true // _loopflag = true// hh.pipe("C","A") // OK // writableの後には入れられないvar r = fs;var hh = ;hh; // Error!!!
Remove
__target__を取り除く
hh.pipe([target])
var t = stream; // A-B-C-D-Eという順番でつながっていると仮定var hh = ; // 指定したstreamを取り除いて前後とつなげるhh; // A-B-C-E
Unpipe
targetの下流を切り離す。
hh.unpipe(target)
var t = ABCDE; // A-B-C-D-Evar hh = ; // 指定したstreamを取り除いて前後とつなげるhh; // A-B-C, D-Eができる
Split
split stream pipe by from-to
hh.unpipe(to, [from])
var t = ABCDE; // A-B-C-D-Evar hh = ; // split in front of targethh; // A-B, C-D-Eができる // get between "to" and "from"hh; // A-E, B-C-D
Support Streams
Hopper
データを個別に導入するためのStream
var Handhole = ; // 生成方法は二つ srreamobjを受け取るかvar hp = Handhole; // 直接追加するvar hh = ;var hp = hh; // insertと同じ動作を行う // データはpushもしくはdataで追加できる。hp;hp;hp;hp; hpdata"A""B""C""D"; // data Methodなら配列で渡すこともできる // closehp;hpdatanull;
Garbage / garbageAll()
閉じていないStreamを動作させるための終端Stream。
終了時にはcallbackを呼ぶ。
基本的にはgarbageAllで勝手にDuplexの終端を閉じるのでそちらを使う
var Handhole = ; // 生成方法は二つ srreamobjを受け取るかvar hp = Handhole; // 直接追加するvar hh = ; // A-B-C-D // Callbackを指定 A-B-C-D-[garbage]hh; hhdatadata;hhdatanull;
FlowMater
Monitoring data flow call count and chunk size.
event
data
emiting on timer(default:500ms) return info latest dataflow.
total
emitting on finish. return info total dataflow.
handhole.flowMater([option])
// get Object from classvar fm = Handhole // or insert to instancevar hh = ; var fm = hh; // insert // optionoption = timer:1000 // interval of emit flow event // resultfm
Valve
valve is regurate data count per second.
Handhole.valve([option])
// get Object from classvar vl = Handhole // or insert to instancevar hh = ; var vl = hh; // insert // optionoption = valve:1000 // iDPS target // change valvevl; // resultvl
Capture
Data output.
- default : console.log(chunk)
- file : output to file(string/buffer/JSON)
// get Object from classvar cp = Handhole // or insert to instancevar hh = ; var cp = hh; // insert
util func
Please read test/index.js
var getDatatype = HandHole.util.getDatatype;
Stacker
データブロックサイズ変更。 流れてきたデータを配列にためて出力する。
- option.splitChar
特定の文字列があったらstackした内容を書き出す。
デフォルトは","
// get Object from classvar hp = handole;var st = handholevar hh = ; forvar i=0; i< 50; i++ hp;// ["D0","D1"...] hp // split forvar i=0; i< 50; i++ hp;// ["D0","D1"...] , ["C0","C1"...]
Conful
複数のパイプから一つの処理パイプに流すための合流pipe
すべてのpipeがcloseしたらconfulも閉じる。
var hp1 = HandHole;var hp2 = HandHole;var hp3 = HandHole;var cnf = HandHole; // initial set pipecnf; // add pipe
turnstile
改札機 並列実行+timeout制御をする
var opt = t: ff // function _transform max: 4 // process max timeout: 800 // timeout[ms]var tsl = HandHole; tsl