Completed
Pull Request — master (#278)
by
unknown
13:02
created

CdnManager::getCdnLoganalyzeToptrafficip()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 4
dl 0
loc 12
ccs 0
cts 9
cp 0
crap 2
rs 9.8666
c 0
b 0
f 0
1
<?php
2
3
namespace Qiniu\Cdn;
4
5
use Qiniu\Auth;
6
use Qiniu\Http\Error;
7
use Qiniu\Http\Client;
8
9
final class CdnManager
10
{
11
12
    private $auth;
13
    private $server;
14
15 3
    public function __construct(Auth $auth)
16
    {
17 3
        $this->auth = $auth;
18 3
        $this->server = 'http://fusion.qiniuapi.com';
19 3
    }
20
21
    /**
22
     * @param array $urls 待刷新的文件链接数组
23
     * @return array
24
     */
25
    public function refreshUrls(array $urls)
26
    {
27
        return $this->refreshUrlsAndDirs($urls, array());
28
    }
29
30
    /**
31
     * @param array $dirs 待刷新的文件链接数组
32
     * @return array
33
     * 目前客户默认没有目录刷新权限,刷新会有400038报错,参考:https://developer.qiniu.com/fusion/api/1229/cache-refresh
34
     * 需要刷新目录请工单联系技术支持 https://support.qiniu.com/tickets/category
35
     */
36
    public function refreshDirs(array $dirs)
37
    {
38
        return $this->refreshUrlsAndDirs(array(), $dirs);
39
    }
40
41
    /**
42
     * @param array $urls 待刷新的文件链接数组
43
     * @param array $dirs 待刷新的目录链接数组
44
     *
45
     * @return array 刷新的请求回复和错误,参考 examples/cdn_manager.php 代码
46
     * @link http://developer.qiniu.com/article/fusion/api/refresh.html
47
     *
48
     * 目前客户默认没有目录刷新权限,刷新会有400038报错,参考:https://developer.qiniu.com/fusion/api/1229/cache-refresh
49
     * 需要刷新目录请工单联系技术支持 https://support.qiniu.com/tickets/category
50
     */
51
    public function refreshUrlsAndDirs(array $urls, array  $dirs)
52
    {
53
        $req = array();
54
        if (!empty($urls)) {
55
            $req['urls'] = $urls;
56
        }
57
        if (!empty($dirs)) {
58
            $req['dirs'] = $dirs;
59
        }
60
61
        $url = $this->server . '/v2/tune/refresh';
62
        $body = json_encode($req);
63
        return $this->post($url, $body);
64
    }
65
66
    /**
67
     * @param array $urls 待预取的文件链接数组
68
     *
69
     * @return array 预取的请求回复和错误,参考 examples/cdn_manager.php 代码
70
     *
71
     * @link http://developer.qiniu.com/article/fusion/api/refresh.html
72
     */
73
    public function prefetchUrls(array $urls)
74
    {
75
        $req = array(
76
            'urls' => $urls,
77
        );
78
79
        $url = $this->server . '/v2/tune/prefetch';
80
        $body = json_encode($req);
81
        return $this->post($url, $body);
82
    }
83
84
    /**
85
     * @param array $domains 待获取带宽数据的域名数组
86
     * @param string $startDate 开始的日期,格式类似 2017-01-01
87
     * @param string $endDate 结束的日期,格式类似 2017-01-01
88
     * @param string $granularity 获取数据的时间间隔,可以是 5min, hour 或者 day
89
     *
90
     * @return array 带宽数据和错误信息,参考 examples/cdn_manager.php 代码
91
     *
92
     * @link http://developer.qiniu.com/article/fusion/api/traffic-bandwidth.html
93
     */
94
    public function getBandwidthData(array $domains, $startDate, $endDate, $granularity)
95
    {
96
        $req = array();
97
        $req['domains'] = implode(';', $domains);
98
        $req['startDate'] = $startDate;
99
        $req['endDate'] = $endDate;
100
        $req['granularity'] = $granularity;
101
102
        $url = $this->server . '/v2/tune/bandwidth';
103
        $body = json_encode($req);
104
        return $this->post($url, $body);
105
    }
106
107
    /**
108
     * @param array $domains 待获取流量数据的域名数组
109
     * @param string $startDate 开始的日期,格式类似 2017-01-01
110
     * @param string $endDate 结束的日期,格式类似 2017-01-01
111
     * @param string $granularity 获取数据的时间间隔,可以是 5min, hour 或者 day
112
     *
113
     * @return array 流量数据和错误信息,参考 examples/cdn_manager.php 代码
114
     *
115
     * @link http://developer.qiniu.com/article/fusion/api/traffic-bandwidth.html
116
     */
117
    public function getFluxData(array $domains, $startDate, $endDate, $granularity)
118
    {
119
        $req = array();
120
        $req['domains'] = implode(';', $domains);
121
        $req['startDate'] = $startDate;
122
        $req['endDate'] = $endDate;
123
        $req['granularity'] = $granularity;
124
125
        $url = $this->server . '/v2/tune/flux';
126
        $body = json_encode($req);
127
        return $this->post($url, $body);
128
    }
129
130
    /**
131
     * @param array $domains 待获取日志下载链接的域名数组
132
     * @param string $logDate 获取指定日期的日志下载链接,格式类似 2017-01-01
133
     *
134
     * @return array 日志下载链接数据和错误信息,参考 examples/cdn_manager.php 代码
135
     *
136
     * @link http://developer.qiniu.com/article/fusion/api/log.html
137
     */
138
    public function getCdnLogList(array $domains, $logDate)
139
    {
140
        $req = array();
141
        $req['domains'] = implode(';', $domains);
142
        $req['day'] = $logDate;
143
144
        $url = $this->server . '/v2/tune/log/list';
145
        $body = json_encode($req);
146
        return $this->post($url, $body);
147
    }
148
149
    /**
150
     * @param array $domains 待获取区域运营商流量的域名数组
151
     * @param string $freq 待获取区域运营商流量的粒度,可选项为 5min、1hour、1day
152
     * @param array $regions 待获取区域运营商流量的区域,例如global,具体看参考:https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis#region
153
     * @param array $isp 待获取区域运营商流量的ISP运营商,例如比如all(所有 ISP),telecom(电信),unicom(联通),mobile(中国移动),drpeng(鹏博士),tietong(铁通),cernet(教育网)
154
     * @param string $startDate  待获取区域运营商流量的开始日期,格式类似 2017-01-01
155
     * @param string $endDate  待获取区域运营商流量的结束日期,格式类似 2017-01-01
156
     *
157
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
158
     *
159
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
160
     */
161
    public function getCdnLoganalyzeTraffic(array $domains, $freq, $regions, $isp, $startDate, $endDate)
162
    {
163
        $req = array();
164
        $req['domains'] = $domains;
165
        $req['freq'] = $freq;
166
        $req['regions'] = $regions;
167
        $req['isp'] = $isp;
168
        $req['startDate'] = $startDate;
169
        $req['endDate'] = $endDate;
170
171
        $url = $this->server . '/v2/tune/loganalyze/traffic';
172
        $body = json_encode($req);
173
        return $this->post($url, $body);
174
    }
175
176
    /**
177
     * @param array $domains 待获取区域运营商带宽的域名数组
178
     * @param string $freq 待获取区域运营商带宽的粒度,可选项为 5min、1hour、1day
179
     * @param array $regions 待获取区域运营商带宽的区域,例如global,具体看参考:https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis#region
180
     * @param array $isp 待获取区域运营商带宽的ISP运营商,例如比如all(所有 ISP),telecom(电信),unicom(联通),mobile(中国移动),drpeng(鹏博士),tietong(铁通),cernet(教育网)
181
     * @param string $startDate  待获取区域运营商带宽的开始日期,格式类似 2017-01-01
182
     * @param string $endDate  待获取区域运营商带宽的结束日期,格式类似 2017-01-01
183
     *
184
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
185
     *
186
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
187
     */
188
    public function getCdnLoganalyzeBandwidth(array $domains, $freq, $regions, $isp, $startDate, $endDate)
189
    {
190
        $req = array();
191
        $req['domains'] = $domains;
192
        $req['freq'] = $freq;
193
        $req['regions'] = $regions;
194
        $req['isp'] = $isp;
195
        $req['startDate'] = $startDate;
196
        $req['endDate'] = $endDate;
197
198
        $url = $this->server . '/v2/tune/loganalyze/bandwidth';
199
        $body = json_encode($req);
200
        return $this->post($url, $body);
201
    }
202
203
    /**
204
     * @param array $domains 待获取状态码数据的域名数组
205
     * @param string $freq 待获取状态码数据的粒度,可选项为 5min、1hour、1day
206
     * @param string $startDate  待获取状态码数据的开始日期,格式类似 2017-01-01
207
     * @param string $endDate  待获取状态码数据的结束日期,格式类似 2017-01-01
208
     *
209
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
210
     *
211
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
212
     */
213
    public function getCdnLoganalyzeStatuscode(array $domains, $freq, $startDate, $endDate)
214
    {
215
        $req = array();
216
        $req['domains'] = $domains;
217
        $req['freq'] = $freq;
218
        $req['startDate'] = $startDate;
219
        $req['endDate'] = $endDate;
220
221
        $url = $this->server . '/v2/tune/loganalyze/statuscode';
222
        $body = json_encode($req);
223
        return $this->post($url, $body);
224
    }
225
226
    /**
227
     * @param array $domains 待获取命中率数据的域名数组
228
     * @param string $freq 待获取命中率数据的粒度,可选项为 5min、1hour、1day
229
     * @param string $startDate  待获取命中率数据的开始日期,格式类似 2017-01-01
230
     * @param string $endDate  待获取命中率数据的结束日期,格式类似 2017-01-01
231
     *
232
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
233
     *
234
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
235
     */
236
    public function getCdnLoganalyzeHitmiss(array $domains, $freq, $startDate, $endDate)
237
    {
238
        $req = array();
239
        $req['domains'] = $domains;
240
        $req['freq'] = $freq;
241
        $req['startDate'] = $startDate;
242
        $req['endDate'] = $endDate;
243
244
        $url = $this->server . '/v2/tune/loganalyze/hitmiss';
245
        $body = json_encode($req);
246
        return $this->post($url, $body);
247
    }
248
249
    /**
250
     * @param array $domains 待获取请求次数数据的域名数组
251
     * @param string $freq 待获取请求次数数据的粒度,可选项为 5min、1hour、1day
252
     * @param string $region 待获取请求次数数据的区域,例如global,具体看参考:https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis#region
253
     * @param string $startDate  待获取请求次数数据的开始日期,格式类似 2017-01-01
254
     * @param string $endDate  待获取请求次数数据的结束日期,格式类似 2017-01-01
255
     *
256
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
257
     *
258
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
259
     */
260
    public function getCdnLoganalyzeReqcount(array $domains, $freq, $region, $startDate, $endDate)
261
    {
262
        $req = array();
263
        $req['domains'] = $domains;
264
        $req['freq'] = $freq;
265
        $req['region'] = $region;
266
        $req['startDate'] = $startDate;
267
        $req['endDate'] = $endDate;
268
269
        $url = $this->server . '/v2/tune/loganalyze/reqcount';
270
        $body = json_encode($req);
271
        return $this->post($url, $body);
272
    }
273
274
    /**
275
     * @param array $domains 待获取 ISP 请求次数数据的域名数组
276
     * @param string $freq 待获取 ISP 请求次数数据的粒度,可选项为 5min、1hour、1day
277
     * @param string $region 待获取 ISP 请求次数数据的区域,例如global,具体看参考:https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis#region
278
     * @param string $startDate  待获取 ISP 请求次数数据的开始日期,格式类似 2017-01-01
279
     * @param string $endDate  待获取 ISP 请求次数数据的结束日期,格式类似 2017-01-01
280
     *
281
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
282
     *
283
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
284
     */
285
    public function getCdnLoganalyzeIspreqcount(array $domains, $freq, $region, $startDate, $endDate)
286
    {
287
        $req = array();
288
        $req['domains'] = $domains;
289
        $req['freq'] = $freq;
290
        $req['region'] = $region;
291
        $req['startDate'] = $startDate;
292
        $req['endDate'] = $endDate;
293
294
        $url = $this->server . '/v2/tune/loganalyze/ispreqcount';
295
        $body = json_encode($req);
296
        return $this->post($url, $body);
297
    }
298
299
    /**
300
     * @param array $domains 待获取 ISP 流量占比数据的域名数组
301
     * @param array $regions 待获取 ISP 流量占比数据的区域,例如global,具体看参考:https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis#region
302
     * @param string $startDate  待获取 ISP 流量占比数据的开始日期,格式类似 2017-01-01
303
     * @param string $endDate  待获取 ISP 流量占比数据的结束日期,格式类似 2017-01-01
304
     *
305
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
306
     *
307
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
308
     */
309
    public function getCdnLoganalyzeIsptraffic(array $domains, $regions, $startDate, $endDate)
310
    {
311
        $req = array();
312
        $req['domains'] = $domains;
313
        $req['regions'] = $regions;
314
        $req['startDate'] = $startDate;
315
        $req['endDate'] = $endDate;
316
317
        $url = $this->server . '/v2/tune/loganalyze/isptraffic';
318
        $body = json_encode($req);
319
        return $this->post($url, $body);
320
    }
321
322
    /**
323
     * @param array $domains 待获取访问量数据的域名数组
324
     * @param string $region 待获取访问量数据的区域,例如global,具体看参考:https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis#region
325
     * @param string $startDate  待获取访问量数据的开始日期,格式类似 2017-01-01
326
     * @param string $endDate  待获取访问量数据的结束日期,格式类似 2017-01-01
327
     *
328
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
329
     *
330
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
331
     */
332
    public function getCdnLoganalyzeTopcountip(array $domains, $region, $startDate, $endDate)
333
    {
334
        $req = array();
335
        $req['domains'] = $domains;
336
        $req['region'] = $region;
337
        $req['startDate'] = $startDate;
338
        $req['endDate'] = $endDate;
339
340
        $url = $this->server . '/v2/tune/loganalyze/topcountip';
341
        $body = json_encode($req);
342
        return $this->post($url, $body);
343
    }
344
345
    /**
346
     * @param array $domains 待获取访问量数据的域名数组
347
     * @param string $region 待获取访问量数据的区域,例如global,具体看参考:https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis#region
348
     * @param string $startDate  待获取访问量数据的开始日期,格式类似 2017-01-01
349
     * @param string $endDate  待获取访问量数据的结束日期,格式类似 2017-01-01
350
     *
351
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
352
     *
353
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
354
     */
355
    public function getCdnLoganalyzeToptrafficip(array $domains, $region, $startDate, $endDate)
356
    {
357
        $req = array();
358
        $req['domains'] = $domains;
359
        $req['region'] = $region;
360
        $req['startDate'] = $startDate;
361
        $req['endDate'] = $endDate;
362
363
        $url = $this->server . '/v2/tune/loganalyze/toptrafficip';
364
        $body = json_encode($req);
365
        return $this->post($url, $body);
366
    }
367
368
    /**
369
     * @param array $domains 待获取访问量数据的域名数组
370
     * @param string $region 待获取访问量数据的区域,例如global,具体看参考:https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis#region
371
     * @param string $startDate  待获取访问量数据的开始日期,格式类似 2017-01-01
372
     * @param string $endDate  待获取访问量数据的结束日期,格式类似 2017-01-01
373
     *
374
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
375
     *
376
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
377
     */
378
    public function getCdnLoganalyzeTopcounturl(array $domains, $region, $startDate, $endDate)
379
    {
380
        $req = array();
381
        $req['domains'] = $domains;
382
        $req['region'] = $region;
383
        $req['startDate'] = $startDate;
384
        $req['endDate'] = $endDate;
385
386
        $url = $this->server . '/v2/tune/loganalyze/topcounturl';
387
        $body = json_encode($req);
388
        return $this->post($url, $body);
389
    }
390
391
    /**
392
     * @param array $domains 待获取访问量数据的域名数组
393
     * @param string $region 待获取访问量数据的区域,例如global,具体看参考:https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis#region
394
     * @param string $startDate  待获取访问量数据的开始日期,格式类似 2017-01-01
395
     * @param string $endDate  待获取访问量数据的结束日期,格式类似 2017-01-01
396
     *
397
     * @return array 错误信息,参考 examples/cdn_manager.php 代码
398
     *
399
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
400
     */
401
    public function getCdnLoganalyzeToptrafficurl(array $domains, $region, $startDate, $endDate)
402
    {
403
        $req = array();
404
        $req['domains'] = $domains;
405
        $req['region'] = $region;
406
        $req['startDate'] = $startDate;
407
        $req['endDate'] = $endDate;
408
409
        $url = $this->server . '/v2/tune/loganalyze/toptrafficurl';
410
        $body = json_encode($req);
411
        return $this->post($url, $body);
412
    }
413
414
    /**
415
     * @param array $domains 待获取PageView数据的域名数组
416
     * @param string $freq 待获取PageView数据的粒度,可选项为 1hour、1day
417
     * @param string $startDate  待获取PageView数据的开始日期,格式类似 2017-01-01
418
     * @param string $endDate  待获取PageView数据的结束日期,格式类似 2017-01-01
419
     *
420
     * @return array 获取PageView数据时的错误信息,参考 examples/cdn_manager.php 代码
421
     *
422
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
423
     */
424
    public function getCdnLoganalyzePageview(array $domains, $freq, $startDate, $endDate)
425
    {
426
        $req = array();
427
        $req['domains'] = $domains;
428
        $req['freq'] = $freq;
429
        $req['startDate'] = $startDate;
430
        $req['endDate'] = $endDate;
431
432
        $url = $this->server . '/v2/tune/loganalyze/pageview';
433
        $body = json_encode($req);
434
        return $this->post($url, $body);
435
    }
436
437
    /**
438
     * @param array $domains 待获取UniqueVisitor数据的域名数组
439
     * @param string $freq 待获取UniqueVisitor数据的粒度,可选项为 1hour、1day
440
     * @param string $startDate  待获取UniqueVisitor数据的开始日期,格式类似 2017-01-01
441
     * @param string $endDate  待获取UniqueVisitor数据的结束日期,格式类似 2017-01-01
442
     *
443
     * @return array 获取UniqueVisitor数据时的错误信息,参考 examples/cdn_manager.php 代码
444
     *
445
     * @link https://developer.qiniu.com/fusion/api/4081/cdn-log-analysis
446
     */
447
    public function getCdnLoganalyzeUniquevisitor(array $domains, $freq, $startDate, $endDate)
448
    {
449
        $req = array();
450
        $req['domains'] = $domains;
451
        $req['freq'] = $freq;
452
        $req['startDate'] = $startDate;
453
        $req['endDate'] = $endDate;
454
455
        $url = $this->server . '/v2/tune/loganalyze/uniquevisitor';
456
        $body = json_encode($req);
457
        return $this->post($url, $body);
458
    }
459
460
    private function post($url, $body)
461
    {
462
        $headers = $this->auth->authorization($url, $body, 'application/json');
463
        $headers['Content-Type'] = 'application/json';
464
        $ret = Client::post($url, $body, $headers);
465
        if (!$ret->ok()) {
466
            return array(null, new Error($url, $ret));
467
        }
468
        $r = ($ret->body === null) ? array() : $ret->json();
469
        return array($r, null);
470
    }
471
472
    /**
473
     * 构建时间戳防盗链鉴权的访问外链
474
     *
475
     * @param string $rawUrl 需要签名的资源url
476
     * @param string $encryptKey 时间戳防盗链密钥
477
     * @param string $durationInSeconds 链接的有效期(以秒为单位)
478
     *
479
     * @return string 带鉴权信息的资源外链,参考 examples/cdn_timestamp_antileech.php 代码
480
     */
481 3
    public static function createTimestampAntiLeechUrl($rawUrl, $encryptKey, $durationInSeconds)
482
    {
483
484 3
        $parsedUrl = parse_url($rawUrl);
485
486 3
        $deadline = time() + $durationInSeconds;
487 3
        $expireHex = dechex($deadline);
488 3
        $path = isset($parsedUrl['path']) ? $parsedUrl['path'] : '';
489
490 3
        $strToSign = $encryptKey . $path . $expireHex;
491 3
        $signStr = md5($strToSign);
492
493 3
        if (isset($parsedUrl['query'])) {
494
            $signedUrl = $rawUrl . '&sign=' . $signStr . '&t=' . $expireHex;
495
        } else {
496 3
            $signedUrl = $rawUrl . '?sign=' . $signStr . '&t=' . $expireHex;
497
        }
498
499 3
        return $signedUrl;
500
    }
501
}
502