修正了 Ping Test 项目
主要更新:
1、可以随时加入新的测试节点,不需要针对开始测试的时间做修正。
2、横轴会根据实际数据量,自动调整间隔。
花了大半天时间,总算修正了 Ping Test 里的一些作图问题,PHP 转 Json 有时候真的很蛋疼,输出的时候总是会多一些引号,需要手动去掉,于是代码就显得很难看。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$array=[]; foreach ($lists as $list){ $array[$list->server_id][]="[Date.UTC(".Carbon::parse($list->create_at)->format("Y,m-1,d")."),".$list->avg."]"; } $data=[]; $servername=[]; foreach ($servers as $server){ $d=$array[$server->id]; $d=json_encode($d); $d= str_replace('"[', '[' ,$d); $d= str_replace(']"', ']' ,$d); $data[]=array('name'=>$server->servername,'data'=>$d); $servername[]=$server->servername; } |
绕了半天,就是为了实现 [[Date.UTC(2015,8,31),45]] 这样的输出,而且不带引号。
还有个问题想不明白,为什么月份是从 0 算起?这完全是反人类的做法啊!后来在 v2ex 看到这个帖子,发现人家确实是这么定义 month 的,好吧,无语了。
另外也尝试了一下构建数据库关系图,还是蛮有意思的,也可以手动设置 foreign key,这些都是以前没接触过的。
1 2 3 4 5 6 7 8 9 |
public function up() { Schema::table('pingtests', function (Blueprint $table) { $table->foreign('server_id') ->references('id') ->on('servers'); }); } |
1 2 3 4 5 6 7 8 9 10 11 |
public function pingtest(){ return $this->hasMany('App\Pingtest'); } public function server(){ return $this->belongsTo('App\server'); } |
通过这样的设置之后,写查询就省事很多:
1 |
$lists=server::find($id)->pingtest()->orderBy('created_at','asc')->get(); |
直接根据 serverid,通过 pingtest 方法,得到这个 server 下所有的 pingtest 结果,相当于把两张表关联起来了,很有意思。