config->service; $operation = $this->config->operation; $tags = $this->config->tags; $lookback = $this->config->lookback; $minDuration = $this->config->minDuration; $maxDuration = $this->config->maxDuration; $limit = $this->config->limit; $endpoint = 'api/traces?service='.urlencode($service); if (!empty($operation)) $endpoint .= '&operation='.urlencode($operation); if (!empty($tags)) $endpoint .= '&tags='. urlencode($tags); if (!empty($lookback)) { $lookbackFormatted = str_replace('d', ' days', str_replace('h', ' hours', $lookback)); $timestampForOffset = time(); $offset = $timestampForOffset - strtotime('-'.$lookbackFormatted, $timestampForOffset); $timestamp = microtime(true); $end = sprintf('%0.0f', $timestamp * 1000000); $start = sprintf('%0.0f', ($timestamp - $offset) * 1000000); $endpoint .= '&lookback='.urlencode($lookback); $endpoint .= '&start='.$start; $endpoint .= '&end='.$end; } if (!empty($minDuration)) $endpoint .= '&minDuration='.urlencode($minDuration); if (!empty($maxDuration)) $endpoint .= '&maxDuration='.urlencode($maxDuration); if (!empty($limit)) $endpoint .= '&limit='.urlencode($limit); return $this->url($endpoint); } public function test() { $test = parent::appTest($this->tracesUrl()); echo $test->status; } public function livestats() { $status = 'inactive'; $res = parent::execute($this->tracesUrl()); $details = json_decode($res->getBody()); $data = []; if($details) { $status = 'active'; $data['traces'] = count($details->data); $data['avg_duration'] = 0; if ($data['traces'] > 0) { $durations = array_map(function($dataItem) { $max = 0; foreach ($dataItem->spans as $spanItem) { $max = max($max, $spanItem->duration); } return $max; }, $details->data); $data['avg_duration'] = round(array_sum($durations)/$data['traces']/1000, 1); } } return parent::getLiveStats($status, $data); } public function url($endpoint) { $api_url = parent::normaliseurl($this->config->url).$endpoint; return $api_url; } }