Skip to content
Michail Buylov edited this page May 6, 2021 · 2 revisions

JSONRPC API AG (aggregate)

Ручная установка счетчиков (set)

  • ts - время * 1000000 округленное до масштаба. Например для часового int(время/3600)*3600
  • name — имя счетчика
  • ag — значения

Пример запроса

{
  "jsonrpc":"2.0",
  "method": "set",
  "id": 1,
  "params": {
      "name":"server~~serice~~script",
      "ts":123456789000000,
      "ag":{
        "avg":1,
        "count":2,
        "perc50":3,
        "perc80":4,
        "perc95":5,
        "perc99":6,
        "perc100":7,
      }
  }
}

Пример ответа

{
  "jsonrpc":"2.0",
  "id":1,
  "result": true
}

агрегация счетчиков (add)

  • если ts=0, то берётся текущее время сервера
  • name — единственный обязательный параметр
  • cl — набор данных, по которым посчитаны указанные в ag параметры

Пример запроса

{
  "jsonrpc":"2.0",
  "method": "add",
  "id": 1,
  "params": {
      "name":"server~~serice~~script",
      "ts":123456789000000,
      "ag":{
        "avg":1,
        "count":2,
        "perc50":3,
        "perc80":4,
        "perc95":5,
        "perc99":6,
        "perc100"7,
      },
      "cl":[1,2,3,4]
    }
}

Пример ответа

{
  "jsonrpc":"2.0",
  "id":1,
  "result": true
}

удаление счетчиков (del)

  • name - имя удаляемого счетчика

Пример запроса

{
  "jsonrpc":"2.0",
  "method": "del",
  "id": 1,
  "params": {
      "name":"server~~serice~~script"
}

Пример ответа

{
  "jsonrpc":"2.0",
  "id":1,
  "result": true|false
}

мержинг счетчиков (merge)

Команду на мерж надо отправить на 5sec кольцо, на остальные не нужно.

Запрос для объедениения данных счетчиков по имени Парметры:

  • ts - время с которого начать мержинг
  • src - источник для мержа (имя счетчика)
  • dst - куда мержить (имя счетсчика)
  • delsrc - удилять источник по операции

Пример запроса

{
  "jsonrpc":"2.0",
  "method": "merge",
  "id": 1,
  "params": {
    "ts": 1234567890000000|0,
    "src": имя (строка),
    "dst": имя (строка),
    "delsrc": true|false
  }
}

Пример ответа: merge

{
  "jsonrpc":"2.0",
  "id":1,
  "result": true|false
}

Получение агрегированных счетчиков (get, multi_get)

Думаем сделать 2 варианта:

  • get - выгрибаем счетчики для одного имени
  • multi_get - выгрибаем счетчики для нескольких имен

@ts@ — это время, начиная с которого нужно получить счётчики, в микросекундах. @limit@ — это не совсем лимит в привычном понимании. Это количество фиксированных точек в заданном масштабе, которые нужно охватить запросом. Пример: масштаб 5 секунд, просим limit=100 точек, начиная с ts=100500. Это значит, что мы просим охватить временной интервал с t1=100500 до t2=100500+1005 (ts+limitscale). Ненулевые значения при этом могут иметь как все 100, так и ни одной точки.

get

Пример запроса

 
{ 
"jsonrpc":"2.0", 
"method": "get", 
"id": 1, 
"params": { 
"name": "server~~service~~script", 
"ts": 1234567890000000|0, 
"offset": число|по умолчанию 0, 
"limit": чилсо|по умолчанию 3000 
} 
} 

Пример ответа: get

 
{ 
"jsonrpc":"2.0", 
"id":1, 
"result": { 
"name": "server~~service~~script~~name", 
"scale": 5000000, 
"counters": [ 
[123456789000000, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0], 
[123456794000000, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0], 
... таких элементов будет не больше limit; гарантируется, что не будет нулевых элементов ... 
] 
} 
} 

Пояснение. Формат одного элемента в массиве: [ts, avg, count, perc50, perc80, perc95, perc99, perc100, min, max, lossy]

multi_get

Ограничение limit&offset применяеются для всего набора имен

 
{ 
"jsonrpc":"2.0", 
"method": "multi_get", 
"id": 1, 
"params": { 
"names": [ 
"A", 
"B", 
"C", 
... 
], 
"ts": 1234567890000000|0, 
"offset": число|по умолчанию 0, 
"limit": чилсо|по умолчанию 3000 
} 
} 

Пример ответа: multi_get

 
{ 
"jsonrpc":"2.0", 
"id":1, 
"result": { 
"scale": 5000000, 
"data": [ 
{ 
"name": "A", 
"counters": [ 
[123456789000000, 1, 2, 3, 4, 5, 6, 7], 
[123456794000000, 1, 2, 3, 4, 5, 6, 7], 
... таких элементов будет не больше limit; гарантируется, что не будет нулевых элементов ... 
] 
}, 
{ 
"name": "B", 
"counters": [ 
[123456789000000, 1, 2, 3, 4, 5, 6, 7], 
[123456794000000, 1, 2, 3, 4, 5, 6, 7], 
... таких элементов будет не больше limit; гарантируется, что не будет нулевых элементов ... 
] 
}, 
.... 
] 
} 
} 

Получение списка имен (get_names)

Пример запроса. После обработки prefix, suffix ограничений запроса по всем значениям имен, имена сортируются, потом накладываются ограничения limit&offset. Например, чтобы выгрести все имена нужно использовать такие параметры: "prefix": "", "suffix": "", "limit": большое число (>400000)

в запросе по умолчанию следующие значения: prefix: "" suffix: "" limit: 10 offset: 0 sortby: "count"

{
  "jsonrpc":"2.0",
  "method": "get_names",
  "id": 1,
  "params": {
    "prefix":"server",
    "suffix":"~~hitlis:get"
    "offset": 0,
    "limit": 100,
    "sortby": "avg|count|perc50|perc80|perc95|perc99|perc100"
  }
}

Пример ответа

{
  "jsonrpc":"2.0",
  "id":1,
  "result": {
    "scale": 5000000,
    "names_ts": [
      {
        "name": "server~~service~~script~~A",
        "ts": 123456794000000
      },
      {
        "name": "server~~service~~script~~B",
        "ts": 123456794000000
      },
      ......
    ]
  }
}

Получение древовидной структуры имен (get_name_tree)

"sep": "~~" - значение сепаратора по умолчанию ntype (node type) - дополнительная фильтрация по типу (ветка в дереве или лист, либо оба) для вытаскиваемых данных При указании "leaf|all" можно указать сортировку получаемых имен (sortby). В случае "all" сначала добавляются значения, которые не листья (лексографическая сортировка), потом листья (сортировка по sortby). В конце накладываются ограничения limit&offset

{
  "jsonrpc":"2.0",
  "method": "get_name_tree",
  "id": 1,
  "params": {
    "prefix":"server",
    "depth": 1,
    "ntype": "all|branch|leaf" /*это перечисление*/
    "sep": "~~",
    "offset": 0,
    "limit": 100,
    "sortby": "count"
  }
}

Пример ответа

{
  "jsonrpc":"2.0",
  "id":1,
  "result": {
    "scale": 5000000,
    "prefix": "server"
    "branches": [
      "service1",
      "service2",
      "service3",
      ......
    ]
  }
}

JSONRPC API RT (realtime)

RT демон служит только для отправки счетчиков, делает первичную агрегацию. Сюда стата отправляется с php, далее по цепочке уходит в другие масштабы: rt->ag5s->ag1m->ag1h->ag1d .

multi_add

@ts@ — в микросекундах.

{
  "jsonrpc":"2.0",
  "method": "multi_add",
  "id": 1,
  "params": {
    "data": [
      {"name": "a", ts: 0|123456000000, "cl": [1,2,3,4,5,6,7,8,9,...], "count": 100500},
      {"name": "b", ts: 0|123456000000, "cl": [1,2,3,4,5,6,7,8,9,...], "count": 100500},
      ...
    ]
  }
}

Пример ответа

{
  "jsonrpc":"2.0",
  "id":1,
  "result": true
}

агрегация/установка счетчиков (add, set)

@ts@ — в микросекундах.

Пример запроса

{
  "jsonrpc":"2.0",
  "method": "add или set",
  "id": 1,
  "params": {
      "name":"server~~serice~~script",
      "ts":123456789000000,
      "count": 100500
      "cl":[1,2,3,4]
    }
}

Пример ответа

{
  "jsonrpc":"2.0",
  "id":1,
  "result": true
}

удаление счетчиков (del)

  • name - имя удаляемого счетчика

Пример запроса

{
  "jsonrpc":"2.0",
  "method": "del",
  "id": 1,
  "params": {
      "name":"server~~serice~~script"
}

Пример ответа

{
  "jsonrpc":"2.0",
  "id":1,
  "result": true|false
}