An open API service indexing awesome lists of open source software.

https://github.com/weiboad/fierysdk

ragnar fiery php sdk
https://github.com/weiboad/fierysdk

apm fiery php

Last synced: 5 months ago
JSON representation

ragnar fiery php sdk

Awesome Lists containing this project

README

          

### RagnarSDK

[![Latest Stable Version](https://poser.pugx.org/weiboad/fierysdk/v/stable)](https://packagist.org/packages/weiboad/fierysdk)
[![Latest Unstable Version](https://poser.pugx.org/weiboad/fierysdk/v/unstable)](https://packagist.org/packages/weiboad/fierysdk)
[![License](https://poser.pugx.org/weiboad/fierysdk/license)](https://packagist.org/packages/weiboad/fierysdk)

Other Laguage Introduce: [中文文档](./README_CN.md)

### Introduce
> * for the complex system online tracing.
> * support online debug.level log.exception and error collect.performance monitor and depend reloation picture
> * for the https://github.com/weiboad/fiery

### Requirement
> * PHP5.3+ with bcmath
> * charset utf-8 project

#### Step 1 Container Variable

##### Nginx
copy the nginx/fiery_fastcgi_pararms -> nginx/conf and edit the vhost config

```
server{
listen 80;
charset utf-8;
root /path/xxx/xxx/src/public;
server_name xxx.com;

location /{
index index.php index.html index.htm;
if (-f $request_filename) {
break;
}
if (-d $request_filename) {
break;
}
if ($request_filename !~ (\.css|images|index\.php.*) ) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
}

location ~ /index.php/ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
include fiery_fastcgi_params; # here is the point
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 600;
}

location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
include fiery_fastcgi_params; # here is the point
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 600;
}
}
```

```
# reload the nginx config
nginx -s reload

```

###### Apache
```

ServerAdmin webmaster@demo.com
DocumentRoot "e:\wwwroot\demo"
ServerName my.demo.com
ErrorLog "logs/my.demo.com-error.log"
CustomLog "logs/my.demo.com-access.log" common

# start config the variable for fierysdk
SetEnv RAGNAR_LOGPATH /data1/ragnar/ # here is the point
SetEnv RAGNAR_IDC 0 # here is the point
SetEnv RAGNAR_IP 192.168.1.123 # here is the point


Options Indexes FollowSymLinks
AllowOverride All
Require all granted

```

#### Fierysdk Install

Run command to get this composer
```
composer require weiboad/fierysdk

```
insert code on the bootstrap of php project

```
require_once("vendor/autoload.php");


use \Adinf\RagnarSDK\RagnarSDK as RagnarSDK;
use \Adinf\RagnarSDK\RagnarConst as RagnarConst;

//for the Temporary disable this sdk
//RagnarSDK::disable();

//default log level is info you can Temporary open the debug level by send header
RagnarSDK::setLogLevel(RagnarConst::LOG_TYPE_INFO);

//filter url
//when the url contained parameter on path such as
//http://wwwei.com/usr/$uid(an var alway change)/fetch
//you must write an rule on this callback filted to http://wwwei.com/usr/releaced/fetch

RagnarSDK::setUrlFilterCallback(function ($url, $hashquery) {
if (trim($url) == "") {
return "";
}
if (stripos($url, 'http') !== 0) {
$url = "http://" . $url;
}

$urlinfo = parse_url($url);

if(!$urlinfo){
return $url."#PARSERERROR";
}

if (!isset($urlinfo["scheme"])) {
$urlinfo["scheme"] = "http";
}

if (!isset($urlinfo["path"])) {
$urlinfo["path"] = "/";
}

if (!isset($urlinfo["query"])) {
$urlinfo["query"] = "";
}

if ($hashquery) {
return $urlinfo["scheme"] . "://" . $urlinfo["host"] . $urlinfo["path"] . "?" . $urlinfo["query"];
} else {
return $urlinfo["scheme"] . "://" . $urlinfo["host"] . $urlinfo["path"];
}
});

//this must run at latest
//ragnar_projectname is you project name will use on log folder name
RagnarSDK::init("ragnar_projectname");

//Ragnar level log example
// this is info log you can see this on tracing page on fiery
RagnarSDK::RecordLog(RagnarConst::LOG_TYPE_INFO, __FILE__, __LINE__, "module1_msg", array("msg"=>"i wish i can fly!"));

// this is debug log
RagnarSDK::RecordLog(RagnarConst::LOG_TYPE_DEBUG, __FILE__, __LINE__, "module2_msg",array("msg"=>"i wish im rich!");

//customize performance dig point example will display on tracing page on fiery
//dig start
$digpooint = RagnarSDK::digLogStart(__FILE__,__LINE__,"ragnar_test");

//run something.....
//dig end
RagnarSDK::digLogEnd($digpooint,array("happy"=>1));

```

### Ragnar level log
> * level log:set the log level to decide the customize log to dump
> * log search:all the log in the level will be show on the tracing page.
> * exception and error:will be show on the error statistic page
> * performance:a easy way the record the function cost time and make an statistics on curl mysql api

#### log level
> * LOG_TYPE_TRACE trace log for the low level debug
> * LOG_TYPE_DEBUG Debug log
> * LOG_TYPE_NOTICE notice log on the system
> * LOG_TYPE_INFO info for the tips the working status
> * LOG_TYPE_ERROR when the system error will record this level
> * LOG_TYPE_EMEGENCY emegency log that will send SMS or Email to admin
> * LOG_TYPE_EXCEPTION Exception log
> * LOG_TYPE_PERFORMENCE performance log all the dig point will use this

#### Curl dig point
curl dig point

```
//curl must fill
$digpooint = RagnarSDK::digLogStart(__FILE__, __LINE__, "curl");

//curl init ....

$nextrpcidheader = RagnarSDK::getCurlChildCallParam($digpooint);
curl_setopt($this->ch, CURLOPT_HTTPHEADER, $nextrpcidheader);

$result = //curl exec ...

$ext = array("errorno" => $errno, "error" => curl_error($this->ch));
$info = curl_getinfo($this->ch);

//digCurlEnd($digPoint, $url, $method, $postParam, $getParam, $curlInfo, $errCode, $errMsg, $result)

RagnarSDK::digLogEnd($digpooint, array(
"url" => $info['url'], "method" => self::get_method(),
"param" => array("post" => $this->post_fields, "get" => $this->query_fields),
"info" => $info,
"error" => $ext,
"result" => json_decode($result,true),//must array
);

```

#### Mysql
Mysql dig point
```
//this for record the exception when the error
RagnarSDK::RecordLog(\Adinf\RagnarSDK\RagnarSDK::LOG_TYPE_EXCEPTION, __FILE__, __LINE__, "mysql", array("fun" => "query", "sql" => $sql, "error" => $ex->getMessage()));

//start monitor the performance
$digPoint = RagnarSDK::digLogStart(__FILE__, __LINE__, "mysql");

//do some sql execute

//for the mysql performance dig point end
//RagnarSDK::digLogEnd($digPoint, array("sql" => $sql, "data" => "sql的参数", "op" => "select\delete\update\...", "fun" => "execute_sql"));
RagnarSDK::digMysqlEnd($digPoint, $sql, "sql的参数", "select\delete\update\...", "execute_sql");
//if is error
if(error){
RagnarSDK::RecordLog(RagnarConst::LOG_TYPE_EXCEPTION, __FILE__, __LINE__, "mysql", array("fun" => "execute", "sql" => $sql, "error" => $error));
}
```

### Temporary change
online change the log level by send header

```
X-RAGNAR-TRACEID traceid
X-RAGNAR-RPCID rpcid (spanid)
X-RAGNAR-LOGLEVEL log level
```