Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
24 / 24
66.67% covered (warning)
66.67%
12 / 18
50.00% covered (danger)
50.00%
6 / 12
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
Webservice
100.00% covered (success)
100.00%
24 / 24
66.67% covered (warning)
66.67%
12 / 18
50.00% covered (danger)
50.00%
6 / 12
100.00% covered (success)
100.00%
6 / 6
30.00
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
5 / 5
66.67% covered (warning)
66.67%
2 / 3
50.00% covered (danger)
50.00%
1 / 2
100.00% covered (success)
100.00%
1 / 1
2.50
 fetch
n/a
0 / 0
n/a
0 / 0
n/a
0 / 0
n/a
0 / 0
0
 numRows
100.00% covered (success)
100.00%
1 / 1
66.67% covered (warning)
66.67%
2 / 3
50.00% covered (danger)
50.00%
1 / 2
100.00% covered (success)
100.00%
1 / 1
2.50
 version
100.00% covered (success)
100.00%
1 / 1
66.67% covered (warning)
66.67%
2 / 3
50.00% covered (danger)
50.00%
1 / 2
100.00% covered (success)
100.00%
1 / 1
2.50
 getIterator
100.00% covered (success)
100.00%
1 / 1
66.67% covered (warning)
66.67%
2 / 3
50.00% covered (danger)
50.00%
1 / 2
100.00% covered (success)
100.00%
1 / 1
2.50
 getFetch
100.00% covered (success)
100.00%
13 / 13
66.67% covered (warning)
66.67%
2 / 3
50.00% covered (danger)
50.00%
1 / 2
100.00% covered (success)
100.00%
1 / 1
2.50
 fdsnSupportedVersion
100.00% covered (success)
100.00%
3 / 3
66.67% covered (warning)
66.67%
2 / 3
50.00% covered (danger)
50.00%
1 / 2
100.00% covered (success)
100.00%
1 / 1
2.50
1<?php
2namespace Fdsn\Webservices;
3
4use ArrayIterator;
5use IteratorAggregate;
6use Traversable;
7
8/**
9 * PHP library to access FDSN Webservices and request Catalogs
10 *
11 * @param string     $fdsn_server    Fdns webservice domain name (default: webservices.ms.ingv.it)
12 */
13abstract class Webservice implements IteratorAggregate {
14    /**
15     * @var Base URL to compile with FDSN server url 
16     */ 
17    public const basePath = 'https://%s/fdsnws/event/1';
18
19    /**
20     * @var Default server url
21     */ 
22    public const defaultFdsnServer  = 'webservices.ms.ingv.it';
23
24    /**
25     * @var Max supported version
26     */ 
27    public const fdsnSupportedVersion = '^1.';
28
29    /**
30     * @var Debug print access to each "[method] unixtimestamp"
31     */ 
32    public const debug = false;
33
34    protected string $fdsnServer;
35    protected string $webserviceFullPath;
36
37    protected array $arrayOfResults = array();
38    protected string $version = '';
39
40    function __construct( string $fdsn_server = self::defaultFdsnServer ){
41        if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); 
42
43        $this->fdsnServer =  $fdsn_server;
44
45        $this->webserviceFullPath = sprintf(self::basePath,
46            $this->fdsnServer
47            );
48    }
49
50    /**
51     * Fetch data from selected FDSN server
52     * 
53     * @return int number of data found
54     */
55    abstract public function fetch():int;
56
57    
58    /**
59     * Return the number of elems found
60     * @return int         The number of elems found
61     */
62    public function numRows():int { if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return count($this->arrayOfResults); }
63
64
65    /**
66     * Get FDSN running version
67     * @return string FDSN running version (trimmed by newline)
68     */
69    public function version():string{ if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return $this->version; }
70
71    /**
72     * Iterate over catalogis found
73     * @return array     array of \Fdsn\DataStructure\Catalog obj
74     */
75    public function getIterator():Traversable { if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return new ArrayIterator($this->arrayOfResults); }
76
77    /**
78     * Fetch data from selected FDSN server
79     * 
80     * @return string downloaded string
81     */
82    protected function getFetch(string $url):string{
83        if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); 
84
85        $curlSession = curl_init();
86        curl_setopt_array($curlSession, array(
87            CURLOPT_URL         => $url,
88            CURLOPT_HEADER         => false,
89            CURLOPT_CUSTOMREQUEST    => 'GET',
90            CURLOPT_RETURNTRANSFER    => 1,
91            CURLOPT_TIMEOUT        => 60
92            )
93        );
94        $response = trim(curl_exec($curlSession));
95        curl_close($curlSession);
96
97        return $response;
98    }
99
100    /**
101     * Check if FDSN server version is supported
102     */
103    protected function fdsnSupportedVersion():bool{
104        if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); 
105
106        $this->version = trim( $this->getFetch($this->webserviceFullPath . '/version') );
107
108                return preg_match('/' . self::fdsnSupportedVersion . '/', $this->version);
109
110    }
111
112}

Branches

Below are the source code lines that represent each code branch as identified by Xdebug. Please note a branch is not necessarily coterminous with a line, a line may contain multiple branches and therefore show up more than once. Please also be aware that some branches may be implicit rather than explicit, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

Webservice->__construct
40    function __construct( string $fdsn_server = self::defaultFdsnServer ){
41        if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); 
41        if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); 
42
43        $this->fdsnServer =  $fdsn_server;
43        $this->fdsnServer =  $fdsn_server;
44
45        $this->webserviceFullPath = sprintf(self::basePath,
46            $this->fdsnServer
47            );
48    }
Webservice->fdsnSupportedVersion
104        if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); 
104        if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); 
105
106        $this->version = trim( $this->getFetch($this->webserviceFullPath . '/version') );
106        $this->version = trim( $this->getFetch($this->webserviceFullPath . '/version') );
107
108                return preg_match('/' . self::fdsnSupportedVersion . '/', $this->version);
109
110    }
Webservice->getFetch
82    protected function getFetch(string $url):string{
83        if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); 
83        if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); 
84
85        $curlSession = curl_init();
85        $curlSession = curl_init();
86        curl_setopt_array($curlSession, array(
87            CURLOPT_URL         => $url,
88            CURLOPT_HEADER         => false,
89            CURLOPT_CUSTOMREQUEST    => 'GET',
90            CURLOPT_RETURNTRANSFER    => 1,
91            CURLOPT_TIMEOUT        => 60
92            )
93        );
94        $response = trim(curl_exec($curlSession));
95        curl_close($curlSession);
96
97        return $response;
98    }
Webservice->getIterator
75    public function getIterator():Traversable { if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return new ArrayIterator($this->arrayOfResults); }
75    public function getIterator():Traversable { if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return new ArrayIterator($this->arrayOfResults); }
75    public function getIterator():Traversable { if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return new ArrayIterator($this->arrayOfResults); }
Webservice->numRows
62    public function numRows():int { if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return count($this->arrayOfResults); }
62    public function numRows():int { if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return count($this->arrayOfResults); }
62    public function numRows():int { if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return count($this->arrayOfResults); }
Webservice->version
69    public function version():string{ if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return $this->version; }
69    public function version():string{ if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return $this->version; }
69    public function version():string{ if( self::debug ) printf("[%s] %d \n", __METHOD__, time()); return $this->version; }