Menanyakan titik data dari satu atau beberapa deret waktu dalam rentang waktu tertentu. Kirim permintaan POST ke /api/query dengan isi JSON yang mendefinisikan rentang waktu dan satu atau beberapa subkueri.
Sintaksis permintaan
POST /api/queryParameter permintaan
| Parameter | Tipe | Wajib | Bawaan | Deskripsi |
|---|---|---|---|---|
start | Long | Ya | — | Awal rentang waktu. Satuan: detik atau milidetik. TSDB menentukan satuan berdasarkan nilai numeriknya. Lihat Satuan timestamp. |
end | Long | Tidak | Waktu server saat ini | Akhir rentang waktu. Satuan: detik atau milidetik. Nilai bawaan adalah waktu saat ini di server TSDB. Lihat Satuan timestamp. |
queries | Array | Ya | — | Array berisi subkueri. Lihat Parameter subkueri. |
msResolution | Boolean | Tidak | false | Menentukan apakah timestamp dikembalikan dalam milidetik. Hanya berlaku jika titik data yang ditanyakan menggunakan timestamp berpresisi detik. Jika true, semua timestamp dalam respons dikonversi ke milidetik. Jika false, satuan asli dipertahankan. Titik data yang disimpan dengan timestamp milidetik selalu dikembalikan dalam milidetik, terlepas dari pengaturan ini. |
hint | Map | Tidak | — | Petunjuk kueri untuk mengurangi waktu respons. Lihat Parameter: hint. |
Satuan timestamp
TSDB menentukan satuan timestamp berdasarkan nilai numerik:
| Rentang | Satuan | Rentang tanggal |
|---|---|---|
[4294968, 4294967295] | Detik | 1970-02-20 01:02:48 – 2106-02-07 14:28:15 |
[4294967296, 9999999999999] | milidetik | 1970-02-20 01:02:47.296 – 2286-11-21 01:46:39.999 |
(-∞, 4294968) atau (9999999999999, +∞) | Tidak valid | — |
Aturan ini berlaku untuk/api/put(menulis) dan/api/query(menanyakan).
Untuk menanyakan titik data pada satu titik waktu tertentu, atur start dan end ke nilai yang sama—misalnya, 1356998400.
Parameter subkueri
Setiap objek dalam array queries mendukung parameter berikut:
| Parameter | Tipe | Wajib | Bawaan | Deskripsi |
|---|---|---|---|---|
aggregator | String | Ya | — | Fungsi agregasi. Lihat Parameter: aggregator. Contoh: sum. |
metric | String | Ya | — | Nama metrik. Contoh: sys.cpu0. |
rate | Boolean | Tidak | false | Menentukan apakah akan menghitung laju pertumbuhan antara nilai-nilai berurutan. Rumus: (Vt − Vt-1) / (t − t-1). |
delta | Boolean | Tidak | false | Menentukan apakah akan menghitung delta antara nilai-nilai berurutan. Rumus: Vt − Vt-1. Lihat Parameter: delta. |
limit | Integer | Tidak | 0 | Jumlah maksimum titik data yang dikembalikan per deret waktu per halaman. 0 berarti tanpa batas. |
offset | Integer | Tidak | 0 | Jumlah titik data yang dilewati per deret waktu per halaman. 0 berarti tidak ada titik data yang dilewati. |
dpValue | String | Tidak | — | Memfilter titik data yang dikembalikan berdasarkan nilainya. Operator yang didukung: >, <, =, <=, >=, !=. Jika nilainya berupa string, hanya = dan != yang didukung. Diterapkan setelah agregasi. |
preDpValue | String | Tidak | — | Memfilter titik data mentah selama pemindaian sebelum agregasi. Operator yang sama seperti dpValue. Titik data yang gagal melewati filter ini dikecualikan dari semua perhitungan. |
downsample | String | Tidak | — | Konfigurasi downsampling. Lihat Parameter: downsample. Contoh: 60m-avg. |
tags | Map | Tidak | — | Kondisi filter berbasis tag. Saling eksklusif dengan filters. Jika keduanya ditentukan, parameter yang muncul lebih akhir dalam JSON yang berlaku. |
filters | List | Tidak | — | Kondisi filter dalam format JSON. Saling eksklusif dengan tags. Jika keduanya ditentukan, parameter yang muncul lebih akhir dalam JSON yang berlaku. Lihat Parameter: filters. |
hint | Map | Tidak | — | Petunjuk kueri tingkat subkueri. Lihat Parameter: hint. |
forecasting | String | Tidak | — | Memprediksi titik data masa depan menggunakan Pelatihan AI. Lihat Parameter: forecasting. |
abnormaldetect | String | Tidak | — | Mendeteksi anomali dalam deret waktu menggunakan Pelatihan AI. Lihat Parameter: abnormaldetect. |
Satu permintaan mendukung maksimal 200 subkueri.
Jikatagsdanfilterskeduanya ditentukan, parameter yang muncul lebih akhir dalam JSON yang berlaku.
Contoh permintaan
POST /api/query{
"start": 1356998400,
"end": 1356998460,
"queries": [
{
"aggregator": "sum",
"metric": "sys.cpu.0",
"rate": "true",
"tags": {
"host": "*",
"dc": "lga"
}
}
]
}Elemen respons
Permintaan yang berhasil mengembalikan HTTP 200 dengan array JSON. Setiap elemen sesuai dengan hasil satu subkueri.
| Parameter | Deskripsi |
|---|---|
metric | Nama metrik. |
tags | Tag yang nilainya tidak diagregasi. |
aggregateTags | Tag yang nilainya diagregasi. |
dps | Titik data dalam bentuk pasangan timestamp-nilai. |
Contoh respons
[
{
"metric": "tsd.hbase.puts",
"tags": {"appName": "hitsdb"},
"aggregateTags": ["host"],
"dps": {
"1365966001": 25595461080,
"1365966061": 25595542522,
"1365966062": 25595543979,
"1365973801": 25717417859
}
}
]Parameter: limit dan offset
Gunakan limit dan offset bersamaan untuk membagi hasil menjadi beberapa halaman dalam satu subkueri.
limit: jumlah maksimum titik data yang dikembalikan per deret waktu. Nilai bawaan0berarti tanpa batas.offset: jumlah titik data yang dilewati per deret waktu. Nilai bawaan0berarti tidak ada titik data yang dilewati.
Baik limit maupun offset tidak boleh diatur ke angka negatif.
Untuk mengambil titik data peringkat 1001 hingga 1500, atur limit ke 500 dan offset ke 1000:
{
"start": 1346046400,
"end": 1347056500,
"queries": [
{
"aggregator": "avg",
"downsample": "2s-sum",
"metric": "sys.cpu.0",
"limit": "500",
"offset": "1000",
"tags": {
"host": "localhost",
"appName": "hitsdb"
}
}
]
}Parameter: dpValue
Memfilter titik data berdasarkan nilainya setelah agregasi. Operator yang didukung: >, <, =, <=, >=, !=.
Jika nilai filter berupa string, hanya = dan != yang didukung.
Contoh
{
"start": 1346046400,
"end": 1347056500,
"queries": [
{
"aggregator": "avg",
"downsample": "2s-sum",
"metric": "sys.cpu.0",
"dpValue": ">=500",
"tags": {
"host": "localhost",
"appName": "hitsdb"
}
}
]
}Parameter: delta
Ketika delta diatur ke true, setiap nilai dalam respons dps merupakan delta yang dihitung antara titik data berurutan. Jika hasil asli berisi n pasangan kunci-nilai, hasil delta berisi n−1 pasangan—pasangan pertama dibuang karena tidak ada nilai sebelumnya untuk dihitung. Operator delta juga berlaku untuk nilai setelah downsampling.
deltaOptions
Konfigurasikan deltaOptions dalam subkueri untuk mengontrol cara delta dihitung.
| Parameter | Tipe | Wajib | Bawaan | Deskripsi |
|---|---|---|---|---|
counter | Boolean | Tidak | false | Memperlakukan nilai metrik sebagai hitungan kumulatif yang meningkat atau menurun secara monoton (mirip counter). Server tidak memvalidasi nilai metrik tersebut. |
counterMax | Integer | Tidak | — | Ambang batas untuk nilai delta ketika counter bernilai true. Jika delta absolut melebihi ambang batas ini, delta tersebut dianggap tidak normal. Jika tidak diatur, tidak ada ambang batas yang diterapkan. |
dropReset | Boolean | Tidak | false | Mengontrol perilaku untuk delta tidak normal ketika counterMax diatur. Jika true, delta tidak normal dibuang. Jika false, delta tidak normal diatur ulang ke 0. |
Contoh
{
"start": 1346046400,
"end": 1347056500,
"queries": [
{
"aggregator": "none",
"downsample": "5s-avg",
"delta": true,
"deltaOptions": {
"counter": true,
"counterMax": 100
},
"metric": "sys.cpu.0",
"dpValue": ">=50",
"tags": {
"host": "localhost",
"appName": "hitsdb"
}
}
]
}Parameter: downsample
Downsampling mengagregasi data dalam interval waktu tertentu, berguna saat menanyakan data dalam rentang waktu panjang. Rentang waktu dibagi menjadi jendela dengan interval yang ditentukan, dan setiap timestamp yang dikembalikan menandai awal jendela tersebut.
Format
<interval><satuan>-<aggregator>[-<kebijakan pengisian>]Ketika downsample ditentukan, TSDB secara otomatis memperluas rentang kueri sebesar satu interval di kedua sisi. Misalnya, rentang [1346846401, 1346846499] dengan interval 5 menit menjadi [1346846101, 1346846799].
Bidang
`interval`
Nilai numerik seperti 5 atau 60. Gunakan 0all untuk mengagregasi semua titik data dalam rentang menjadi satu nilai.
`units`
| Nilai | Satuan |
|---|---|
s | Detik |
m | Menit |
h | Jam |
d | Hari |
n | Bulan |
y | Tahun |
Secara bawaan, timestamp disejajarkan menggunakan pemotongan modulo: Timestamp sejajar = Timestamp data − (Timestamp data % Interval waktu).Untuk menyelaraskan berdasarkan interval kalender (misalnya, dari 00:00 hingga 00:00 hari berikutnya), tambahkancke satuan:1dc.
`aggregator`
| Operator | Deskripsi |
|---|---|
avg | Nilai rata-rata |
count | Jumlah titik data |
first | Nilai pertama |
last | Nilai terakhir |
min | Nilai minimum |
max | Nilai maksimum |
median | Nilai median |
sum | Jumlah nilai |
zimsum | Jumlah nilai (interpolasi nol) |
rfirst | Sama seperti first, tetapi mengembalikan timestamp asli alih-alih timestamp yang disejajarkan |
rlast | Sama seperti last, tetapi mengembalikan timestamp asli alih-alih timestamp yang disejajarkan |
rmin | Sama seperti min, tetapi mengembalikan timestamp asli alih-alih timestamp yang disejajarkan |
rmax | Sama seperti max, tetapi mengembalikan timestamp asli alih-alih timestamp yang disejajarkan |
Operatorrfirst,rlast,rmin, danrmaxtidak dapat digunakan bersamaan dengan kebijakan pengisian dalam ekspresi downsampling yang sama.
Kebijakan pengisian
Kebijakan pengisian menentukan cara TSDB mengisi nilai yang hilang dalam hasil downsampling. Saat tidak ada data dalam jendela waktu tertentu, TSDB menerapkan kebijakan pengisian untuk menghasilkan nilai.
| Kebijakan pengisian | Mengisi nilai yang hilang dengan |
|---|---|
none | Tanpa pengisian (bawaan) |
nan | null |
null | null |
zero | 0 |
linear | Nilai yang dihitung melalui interpolasi linear |
previous | Nilai sebelumnya |
near | Nilai terdekat di sekitarnya |
after | Nilai berikutnya |
fixed | Nilai tetap yang ditentukan pengguna |
Kebijakan pengisian tetap
Untuk mengisi nilai yang hilang dengan angka tetap, gunakan format:
<interval><satuan>-<aggregator>-fixed#<angka>Nilai tetap bisa positif atau negatif. Contoh: 1h-sum-fixed#6, 1h-avg-fixed#-8.
Contoh downsampling
1m-avg, 1h-sum-zero, 1h-sum-near
downsample bersifat opsional. Untuk menonaktifkan downsampling secara eksplisit, atur ke null atau string kosong: {"downsample": null} atau {"downsample": ""}.
Parameter: aggregator
Setelah downsampling, TSDB menggabungkan beberapa garis waktu menjadi satu dengan mengagregasi nilai pada setiap timestamp yang disejajarkan. Agregasi dilewati jika hanya satu garis waktu yang cocok dengan kueri.
Interpolasi
Saat mengagregasi beberapa garis waktu, garis waktu yang tidak memiliki nilai pada timestamp tertentu akan menerima nilai hasil interpolasi—asalkan tidak ada kebijakan pengisian yang ditentukan dan setidaknya satu garis waktu lain memiliki nilai pada timestamp tersebut.
Misalnya, menggabungkan dua garis waktu dengan {"downsample": "10s-avg", "aggregator": "sum"}:
Garis waktu 1 memiliki nilai pada
t+0,t+10,t+20,t+30.Garis waktu 2 memiliki nilai pada
t+0,t+20,t+30.
Sebelum agregasi, TSDB melakukan interpolasi nilai untuk Garis waktu 2 pada t+10. Metode interpolasi tergantung pada aggregator:
| Operator | Deskripsi | Metode interpolasi |
|---|---|---|
avg | Nilai rata-rata | Interpolasi linear |
count | Jumlah titik data | 0 diinterpolasi |
mimmin | Nilai minimum | Nilai maksimum diinterpolasi |
mimmax | Nilai maksimum | Nilai minimum diinterpolasi |
min | Nilai minimum | Interpolasi linear |
max | Nilai maksimum | Interpolasi linear |
none | Melewati agregasi | 0 diinterpolasi |
sum | Jumlah nilai | Interpolasi linear |
zimsum | Jumlah nilai | 0 diinterpolasi |
Parameter: filters
Parameter filters menerima daftar objek filter JSON untuk pemfilteran berbasis tag. Parameter ini saling eksklusif dengan parameter tags.
Parameter objek filter
| Parameter | Tipe | Wajib | Bawaan | Deskripsi |
|---|---|---|---|---|
type | String | Ya | — | Jenis filter. Lihat Jenis filter. Contoh: literal_or. |
tagk | String | Ya | — | Kunci tag yang difilter. Contoh: host. |
filter | String | Ya | — | Ekspresi filter. Contoh: web01|web02. |
groupBy | Boolean | Tidak | false | Menentukan apakah akan melakukan operasi GROUP BY pada nilai tag yang cocok. |
Anda juga dapat menggunakan ekspresi tag singkat langsung dalam subkueri:
tagk = *: melakukan GROUP BY pada semua nilai kunci tag.tagk = tagv1|tagv2: mengagregasi nilaitagv1dan nilaitagv2secara terpisah.
Jenis filter
| Jenis filter | Contoh | Deskripsi |
|---|---|---|
literal_or | web01|web02 | Mencocokkan nilai tag eksak yang dipisahkan oleh |. Sensitif terhadap huruf besar/kecil. |
wildcard | *.example.com | Mencocokkan nilai tag menggunakan pola wildcard. Sensitif terhadap huruf besar/kecil. |
Contoh tanpa filter
{
"start": 1356998400,
"end": 1356998460,
"queries": [
{
"aggregator": "sum",
"metric": "sys.cpu.0",
"rate": "true",
"tags": {
"host": "*",
"dc": "lga"
}
}
]
}Contoh dengan filter
{
"start": 1356998400,
"end": 1356998460,
"queries": [
{
"aggregator": "sum",
"metric": "sys.cpu.0",
"rate": "true",
"filters": [
{
"type": "wildcard",
"tagk": "host",
"filter": "*",
"groupBy": true
},
{
"type": "literal_or",
"tagk": "dc",
"filter": "lga|lga1|lga2",
"groupBy": false
}
]
}
]
}Parameter: hint
Petunjuk kueri mengurangi waktu respons dengan mengontrol indeks kunci-tag mana yang digunakan TSDB selama eksekusi kueri. Misalnya, jika deret waktu yang cocok dengan himpunan tag B merupakan subset dari yang cocok dengan himpunan tag A, Anda dapat memberi petunjuk agar TSDB hanya menggunakan indeks untuk B—menghindari overhead membaca dari A.
Parameter hint dapat diatur di tingkat atas (berlaku untuk seluruh kueri) atau di dalam subkueri (berlaku hanya untuk subkueri tersebut).
Versi TSDB saat ini hanya mendukung parameter tagk dalam petunjuk.Format
Dalam peta tagk, atur setiap kunci tag ke 1 untuk menggunakan indeksnya, atau 0 untuk melewatinya. Semua nilai harus berupa 0 atau 1—menggabungkan keduanya dalam satu petunjuk menyebabkan error.
Persyaratan versi: TSDB V2.6.1 dan yang lebih baru.
Petunjuk diterapkan pada subkueri
{
"start": 1346846400,
"end": 1346846400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"tags": {
"dc": "lga",
"host": "web01"
}
}
],
"hint": {
"tagk": {
"dc": 1,
"host": 0
}
}
}Petunjuk diterapkan pada seluruh kueri
{
"start": 1346846400,
"end": 1346846400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"tags": {
"dc": "lga",
"host": "web01"
}
}
],
"hint": {
"tagk": {
"dc": 1
}
}
}Kasus error
Nilai campuran `0` dan `1`
Permintaan berikut menyebabkan error karena dc bernilai 1 dan host bernilai 0:
{
"start": 1346846400,
"end": 1346846400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"tags": {
"dc": "lga",
"host": "web01"
}
}
],
"hint": {
"tagk": {
"dc": 1,
"host": 0
}
}
}Respons error:
{
"error": {
"code": 400,
"message": "Nilai petunjuk hanya boleh 0 atau 1, dan tidak boleh keduanya sekaligus",
"details": "TSQuery(start_time=1346846400, end_time=1346846400, subQueries[TSSubQuery(metric=sys.cpu.nice, filters=[filter_name=literal_or, tagk=dc, literals=[lga], group_by=true, filter_name=literal_or, tagk=host, literals=[web01], group_by=true], tsuids=[], agg=none, downsample=null, ds_interval=0, rate=false, rate_options=null, delta=false, delta_options=null, top=0, granularity=null, granularityDownsample=null, explicit_tags=explicit_tags, index=0, realTimeSeconds=-1, useData=auto, limit=0, offset=0, dpValue=null, preDpValue=null, startTime=1346846400000, endTime=1346846400000, Query_ID=null)] padding=false, no_annotations=false, with_global_annotations=false, show_tsuids=false, ms_resolution=false, options=[])"
}
}Nilai selain `0` atau `1`
{
"start": 1346846400,
"end": 1346846400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"tags": {
"dc": "lga",
"host": "web01"
}
}
],
"hint": {
"tagk": {
"dc": 100
}
}
}Respons error:
{
"error": {
"code": 400,
"message": "Nilai petunjuk hanya boleh 0 atau 1, dan terdeteksi bahwa '100' dikirimkan",
"details": "TSQuery(start_time=1346846400, end_time=1346846400, subQueries[TSSubQuery(metric=sys.cpu.nice, filters=[filter_name=literal_or, tagk=dc, literals=[lga], group_by=true, filter_name=literal_or, tagk=host, literals=[web01], group_by=true], tsuids=[], agg=none, downsample=null, ds_interval=0, rate=false, rate_options=null, delta=false, delta_options=null, top=0, granularity=null, granularityDownsample=null, explicit_tags=explicit_tags, index=0, realTimeSeconds=-1, useData=auto, limit=0, offset=0, dpValue=null, preDpValue=null, startTime=1346846400000, endTime=1346846400000, Query_ID=null)] padding=false, no_annotations=false, with_global_annotations=false, show_tsuids=false, ms_resolution=false, options=[])"
}
}Parameter: forecasting
Menggunakan Pelatihan AI pada data deret waktu historis untuk memprediksi titik data masa depan. TSDB dilatih menggunakan data yang ada untuk mengidentifikasi tren dan siklus, lalu memproyeksikan nilai ke depan.
Format
<NamaAlgoritma>-<JumlahTitikPrediksi>[-<KebijakanPrediksi>]Algoritma yang didukung
`arima` — AutoRegressive Integrated Moving Average (ARIMA).
KebijakanPrediksiuntuk ARIMA memiliki dua bidang:delta: orde diferensi. Bawaan:1. Tingkatkan untuk mengurangi fluktuasi data.seasonality: panjang siklus dalam jumlah titik data. Bawaan:1. Atur agar sesuai dengan siklus alami data (misalnya,10jika data berfluktuasi setiap 10 titik data).
`holtwinters` — Penghalusan eksponensial Holt-Winters.
ForecastPolicyuntuk Holt-Winters memiliki satu bidang:seasonality: sama seperti ARIMA. Bawaan:1.
Contoh: arima-1, arima-48-1-48, holtwinters-1-1
Contoh
Diberikan data yang ada dalam deret:
[
{
"metric": "sys.cpu.nice",
"tags": {"dc": "lga", "host": "web00"},
"aggregateTags": [],
"dps": {
"1346837400": 1,
"1346837401": 2,
"1346837402": 3,
"1346837403": 4,
"1346837404": 5,
"1346837405": 6,
"1346837406": 7,
"1346837407": 8,
"1346837408": 9,
"1346837409": 10,
"1346837410": 11,
"1346837411": 12
}
}
]Kueri:
{
"start": 1346837400,
"end": 1346847400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"forecasting": "arima-1"
}
]
}Hasil prediksi (satu titik data tambahan ditambahkan):
[
{
"metric": "sys.cpu.nice",
"tags": {"dc": "lga", "host": "web00"},
"aggregateTags": [],
"dps": {
"1346837400": 1,
"1346837401": 2,
"1346837402": 3,
"1346837403": 4,
"1346837404": 5,
"1346837405": 6,
"1346837406": 7,
"1346837407": 8,
"1346837408": 9,
"1346837409": 10,
"1346837410": 11,
"1346837411": 12,
"1346837412": 13
}
}
]Parameter: abnormaldetect
Menggunakan algoritma STL (Seasonal-Trend decomposition using Loess) untuk mendeteksi anomali dalam deret waktu. TSDB dilatih menggunakan data yang ada untuk mengidentifikasi pola, lalu menandai titik data yang menyimpang secara signifikan dari rentang yang diharapkan.
Format
<NamaAlgoritma>[-<Sigma>-<NP>-<NS>-<NT>-<NL>]Hanya algoritma STL yang didukung. Jika Anda tidak familiar dengan penyetelan parameter STL, gunakan nilai bawaan dengan menghilangkan bidang parameter tersebut.
Parameter
| Parameter | Deskripsi |
|---|---|
NamaAlgoritma | Nama algoritma. Gunakan stl. |
Sigma | Ambang batas anomali. Titik data ditandai sebagai tidak normal jika selisih absolut antara nilainya dan rata-rata deret melebihi Sigma × deviasi standar. Nilai umum: 3.0. |
NP | Jumlah titik data per siklus. |
NS | Parameter penghalusan musiman. |
NT | Parameter penghalusan tren. |
NL | Parameter penghalusan filter low-pass. |
Contoh
"abnormaldetect": "stl""abnormaldetect": "stl-5-5-7-0-0"Contoh kueri
{
"start": 1346836400,
"end": 1346946400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"abnormaldetect": "stl-5-5-7-0-0",
"filters": [
{
"type": "literal_or",
"tagk": "dc",
"filter": "lga",
"groupBy": false
},
{
"type": "literal_or",
"tagk": "host",
"filter": "web00",
"groupBy": false
}
]
}
]
}Output deteksi anomali
Setiap nilai dalam dps berupa array dengan format:
[srcValue, upperValue, lowerValue, predictValue, isAbnormal]| Bidang | Deskripsi |
|---|---|
srcValue | Nilai titik data asli. |
upperValue | Batas atas rentang yang diharapkan. |
lowerValue | Batas bawah rentang yang diharapkan. |
predictValue | Nilai yang diprediksi oleh algoritma STL. |
isAbnormal | 0 — normal. 1 — tidak normal. |
Contoh output
[
{
"metric": "sys.cpu.nice",
"tags": {"dc": "lga", "host": "web00"},
"aggregateTags": [],
"dps": {
"1346837400": [1, 1.0000000000000049, 0.9999999999999973, 1.0000000000000013, 0],
"1346837401": [2, 2.0000000000000036, 1.9999999999999958, 1.9999999999999998, 0],
"1346837402": [3, 3.0000000000000036, 2.9999999999999956, 3, 0],
"1346837403": [4, 4.0000000000000036, 3.9999999999999956, 4, 1],
"1346837404": [5, 5.0000000000000036, 4.9999999999999964, 5, 0],
"1346837405": [6, 6.000000000000002, 5.999999999999995, 5.999999999999998, 0],
"1346837406": [7, 7.0000000000000036, 6.9999999999999964, 7, 1],
"1346837407": [8, 8.000000000000004, 7.9999999999999964, 8, 0],
"1346837408": [9, 9.000000000000004, 8.999999999999996, 9, 0],
"1346837409": [10, 10.000000000000004, 9.999999999999996, 10, 0],
"1346837410": [11, 11.000000000000005, 10.999999999999998, 11.000000000000002, 0],
"1346837411": [12, 12.000000000000004, 11.999999999999996, 12, 0]
}
}
]