diff --git a/messaging/Makefile b/messaging/Makefile new file mode 100644 index 0000000..2c1d6ff --- /dev/null +++ b/messaging/Makefile @@ -0,0 +1,22 @@ +setup: + cd ./config && bash ./setup.sh + docker compose up -d +.PHONY: setup + +cleanup: + docker compose down + cd ./config && bash ./cleanup.sh +.PHONY: cleanup + +up: + docker compose up -d +.PHONY: up + +down: + docker compose down +.PHONY: down + +run: + ./krakend run -c ./config/krakend.json +.PHONY: run + diff --git a/messaging/README.md b/messaging/README.md new file mode 100644 index 0000000..cc99d91 --- /dev/null +++ b/messaging/README.md @@ -0,0 +1,293 @@ +# Messaging + +## Environment + +The first you running, you will need to generate the CA and the +self signed certificates. Run `make setup` and fill the required fields +and accept signing the certificates. (see [config's README.md](./confit/README.md)). + +It will bring up the following services: + +- `kafkabroker`: a single node kafka broker +- `seckafkabroker`: a single node kafka broker configured to use + mTLS for its connections + +Along with services for telemetry: + +- `prometheus` +- `grafana` +- `jaeger` + +## The example "use case" + +Imagine we want to automate some stocks buying and selling, based on +some custom logic that is implemented in some of our backends. + +We have a source of public reliable information that publishes stock +prices updates using a kafka service: that is `kafkabroker`. This service +has a `stockprice` topic, where we can subscribe to receive the updates. + +We also have a service that allows to manage our portfolio and execute +buy an sell order. To identify ourselves we are given a client certificate +that we will use to connect using `mTLS` to the service. That is +`seckafkabroker`. This service exposes a topic where we can place our +orders: `orderplacement`, and also offers us a topic `portfolioupdates` so we +get status updates on the executed orders. + + +### Producing messages + +In order to produce messages you will need to have installed the +`kaf` tool: [https://github.com/birdayz/kaf](https://github.com/birdayz/kaf). + + +Under the [`clients/kak/producer`](./clients/kaf/producer) folder you will find +scripts to generate data: + +- [`generate_ticker_data.sh`](./clients/kaf/producers/generate_ticker_data.sh): will + emit messages for ticker from the `prices.txt` file every 1 second. + (we can change the period by changing the `SLEEP_PERIOD` variable). +- [`send_portfolio_update.sh`](./clients/producer/kaf_ssl.sh): to emit a fake + message in the `portfolioupdates` topic. +- [`kaf.sh`](./clients/producer/kaf.sh): to emit a single ticker value + to `stockprice` topic on the `kafkabroker` server. + +### Consuming messages + +To chck the messages that are in the queues there are some scripts +in the `clients/kaf/consumers` directory: + +- `kaf_consume.sh`: to see the `stockprice` topic +- `seckaf_consume.sh`: to see what is in the seckafkabroker topics + (edit the script to select the topic to read from). + + +# Troubleshooting + +### cannot find certificates + +In case you have your certificates in a custom directory (probably because +you are running a local instance of KrakenD), and you cannot connect +to a mTLS kafka broker, you will get a `connection refused` error, like this one: + +``` +[KRAKEND] 2026/02/23 - 16:54:02.222 :arrow_forward: ERROR [BACKEND: /_consumer/][backend/pubsub/subscriber/kafka](GET /portfolio/order) cannot instantiate: cannot initialize kafka reader: "cannot open subscription: kafka: client has run out of available brokers to talk to: dial tcp [::1]:49092: connect: connection refused" +``` + +In that case, check +# Improved Kafka support (Documentation) + +## Async Agent + +The `async_agent` section in the main config contains an array of objects that +define the configuration of a given async agent. By using the `async/kafka` +namespace under the `extra_config` key, we select the Kafka driver. + +The driver fields are the same that can be found in the kafka pubsub +subscriber config `reader` field: + +- `group_id`: the name of the consumer group to use +- `key_meta`: the name of the header where the kafka message key value is written +- `topics`: a list of topics to read from. +- `connection`: details to connect to the kafka service +- `consumer`: details about to read from the topic + + +#### The `connection` config + +- `brokers`: (required) the list of `[host]:[port]` addresses of the kafka brokers to + connecto to. +- `client_id`: (optional) a name to identify the client that is stablishing the + connection (nothing to do with the consumer group id). If not provided, + it defaults to Krakend with the version. +- `client_tls`: (optional) in order to authenticate using `mTLS`, or allow + https insecure connection, we have the same options available that + in regular [https backend requests](https://www.krakend.io/docs/enterprise/service-settings/tls/#client-tls-settings). +- `sasl`: (optional) to authenticate using [Simple Authentication and Security Layer](https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer). + There are multiple SASL authentication methods but the current implementation + is **limited to plaintext (SASL/PLAIN) authentication**. + + - `user`: the username to use + - `password`: the password + - `azure_event_hub`: (optional) set to true if you want to use Azure + EventHub, that uses SASL V0 (instead of the default V1.x). + +- `dial_timeout`: (optional) specifies a duration (in string format: "100ms", "1s",..) + for the maximum time to dial to the brokers + +- `read_timeout`: (optional) specifies a duration (in string format: "100ms", "1s",..) + for the maximum time complete a read operation. + + +- `write_timeout`: (optional) specifies a duration (in string format: "100ms", "1s",..) + for the maximum time complete a write operation. + +- `keep_alive`: (optional) specifies a duration (in string format: "100ms", "1s",..) + to maintain a connection open while while not being used. + +- `rack_id`: (optional) a rack identifier for this client. This can be any string + value which indicates where this client is physically located. It + corresponds with the broker config 'broker.rack' + +- `channels_buffer_size`: (optional) The number of events to buffer in internal + and external channels. This permits the producer and consumer to continue + processing some messages in the background while user code is working, + greatly improving throughput. Defaults to 256. + +### The `consumer` config + +Since the `topic` to consume from is already defines at the general async +agent config level, here we define properties specific for the kafka driver. + +- `group_session_timeout`: The timeout used to detect consumer failures when using Kafka's group management facility. + The consumer sends periodic heartbeats to indicate its liveness to the broker. + If no heartbeats are received by the broker before the expiration of this session timeout, + then the broker will remove this consumer from the group and initiate a rebalance. + Note that the value must be in the allowable range as configured in the broker configuration + by `group.min.session.timeout.ms` and `group.max.session.timeout.ms` (default 10s) + + +- `group_heartbeat_interval`: The expected time between heartbeats to the consumer coordinator when using Kafka's group + management facilities. Heartbeats are used to ensure that the consumer's session stays active and + to facilitate rebalancing when new consumers join or leave the group. + The value must be set lower than Consumer.Group.Session.Timeout, but typically should be set no + higher than 1/3 of that value. + It can be adjusted even lower to control the expected time for normal rebalances (default 3s) + + +- `group_rebalance_strategies`: the priority-ordered list of client-side consumer group + balancing strategies that will be offered to the coordinator. The first + strategy that all group members support will be chosen by the leader. + default: [ NewBalanceStrategyRange() ] + can be : + range -> RangeBalanceStrategyName + roundrobin -> RoundRobinBalanceStrategyName + sticky -> StickyBalanceStrategyName +- `group_rebalance_timeout`: The maximum allowed time for each worker to join the + group once a rebalance has begun. + This is basically a limit on the amount of time needed for all tasks to flush any pending + data and commit offsets. If the timeout is exceeded, then the worker will be removed from + the group, which will cause offset commit failures (default 60s). +- `group_instance_id`: support KIP-345 + +- `fetch_default`: The default number of message bytes to fetch from the broker in each + request (default 1MB). This should be larger than the majority of + your messages, or else the consumer will spend a lot of time + negotiating sizes and not actually consuming. Similar to the JVM's + `fetch.message.max.bytes`. + +- `isolation_level`: IsolationLevel support 2 mode: + - use `read_commited` (default) to consume and return all messages in message channel + - use `read_uncommited` to hide messages that are part of an aborted transaction + +## Pub Sub + +### Publisher + +By adding the `backend/pubsub/publisher/kafka` key under a **backend**'s +`extra_config`, we override the regular configuration of the backend +to publish a message in a kafka queue. + +The `input_headers` of the backend will be converted to the message +metadata. + +The configuration has the following properties: + +- `success_status_code`: the return status code after a message has been + successfully published into a topic. **Warning**: is only possible + to specify a value of `2xx`, however, KrakenD only identifies a + successful response the one that return `200` or `201`. + +- `writer`: the definition of the topic we want to write to + - `connection`: this structure is the same that in + - `producer`: contains the specific configuration related to how to + configure + - `topic`: the topic name to write to + - `key_meta`: the meta field that will be used as key of the message + +#### `producer` object config + +- `max_message_bytes`: (int > 0, optional) The maximum permitted size of a message + (defaults to 1000000). Should be set equal to or smaller than + the broker's `message.max.bytes`. + +- `required_acks`: (string, optional) The level of acknowledgement reliability + needed from the broker (defaults to WaitForLocal). Equivalent to + the `request.required.acks` setting of the JVM producer. + - `"no_response"`: no requied acks (same as `"0"`) + - `"wait_for_local"`: waits for only the local commit to succeed before responding. + (same as `"1"`). + - `"wait_for_all"`: waits for all in-sync replicas to commit before responding. + The minimum number of in-sync replicas is configured on the broker via + the `min.insync.replicas` configuration key. The string can also contain + a number > 0 to set a given number of expected acks. + +- `required_acks_timeout`: (duration, optional) The maximum duration + the broker will wait the receipt of the number of `required_acks` + (defaults to 10 seconds). This is only relevant when `required_acks` + is set to WaitForAll or a number > 1. Only supports + millisecond resolution, nanoseconds will be truncated. Equivalent to + the JVM producer's `request.timeout.ms` setting. + +- `compression_codec`: (string, optional) The type of compression to use on + messages (defaults to no compression). + Similar to `compression.codec` setting of the JVM producer. + [ `"none"`, `"gzip"`, `"snappy"`, `"lz4"`, `"zstd"` ] (defaults to `none`) +- `compression_level`: (int, optional) The level of compression to use on + messages. The meaning depends on the actual compression type used and + defaults to default compression level for the codec. +- `partitioner`: (string, optional) defines how to select the partition to send + messages to (defaults to `standard`). Similar to the `partitioner.class` + setting for the JVM producer. Have the following options: + - `standard` is like `sarama` except that it handles absolute values + in the same way as the reference Java implementation. `sarama` was supposed to do + that but it had a mistake and now there are people depending on both behaviours. + - `sarama`: behaves as follows: If the message's key is nil then a + random partition is chosen. Otherwise the FNV-1a hash of the encoded bytes + of the message key is used, modulus the number of partitions. This ensures + that messages with the same key always end up on the same partition. + - `random` chooses a random partition each time. + - `roundrobin` walks through the available partitions one at a time. +- `idempotent`: (boolean, optional) If enabled, the producer will ensure + that exactly one copy of each message is written. +- `retry_max`: (int, optional) The total number of times to retry sending a message (default 3). + Similar to the `message.send.max.retries` setting of the JVM producer. +- `retry_backoff`: (duration, optional) How long to wait for the cluster to + settle between retries (default 100ms). Similar to the `retry.backoff.ms` + setting of the JVM producer. + + +### Consumer config + +It only contains a `reader` field, that corresponds to the same configuration +that the async kafka driver uses. + +- `reader`: same configuration that the async kafka driver uses. + +## OpenTelemery + +If OTEL is enabled these metrics will be reported by default for all messages +read (either in the async agent, or a subscriber backend) and written (by +a publisher backend). + +All of these matrics have these attributes set: + - `kind`: that helps identify the kind of queue systemthe message is + using (for example `kafka`). + - `topic`: the topic where the message is read from or going to be + writen to. + +- For reading: + - `messaging.read.body.size`: histogram of body sizes in bytes (does not include the size of metadata) + - `messaging.read.body.duration`: histogram of the duration taken to read a message + - `messaging.read.ack.duration` + - `messaging.read.failure.count` + +- For writing: + - `messaging.write.body.size`: histogram of body sizes in bytes (does not include the size of metadata) + - `messaging.write.body.duration`: histogram of duration taken to write a message + - `messaging.write.failure.count`: count of messages failed to be written + + +## **ACK** behaviour in Kafka + +TODO: put here the explanation of not acking a message, bug acking the one that comes after it diff --git a/messaging/clients/curl/generate_ticker_data.sh b/messaging/clients/curl/generate_ticker_data.sh new file mode 100755 index 0000000..fbda101 --- /dev/null +++ b/messaging/clients/curl/generate_ticker_data.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# this script produces fake ticker prices, using the `prices.txt` data +# with each line for each of the list of tickers +KRAKEND_ADDRESS=localhost:8080 +SLEEP_PERIOD=1 +TICKERS=('NVDA', 'AAPL', 'AMZN') + +export idx=0 +while read -r line +do + export idx=$(expr $idx + 1) + export idx=$(expr $idx % 3) + + export PRICE=$line + export TICKER=${TICKERS[$idx]} + export KKEY=$(date +%Y%m%d_%H%M%S) + echo '{"ticker": "$TICKER", "price": $PRICE}' | envsubst | \ + curl -X POST \ + -H 'Content-Type:application/json' \ + -H "X-Ticker: $TICKER" \ + -H "X-Time: $KKEY" \ + --data-binary @- \ + http://${KRAKEND_ADDRESS}/ticker/publish + sleep $SLEEP_PERIOD +done < './prices.txt' diff --git a/messaging/clients/curl/get_portfolio_order.sh b/messaging/clients/curl/get_portfolio_order.sh new file mode 100755 index 0000000..5c68836 --- /dev/null +++ b/messaging/clients/curl/get_portfolio_order.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +curl -v http://localhost:8080/portfolio/order diff --git a/messaging/clients/curl/post_portfolio_order.sh b/messaging/clients/curl/post_portfolio_order.sh new file mode 100755 index 0000000..0335443 --- /dev/null +++ b/messaging/clients/curl/post_portfolio_order.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +export IKEY=$(date +%Y%m%d_%H%M%S) +export ACTION="buy" +export AMOUNT=$(expr $RANDOM % 100) +export STOCK="AAPL" + +echo "Publishing order: $ACTION $STOCK (amount: $AMOUNT)" + +echo '{"action": "$ACTION", "amount": "$AMOUNT", "stock": "$STOCK"}' | \ + envsubst | \ + curl -X POST \ + -H "X-Idempotency-Key: $IKEY" \ + -H 'Some-Meta: avocados' \ + --data-binary @- \ + http://localhost:8080/portfolio/order diff --git a/messaging/clients/curl/prices.txt b/messaging/clients/curl/prices.txt new file mode 100644 index 0000000..f6481a8 --- /dev/null +++ b/messaging/clients/curl/prices.txt @@ -0,0 +1,5298 @@ +229.86619567871094 +233.5500030517578 +134.41000366210938 +229.36000061035156 +233.0800018310547 +133.47500610351562 +228.470703125 +231.88999938964844 +134.0290069580078 +228.47000122070312 +232.4600067138672 +134.3300018310547 +228.6999053955078 +233.0399932861328 +134.51499938964844 +227.69000244140625 +233.58999633789062 +134.51930236816406 +227.63999938964844 +233.1300048828125 +133.50999450683594 +233.33999633789062 +232.69119262695312 +133.94500732421875 +234.64999389648438 +231.3549041748047 +133.9698944091797 +234.57229614257812 +231.0 +132.7100067138672 +233.5449981689453 +231.8350067138672 +132.83230590820312 +233.3699951171875 +231.6699981689453 +133.03500366210938 +233.1107940673828 +232.32000732421875 +133.45140075683594 +232.77000427246094 +232.80999755859375 +132.8699951171875 +233.60499572753906 +229.85000610351562 +131.32020568847656 +235.07000732421875 +229.61000061035156 +130.61990356445312 +235.2899932861328 +230.76499938964844 +131.5749969482422 +235.47999572753906 +230.8800048828125 +130.97500610351562 +236.2100067138672 +230.7135009765625 +130.6898956298828 +236.46499633789062 +229.85499572753906 +131.52499389648438 +236.88999938964844 +228.89999389648438 +131.07989501953125 +237.8800048828125 +229.50379943847656 +134.5500030517578 +240.47999572753906 +228.6199951171875 +135.71499633789062 +240.34500122070312 +228.11500549316406 +135.00999450683594 +241.02999877929688 +228.1699981689453 +134.52499389648438 +241.7698974609375 +229.18280029296875 +135.12030029296875 +241.5449981689453 +229.63499450683594 +135.36129760742188 +241.52000427246094 +230.36000061035156 +135.25 +244.3800048828125 +227.7899932861328 +138.00010681152344 +243.94500732421875 +228.72999572753906 +136.5800018310547 +243.81520080566406 +228.29440307617188 +136.74009704589844 +243.99989318847656 +228.6699981689453 +137.3376007080078 +244.14999389648438 +228.93499755859375 +137.82000732421875 +244.10000610351562 +228.67999267578125 +138.36509704589844 +244.57000732421875 +228.67999267578125 +138.86000061035156 +244.0904998779297 +225.19140625 +140.66000366210938 +244.72999572753906 +224.95950317382812 +141.19500732421875 +244.42999267578125 +224.47500610351562 +139.96499633789062 +243.43499755859375 +224.10299682617188 +140.15139770507812 +243.05499267578125 +224.40269470214844 +139.5749969482422 +243.52000427246094 +224.58999633789062 +139.54989624023438 +244.47000122070312 +226.6699981689453 +139.41000366210938 +243.9398956298828 +224.00999450683594 +139.3300018310547 +244.3957061767578 +224.52000427246094 +139.94830322265625 +245.14999389648438 +224.62010192871094 +139.81500244140625 +244.7100067138672 +224.76499938964844 +140.639892578125 +244.9001007080078 +225.49000549316406 +140.44509887695312 +244.8800048828125 +226.0399932861328 +139.31939697265625 +244.8800048828125 +226.6699981689453 +139.24000549316406 +244.7449951171875 +223.4600067138672 +138.62060546875 +246.13059997558594 +222.61000061035156 +138.3000030517578 +246.3800048828125 +222.72000122070312 +139.5800018310547 +245.44500732421875 +222.35000610351562 +139.49000549316406 +245.2550048828125 +222.5399932861328 +139.80490112304688 +245.6199951171875 +222.69000244140625 +139.89999389648438 +245.86000061035156 +222.8699951171875 +140.1199951171875 +245.7899932861328 +219.4949951171875 +139.22999572753906 +247.1300048828125 +219.26499938964844 +139.19920349121094 +247.3699951171875 +217.6300048828125 +138.99110412597656 +247.44119262695312 +216.04969787597656 +137.1699981689453 +246.49000549316406 +214.9600067138672 +135.39669799804688 +245.8000030517578 +216.4398956298828 +135.10000610351562 +245.58999633789062 +216.49000549316406 +134.27000427246094 +247.85000610351562 +213.63510131835938 +132.92999267578125 +247.11019897460938 +214.19000244140625 +134.0399932861328 +247.7949981689453 +214.6999969482422 +134.60000610351562 +248.0500030517578 +214.97279357910156 +134.6199951171875 +248.66000366210938 +214.58709716796875 +132.72000122070312 +247.61000061035156 +214.2613067626953 +132.57000732421875 +247.22999572753906 +212.72999572753906 +130.10000610351562 +245.11000061035156 +207.11500549316406 +125.33999633789062 +246.52499389648438 +205.97000122070312 +126.19000244140625 +249.5800018310547 +207.80560302734375 +128.52499389648438 +247.97999572753906 +209.52999877929688 +128.3699951171875 +247.66810607910156 +210.75999450683594 +127.2699966430664 +247.72000122070312 +212.5399932861328 +128.81500244140625 +247.0500030517578 +212.8000030517578 +126.62999725341797 +243.47999572753906 +216.91000366210938 +130.4499969482422 +241.80999755859375 +216.8800048828125 +132.4149932861328 +243.1300048828125 +217.07000732421875 +132.55679321289062 +240.34030151367188 +214.67999267578125 +130.3751983642578 +239.82000732421875 +213.77000427246094 +129.88999938964844 +239.9499969482422 +213.72000122070312 +130.74000549316406 +240.30999755859375 +214.27000427246094 +131.52000427246094 +241.375 +214.41000366210938 +127.4800033569336 +241.52000427246094 +214.10870361328125 +126.27999877929688 +241.05799865722656 +213.65499877929688 +127.08000183105469 +241.89999389648438 +213.75 +127.61000061035156 +240.6300048828125 +211.08999633789062 +123.74500274658203 +238.9199981689453 +209.80999755859375 +121.91000366210938 +237.3800048828125 +208.82000732421875 +120.01000213623047 +237.59500122070312 +210.5742950439453 +122.7300033569336 +236.9199981689453 +209.3699951171875 +121.55999755859375 +237.60499572753906 +209.28500366210938 +122.18099975585938 +237.41000366210938 +208.5124053955078 +120.57990264892578 +237.9199981689453 +208.20249938964844 +120.47000122070312 +239.7100067138672 +209.77000427246094 +121.88500213623047 +241.83999633789062 +212.3000030517578 +125.05000305175781 +241.48500061035156 +210.6699981689453 +119.51000213623047 +241.19000244140625 +208.6699981689453 +119.22000122070312 +242.5399932861328 +209.2332000732422 +118.41000366210938 +240.96499633789062 +207.36000061035156 +115.23999786376953 +241.15179443359375 +207.24000549316406 +116.04499816894531 +236.8892059326172 +204.22999572753906 +113.16999816894531 +238.13999938964844 +205.05999755859375 +114.01000213623047 +238.39999389648438 +198.35000610351562 +111.61000061035156 +238.6300048828125 +199.40499877929688 +111.83000183105469 +238.1649932861328 +203.06500244140625 +116.01020050048828 +236.75 +202.89999389648438 +116.19999694824219 +238.2888946533203 +204.85000610351562 +117.7698974609375 +238.69000244140625 +206.1999969482422 +118.88999938964844 +236.07000732421875 +203.85000610351562 +115.95999908447266 +230.9199981689453 +205.19500732421875 +115.97000122070312 +230.6490020751953 +205.44500732421875 +115.40989685058594 +234.53990173339844 +207.34500122070312 +116.56310272216797 +234.67999267578125 +207.67999267578125 +116.2699966430664 +235.74749755859375 +208.64999389648438 +117.10980224609375 +236.0399932861328 +209.10040283203125 +117.66000366210938 +235.77000427246094 +208.4600067138672 +117.29000091552734 +236.47000122070312 +205.1199951171875 +114.84439849853516 +236.77999877929688 +203.8350067138672 +114.05999755859375 +234.4149932861328 +201.31500244140625 +111.6355972290039 +234.2949981689453 +200.8350067138672 +111.53500366210938 +233.69000244140625 +198.8000030517578 +110.52999877929688 +235.17999267578125 +199.52000427246094 +111.09719848632812 +235.32000732421875 +200.6999969482422 +110.58000183105469 +238.30999755859375 +199.4250030517578 +111.04000091552734 +239.02000427246094 +194.52499389648438 +109.69999694824219 +239.2899932861328 +193.9199981689453 +109.00499725341797 +240.41439819335938 +197.16009521484375 +110.50890350341797 +239.64999389648438 +200.3350067138672 +112.25 +238.8114013671875 +199.13999938964844 +112.6050033569336 +239.07000732421875 +199.27000427246094 +112.7300033569336 +228.5500030517578 +193.30999755859375 +108.06439971923828 +226.50869750976562 +194.33999633789062 +107.658203125 +225.47999572753906 +193.63999938964844 +108.08499908447266 +225.2100067138672 +193.18190002441406 +107.06009674072266 +226.5800018310547 +192.345703125 +106.76000213623047 +226.9761962890625 +193.0800018310547 +106.64990234375 +227.54100036621094 +194.66000366210938 +107.0199966430664 +222.52000427246094 +195.47500610351562 +106.30999755859375 +221.00320434570312 +197.11000061035156 +108.8949966430664 +218.5500030517578 +196.4499969482422 +108.81999969482422 +217.7550048828125 +193.5500030517578 +107.55999755859375 +220.5449981689453 +197.25999450683594 +110.43000030517578 +221.82020568847656 +198.34500122070312 +110.80860137939453 +220.72999572753906 +196.5 +108.63999938964844 +218.9499969482422 +198.58999633789062 +114.65010070800781 +216.44500732421875 +196.78500366210938 +114.51000213623047 +218.3603973388672 +199.52000427246094 +115.83499908447266 +218.18980407714844 +199.4333953857422 +116.11499786376953 +216.11000061035156 +199.22000122070312 +115.55500030517578 +215.639892578125 +199.01499938964844 +115.44999694824219 +216.94000244140625 +198.88999938964844 +115.73999786376953 +214.27999877929688 +195.71499633789062 +116.65499877929688 +214.0402069091797 +194.85000610351562 +116.08000183105469 +211.94000244140625 +193.7100067138672 +115.86090087890625 +211.15499877929688 +192.5399932861328 +115.26499938964844 +212.2899932861328 +193.89999389648438 +116.94999694824219 +210.6300048828125 +193.05999755859375 +116.00499725341797 +209.7100067138672 +193.91000366210938 +115.70999908447266 +210.3780975341797 +195.8350067138672 +119.52490234375 +211.92999267578125 +197.25999450683594 +120.93000030517578 +212.23069763183594 +197.41000366210938 +120.51499938964844 +212.31500244140625 +197.6699981689453 +120.54499816894531 +211.2449951171875 +197.0500030517578 +120.2750015258789 +212.90530395507812 +197.66250610351562 +120.58499908447266 +213.3800048828125 +197.94000244140625 +121.44999694824219 +213.22470092773438 +196.1649932861328 +119.53500366210938 +210.75469970703125 +195.4199981689453 +119.29499816894531 +211.1999969482422 +194.71299743652344 +118.36509704589844 +212.33030700683594 +196.1403045654297 +119.17489624023438 +214.4550018310547 +198.36000061035156 +120.5 +214.68499755859375 +197.47000122070312 +120.3644027709961 +214.19000244140625 +195.85000610351562 +119.4800033569336 +214.55140686035156 +190.82000732421875 +115.83999633789062 +213.3300018310547 +191.72000122070312 +116.75499725341797 +213.72000122070312 +192.24000549316406 +117.63999938964844 +212.2834014892578 +192.05999755859375 +117.15499877929688 +211.9949951171875 +192.56500244140625 +116.63870239257812 +212.34500122070312 +193.35499572753906 +116.13500213623047 +212.7899932861328 +192.91000366210938 +115.58000183105469 +217.14500427246094 +193.47999572753906 +116.98999786376953 +215.66900634765625 +193.4499969482422 +117.24500274658203 +215.3000030517578 +193.78500366210938 +118.0250015258789 +214.3800048828125 +192.21499633789062 +117.45860290527344 +214.27000427246094 +193.2449951171875 +118.53600311279297 +215.50990295410156 +194.33999633789062 +118.25 +215.3000030517578 +195.52000427246094 +117.5199966430664 +216.9904022216797 +197.80999755859375 +118.9000015258789 +216.0500030517578 +198.00999450683594 +119.63999938964844 +214.13999938964844 +195.0800018310547 +118.29000091552734 +213.22999572753906 +194.2595977783203 +117.88899993896484 +212.75999450683594 +193.7657012939453 +118.0791015625 +212.68350219726562 +194.14999389648438 +118.04499816894531 +214.14999389648438 +194.9499969482422 +118.47000122070312 +213.74000549316406 +195.15499877929688 +116.46939849853516 +213.44349670410156 +194.19119262695312 +116.29000091552734 +214.65499877929688 +195.35000610351562 +117.3499984741211 +214.6199951171875 +195.22500610351562 +117.06500244140625 +214.6699981689453 +195.375 +117.19110107421875 +215.30999755859375 +195.5802001953125 +116.78500366210938 +218.36000061035156 +196.22000122070312 +117.63500213623047 +219.77000427246094 +202.79359436035156 +120.4800033569336 +219.15750122070312 +201.80470275878906 +122.04000091552734 +219.0 +202.07850646972656 +121.75 +219.2899932861328 +202.15499877929688 +121.72879791259766 +219.75999450683594 +202.35000610351562 +121.81500244140625 +219.77000427246094 +203.0 +121.79499816894531 +220.42999267578125 +203.02999877929688 +121.2300033569336 +223.3699951171875 +205.13999938964844 +119.9800033569336 +223.52999877929688 +205.33999633789062 +120.2615966796875 +223.11000061035156 +204.75999450683594 +120.66020202636719 +222.80999755859375 +204.9199981689453 +120.23500061035156 +223.49000549316406 +205.4949951171875 +120.71510314941406 +223.4199981689453 +205.2100067138672 +120.69499969482422 +223.72999572753906 +205.6999969482422 +120.6449966430664 +224.07449340820312 +202.70010375976562 +115.11499786376953 +223.72000122070312 +203.31500244140625 +115.16500091552734 +223.6750030517578 +202.89999389648438 +114.03500366210938 +222.0800018310547 +201.7100067138672 +113.45999908447266 +221.8350067138672 +201.08999633789062 +113.6449966430664 +220.60000610351562 +200.47500610351562 +113.26499938964844 +221.39999389648438 +201.1479949951172 +113.69999694824219 +221.64999389648438 +202.8000030517578 +112.81500244140625 +222.8000946044922 +202.6300048828125 +113.55000305175781 +223.19500732421875 +202.5500030517578 +112.50499725341797 +223.10499572753906 +201.8000030517578 +111.69139862060547 +224.3699951171875 +202.3800048828125 +112.1449966430664 +224.7899932861328 +202.5500030517578 +112.66999816894531 +223.92999267578125 +201.36000061035156 +111.43000030517578 +219.91000366210938 +194.61000061035156 +109.27880096435547 +219.97999572753906 +194.82000732421875 +109.65499877929688 +218.69000244140625 +193.28500366210938 +109.58499908447266 +218.49000549316406 +192.3350067138672 +109.4749984741211 +219.0500030517578 +192.86990356445312 +110.01499938964844 +218.50999450683594 +192.60000610351562 +109.91000366210938 +217.8800048828125 +192.63999938964844 +109.63999938964844 +218.57000732421875 +184.72999572753906 +103.88999938964844 +219.1300048828125 +186.9792022705078 +105.1895980834961 +220.9199981689453 +188.7550048828125 +105.9800033569336 +219.8699951171875 +188.5959930419922 +105.72000122070312 +220.7949981689453 +189.8300018310547 +107.55010223388672 +221.22500610351562 +189.4250030517578 +107.23999786376953 +221.9949951171875 +190.2899932861328 +108.7699966430664 +221.5198974609375 +189.51499938964844 +107.12999725341797 +222.87989807128906 +192.22500610351562 +108.91089630126953 +222.52999877929688 +193.02000427246094 +109.4000015258789 +222.3385009765625 +192.13999938964844 +108.80120086669922 +221.5 +191.0 +107.71990203857422 +221.72999572753906 +191.3000030517578 +108.61129760742188 +223.13999938964844 +192.16000366210938 +110.1500015258789 +224.0399932861328 +192.17999267578125 +108.99859619140625 +224.47999572753906 +192.36500549316406 +110.25 +224.1300048828125 +195.77000427246094 +111.15239715576172 +224.72000122070312 +197.2353057861328 +111.23500061035156 +222.92999267578125 +194.61000061035156 +109.32499694824219 +223.66009521484375 +195.88999938964844 +109.6500015258789 +223.7899932861328 +195.9600067138672 +110.37999725341797 +205.63499450683594 +179.92999267578125 +105.1500015258789 +204.0500030517578 +180.11000061035156 +102.96990203857422 +206.05999755859375 +182.80999755859375 +103.66100311279297 +204.0050048828125 +181.052001953125 +103.0199966430664 +203.0 +179.77499389648438 +102.625 +202.1999969482422 +178.32000732421875 +102.66850280761719 +203.47000122070312 +178.5 +102.01000213623047 +195.27999877929688 +174.02000427246094 +94.60579681396484 +194.49000549316406 +176.28500366210938 +95.0999984741211 +192.80999755859375 +174.8699951171875 +93.82990264892578 +190.99000549316406 +174.77999877929688 +94.10009765625 +188.8800048828125 +174.4600067138672 +94.01000213623047 +190.22999572753906 +175.0850067138672 +95.16500091552734 +188.3800048828125 +170.97999572753906 +94.31999969482422 +182.39999389648438 +173.48500061035156 +93.61000061035156 +176.36000061035156 +170.88999938964844 +93.87999725341797 +178.13999938964844 +172.51499938964844 +95.87000274658203 +181.5399932861328 +174.77999877929688 +98.23290252685547 +180.3350067138672 +174.9600067138672 +97.41000366210938 +178.42129516601562 +173.8199005126953 +96.6500015258789 +181.58999633789062 +175.4499969482422 +97.70999908447266 +189.3300018310547 +182.20449829101562 +104.7300033569336 +184.08999633789062 +178.1510009765625 +102.05999755859375 +183.3300018310547 +177.16000366210938 +101.58499908447266 +175.02999877929688 +173.7274932861328 +98.77999877929688 +175.3300018310547 +173.9600067138672 +99.42990112304688 +172.88999938964844 +171.33999633789062 +96.31999969482422 +172.77000427246094 +171.08999633789062 +96.70999908447266 +178.41180419921875 +173.60499572753906 +99.97940063476562 +179.7550048828125 +171.68499755859375 +99.1688003540039 +179.58999633789062 +171.56500244140625 +99.44000244140625 +188.52499389648438 +181.27000427246094 +106.47000122070312 +190.8000030517578 +188.38999938964844 +112.02999877929688 +196.05999755859375 +189.33999633789062 +112.79000091552734 +198.85000610351562 +190.9499969482422 +114.25 +192.14500427246094 +184.59500122070312 +109.08000183105469 +188.8592071533203 +182.5800018310547 +107.8949966430664 +184.27000427246094 +176.49000549316406 +104.05000305175781 +188.00999450683594 +180.2550048828125 +106.47000122070312 +191.75999450683594 +182.8939971923828 +108.44400024414062 +189.98500061035156 +180.10000610351562 +106.44000244140625 +190.44000244140625 +181.0399932861328 +107.69999694824219 +189.92999267578125 +178.27999877929688 +107.69999694824219 +193.32000732421875 +179.52999877929688 +108.63999938964844 +195.80099487304688 +181.22250366210938 +109.44000244140625 +196.83070373535156 +182.88999938964844 +109.73999786376953 +197.5800018310547 +183.5749969482422 +110.3499984741211 +198.3419952392578 +184.47999572753906 +110.11000061035156 +198.02000427246094 +184.7899932861328 +110.69000244140625 +204.75 +184.97999572753906 +112.56700134277344 +203.60000610351562 +182.9499969482422 +111.33350372314453 +201.75 +180.57000732421875 +110.02999877929688 +203.86399841308594 +180.3800048828125 +110.44000244140625 +205.7899932861328 +181.67999267578125 +111.19999694824219 +205.7100067138672 +182.4199981689453 +111.3499984741211 +202.58999633789062 +182.08999633789062 +110.69999694824219 +200.8000030517578 +179.7906951904297 +111.01499938964844 +202.11500549316406 +180.9550018310547 +112.02999877929688 +203.0399932861328 +180.63999938964844 +113.26499938964844 +201.60440063476562 +179.1248016357422 +111.84010314941406 +201.76499938964844 +178.3531036376953 +112.12000274658203 +202.8000030517578 +178.98280334472656 +112.21009826660156 +202.1300048828125 +179.5800018310547 +112.0999984741211 +197.07000732421875 +176.64999389648438 +105.5199966430664 +198.35009765625 +178.67669677734375 +105.17510223388672 +196.91000366210938 +176.8300018310547 +103.91500091552734 +197.75999450683594 +176.69020080566406 +103.93499755859375 +194.55499267578125 +173.3000030517578 +102.18499755859375 +192.57000732421875 +171.6300048828125 +101.00499725341797 +194.3000030517578 +174.38999938964844 +104.5 +195.63999938964844 +172.9149932861328 +100.49500274658203 +196.0399932861328 +173.30999755859375 +100.39820098876953 +197.80499267578125 +173.83999633789062 +101.23500061035156 +196.6999969482422 +173.09500122070312 +100.8311996459961 +198.27999877929688 +174.1999969482422 +102.15630340576172 +197.24220275878906 +172.57000732421875 +101.21499633789062 +196.8699951171875 +172.58999633789062 +101.41000366210938 +192.1199951171875 +166.13999938964844 +95.83499908447266 +190.73500061035156 +166.82009887695312 +95.88999938964844 +191.1300048828125 +166.52999877929688 +95.80000305175781 +190.61399841308594 +165.63999938964844 +95.36859893798828 +190.82000732421875 +165.9290008544922 +95.58999633789062 +191.10499572753906 +165.85499572753906 +95.5999984741211 +193.08999633789062 +167.30999755859375 +96.80000305175781 +198.01499938964844 +171.88999938964844 +99.0199966430664 +198.8300018310547 +173.9199981689453 +98.8949966430664 +201.3800048828125 +176.58399963378906 +99.6500015258789 +198.5399932861328 +173.03500366210938 +98.1050033569336 +199.8917999267578 +173.0500946044922 +98.48500061035156 +198.6201934814453 +172.24989318847656 +97.70500183105469 +199.66000366210938 +173.1300048828125 +98.87999725341797 +206.80499267578125 +186.14999389648438 +104.18499755859375 +204.6300048828125 +183.2899932861328 +103.13700103759766 +204.11000061035156 +181.9613037109375 +103.36000061035156 +204.9499969482422 +181.9600067138672 +103.95999908447266 +204.48240661621094 +181.6300048828125 +103.71499633789062 +204.00999450683594 +180.85000610351562 +102.41999816894531 +204.36000061035156 +180.5399932861328 +102.53500366210938 +206.32000732421875 +183.72500610351562 +105.36869812011719 +205.9250030517578 +184.38319396972656 +105.34500122070312 +206.2899932861328 +185.02999877929688 +105.7489013671875 +206.90499877929688 +185.3000030517578 +106.29499816894531 +207.28900146484375 +185.81500244140625 +106.33470153808594 +207.09010314941406 +185.5399932861328 +105.7249984741211 +208.1999969482422 +186.47999572753906 +106.37999725341797 +206.63479614257812 +186.2100067138672 +107.54100036621094 +207.10000610351562 +187.11000061035156 +108.66000366210938 +208.63560485839844 +187.54730224609375 +109.4749984741211 +209.3701934814453 +188.66000366210938 +111.87000274658203 +208.50450134277344 +188.77149963378906 +110.83499908447266 +208.22000122070312 +189.38499450683594 +110.73500061035156 +209.22999572753906 +188.9499969482422 +110.95999908447266 +208.92999267578125 +188.42999267578125 +108.52519989013672 +207.9499969482422 +185.76150512695312 +106.5999984741211 +207.86000061035156 +185.0500030517578 +106.5509033203125 +208.13999938964844 +185.16000366210938 +106.27999877929688 +209.8699951171875 +186.2700958251953 +107.30000305175781 +210.5399932861328 +187.44000244140625 +108.19000244140625 +210.08999633789062 +187.6699981689453 +108.63999938964844 +210.9499969482422 +185.7949981689453 +108.52999877929688 +211.0399932861328 +186.2949981689453 +108.80979919433594 +210.48800659179688 +186.956298828125 +108.875 +210.36000061035156 +186.30999755859375 +108.73500061035156 +211.7227020263672 +187.94000244140625 +109.9801025390625 +211.3000030517578 +187.41000366210938 +109.4000015258789 +211.24000549316406 +187.39999389648438 +108.91999816894531 +209.32119750976562 +181.03790283203125 +105.98500061035156 +210.5449981689453 +181.72999572753906 +106.375 +210.58999633789062 +180.88499450683594 +106.05500030517578 +211.0800018310547 +181.69000244140625 +106.47000122070312 +210.71499633789062 +182.1300048828125 +107.19499969482422 +210.3446044921875 +181.7899932861328 +107.25499725341797 +212.49000549316406 +184.32000732421875 +108.7750015258789 +211.74000549316406 +189.19000244140625 +113.33000183105469 +212.8966064453125 +190.36000061035156 +114.32499694824219 +212.77999877929688 +189.55099487304688 +113.65180206298828 +212.50999450683594 +189.89010620117188 +113.5647964477539 +212.77999877929688 +189.94639587402344 +113.66999816894531 +212.94000244140625 +191.68499755859375 +113.0 +212.8300018310547 +189.8350067138672 +111.52999877929688 +206.72000122070312 +189.61000061035156 +113.90499877929688 +204.9008026123047 +189.32989501953125 +114.65010070800781 +205.0 +192.02859497070312 +114.74500274658203 +204.69900512695312 +190.8249969482422 +114.364501953125 +204.8800048828125 +190.94500732421875 +114.80000305175781 +204.75999450683594 +190.3699951171875 +114.47000122070312 +205.3000030517578 +190.0 +114.38999938964844 +198.77999877929688 +187.16940307617188 +113.24500274658203 +199.19960021972656 +187.625 +113.9198989868164 +199.9739990234375 +187.35000610351562 +113.78500366210938 +200.41000366210938 +187.4770050048828 +114.12999725341797 +200.9600067138672 +187.34759521484375 +114.37100219726562 +199.39999389648438 +186.8699951171875 +114.3740005493164 +198.77000427246094 +186.2100067138672 +113.80999755859375 +198.91000366210938 +186.64999389648438 +112.65499877929688 +199.03500366210938 +186.80999755859375 +113.06999969482422 +198.97999572753906 +186.40460205078125 +113.01789855957031 +199.4250030517578 +185.5449981689453 +112.91999816894531 +199.30499267578125 +185.9259033203125 +113.68000030517578 +199.70840454101562 +185.72999572753906 +114.2300033569336 +198.41000366210938 +184.97999572753906 +113.44499969482422 +199.22000122070312 +190.80999755859375 +113.48030090332031 +194.35069274902344 +187.98500061035156 +113.29499816894531 +194.8699951171875 +187.83770751953125 +113.67990112304688 +195.3000030517578 +188.993896484375 +113.94499969482422 +194.00999450683594 +187.74000549316406 +113.0000991821289 +194.32000732421875 +187.6199951171875 +113.23500061035156 +196.25 +188.77000427246094 +117.0199966430664 +195.82000732421875 +190.27000427246094 +117.23999786376953 +197.5399932861328 +191.66000366210938 +117.26000213623047 +199.24000549316406 +192.99839782714844 +118.04989624023438 +199.13999938964844 +193.76499938964844 +117.90489959716797 +198.63999938964844 +193.072998046875 +117.9749984741211 +199.55999755859375 +193.9199981689453 +118.54049682617188 +197.39999389648438 +192.13499450683594 +117.37000274658203 +198.360107421875 +192.25 +116.13159942626953 +198.42999267578125 +192.2100067138672 +116.37750244140625 +198.13499450683594 +192.42999267578125 +116.28500366210938 +198.13999938964844 +192.14999389648438 +116.43000030517578 +198.91000366210938 +192.33999633789062 +116.58000183105469 +198.77999877929688 +193.08999633789062 +116.7251968383789 +198.5399932861328 +193.0800018310547 +116.62069702148438 +209.16000366210938 +206.9550018310547 +120.86000061035156 +208.75999450683594 +206.86500549316406 +121.65139770507812 +208.72999572753906 +207.2801055908203 +122.37129974365234 +209.93499755859375 +208.24000549316406 +122.6614990234375 +210.77000427246094 +208.52000427246094 +122.73500061035156 +210.0500030517578 +207.97999572753906 +122.58499908447266 +210.8300018310547 +208.72000122070312 +122.98999786376953 +211.4499969482422 +214.48500061035156 +129.21499633789062 +211.38499450683594 +213.32000732421875 +129.8300018310547 +211.27999877929688 +213.94500732421875 +130.4600067138672 +211.7100067138672 +212.39999389648438 +130.8350067138672 +212.4600067138672 +212.05999755859375 +130.44500732421875 +213.22999572753906 +211.61830139160156 +130.21499633789062 +212.83999633789062 +211.19000244140625 +129.83999633789062 +213.2899932861328 +211.02000427246094 +132.66000366210938 +212.6199951171875 +211.75 +134.15499877929688 +212.2899932861328 +210.85000610351562 +134.97000122070312 +210.9600067138672 +209.8249969482422 +134.4600067138672 +211.3699951171875 +209.97900390625 +134.55999755859375 +211.3594970703125 +209.6300048828125 +134.88999938964844 +212.41000366210938 +210.24000549316406 +135.34710693359375 +210.27499389648438 +204.2100067138672 +133.27000427246094 +212.49639892578125 +204.470703125 +134.38499450683594 +211.64169311523438 +204.9385986328125 +135.2165985107422 +212.12010192871094 +205.52000427246094 +136.22000122070312 +210.6300048828125 +204.86000061035156 +135.36000061035156 +210.36000061035156 +204.2899932861328 +133.73500061035156 +211.45799255371094 +205.13999938964844 +134.89999389648438 +210.60000610351562 +205.52969360351562 +135.4250030517578 +210.0800018310547 +204.89999389648438 +134.86500549316406 +210.9550018310547 +205.3300018310547 +134.7949981689453 +211.11000061035156 +204.8596954345703 +135.82179260253906 +211.6199951171875 +204.97999572753906 +135.03500366210938 +211.72500610351562 +205.24000549316406 +135.08030700683594 +211.19000244140625 +205.55999755859375 +135.32000732421875 +206.61990356445312 +205.27000427246094 +135.28500366210938 +207.3300018310547 +205.3105926513672 +134.9250030517578 +208.48260498046875 +206.0050048828125 +135.22500610351562 +208.92999267578125 +206.26499938964844 +135.27499389648438 +208.02999877929688 +205.55499267578125 +135.0850067138672 +208.1273956298828 +205.55999755859375 +135.1199951171875 +208.75999450683594 +206.13999938964844 +135.49000549316406 +207.84500122070312 +203.83999633789062 +132.9499969482422 +207.63429260253906 +203.9091033935547 +133.77499389648438 +207.80999755859375 +203.87750244140625 +134.0845947265625 +207.3800048828125 +203.97000122070312 +134.10499572753906 +205.58999633789062 +203.30999755859375 +133.4499969482422 +206.27000427246094 +203.52000427246094 +133.81500244140625 +206.8699951171875 +204.1300048828125 +134.3800048828125 +205.80999755859375 +201.67860412597656 +134.0850067138672 +206.5800018310547 +202.9250030517578 +135.87579345703125 +205.63999938964844 +203.07000732421875 +137.0850067138672 +202.10000610351562 +200.82989501953125 +133.21499633789062 +202.3415069580078 +201.52000427246094 +132.84500122070312 +201.0301055908203 +200.62460327148438 +131.07870483398438 +202.05999755859375 +201.11599731445312 +131.72999572753906 +200.36000061035156 +202.50999450683594 +133.0399932861328 +200.9499969482422 +202.5865020751953 +132.8800048828125 +201.9499969482422 +203.4149932861328 +133.39500427246094 +201.88999938964844 +203.11000061035156 +133.51100158691406 +201.97000122070312 +204.1862030029297 +133.3350067138672 +202.61000061035156 +204.42979431152344 +133.918701171875 +201.3699951171875 +203.0800018310547 +132.78990173339844 +197.1699981689453 +201.03500366210938 +130.52999877929688 +196.5850067138672 +200.9199981689453 +130.97999572753906 +196.05020141601562 +201.24000549316406 +131.00999450683594 +196.6199951171875 +202.00900268554688 +131.9499969482422 +195.75 +201.86000061035156 +132.13499450683594 +195.46240234375 +201.375 +131.6239013671875 +195.33999633789062 +200.99000549316406 +131.30999755859375 +198.35000610351562 +205.02000427246094 +135.2917938232422 +199.36500549316406 +205.26010131835938 +135.2100067138672 +199.9949951171875 +205.8300018310547 +135.26199340820312 +199.95989990234375 +206.0449981689453 +135.60000610351562 +200.3699951171875 +205.8000030517578 +135.25160217285156 +200.29440307617188 +205.3300018310547 +135.13999938964844 +200.1999969482422 +205.9949951171875 +135.49000549316406 +200.75 +205.61000061035156 +135.26499938964844 +201.0449981689453 +205.63999938964844 +135.59190368652344 +201.10000610351562 +205.7050018310547 +135.9403076171875 +201.11000061035156 +205.55999755859375 +136.4499969482422 +200.85000610351562 +205.88999938964844 +136.6699981689453 +201.12860107421875 +205.5399932861328 +136.8300018310547 +200.4199981689453 +204.7949981689453 +134.8115997314453 +201.13999938964844 +207.10000610351562 +140.61929321289062 +200.74000549316406 +206.94000244140625 +141.66000366210938 +199.4199981689453 +205.97999572753906 +140.57020568847656 +199.97500610351562 +206.41000366210938 +139.875 +199.0399932861328 +204.52000427246094 +138.44419860839844 +199.13929748535156 +205.2899932861328 +138.91000366210938 +199.9499969482422 +205.68499755859375 +139.17999267578125 +199.24000549316406 +205.07000732421875 +137.36000061035156 +199.30999755859375 +204.6829071044922 +136.10499572753906 +197.71499633789062 +202.80999755859375 +133.58999633789062 +198.0850067138672 +202.6750030517578 +134.46229553222656 +199.1199951171875 +203.875 +134.77999877929688 +200.05059814453125 +204.89349365234375 +135.26499938964844 +200.66000366210938 +204.66000366210938 +134.83999633789062 +200.52999877929688 +204.32530212402344 +136.66009521484375 +200.7100067138672 +205.0800018310547 +136.45989990234375 +201.02999877929688 +205.22999572753906 +137.4075927734375 +200.860107421875 +205.7100067138672 +137.57000732421875 +201.45399475097656 +206.18739318847656 +138.03140258789062 +201.66000366210938 +206.83999633789062 +137.625 +201.8000030517578 +206.7100067138672 +137.3699951171875 +201.74000549316406 +207.68299865722656 +141.3000030517578 +202.5 +207.00999450683594 +141.8199005126953 +203.05499267578125 +207.47999572753906 +141.56500244140625 +203.31460571289062 +207.67999267578125 +141.61500549316406 +203.09170532226562 +206.34249877929688 +141.15980529785156 +203.17999267578125 +205.65249633789062 +141.4499969482422 +203.33999633789062 +205.77999877929688 +141.27000427246094 +205.13999938964844 +206.19000244140625 +140.98500061035156 +204.08999633789062 +205.97999572753906 +141.3249969482422 +202.8300018310547 +206.47000122070312 +140.51010131835938 +203.4149932861328 +207.56539916992188 +140.7899932861328 +203.1199951171875 +207.843505859375 +141.61880493164062 +203.19000244140625 +207.7449951171875 +141.6699981689453 +202.88699340820312 +207.24000549316406 +141.83009338378906 +202.4499969482422 +209.80990600585938 +141.97830200195312 +204.54379272460938 +212.55499267578125 +143.0388946533203 +203.13999938964844 +210.9499969482422 +143.0050048828125 +202.60009765625 +210.8800048828125 +141.57870483398438 +202.2104034423828 +209.59649658203125 +140.71499633789062 +200.72999572753906 +208.4949951171875 +139.59010314941406 +200.5500030517578 +207.85000610351562 +139.9499969482422 +203.66000366210938 +211.0399932861328 +141.64500427246094 +203.17990112304688 +211.28860473632812 +141.69500732421875 +202.625 +211.98500061035156 +142.25999450683594 +203.58999633789062 +212.31759643554688 +142.11500549316406 +204.98500061035156 +212.9134979248047 +142.36500549316406 +204.6999969482422 +212.88999938964844 +142.07179260253906 +203.92999267578125 +213.52000427246094 +141.69000244140625 +205.32000732421875 +214.6699981689453 +144.375 +204.52999877929688 +214.8699951171875 +143.1800994873047 +203.92880249023438 +215.7899932861328 +142.22500610351562 +200.72000122070312 +216.97000122070312 +142.77000427246094 +201.4600067138672 +217.1199951171875 +142.83990478515625 +201.25 +217.22000122070312 +142.77499389648438 +201.44000244140625 +216.9199981689453 +142.5500030517578 +202.8699951171875 +216.30999755859375 +142.8000030517578 +203.31500244140625 +215.6226043701172 +142.68699645996094 +202.53880310058594 +216.12879943847656 +143.11500549316406 +201.75999450683594 +216.2100067138672 +142.65499877929688 +201.6999969482422 +215.77999877929688 +143.11990356445312 +202.82000732421875 +216.94000244140625 +144.0 +202.75 +217.56900024414062 +143.9499969482422 +202.76010131835938 +217.59249877929688 +144.477294921875 +200.94000244140625 +216.7550048828125 +144.1501007080078 +200.2071075439453 +215.61000061035156 +143.37989807128906 +200.91000366210938 +215.80999755859375 +143.7100067138672 +199.23919677734375 +213.42999267578125 +142.4716033935547 +198.97999572753906 +213.2100067138672 +142.39999389648438 +198.85000610351562 +213.17100524902344 +142.83999633789062 +198.0666961669922 +212.8300018310547 +144.06500244140625 +198.14999389648438 +212.53030395507812 +144.45120239257812 +198.58999633789062 +213.37989807128906 +144.4499969482422 +199.25999450683594 +212.7050018310547 +144.3300018310547 +198.75 +213.02000427246094 +144.47500610351562 +198.88499450683594 +212.97000122070312 +144.7550048828125 +199.1999969482422 +213.24000549316406 +145.0 +196.15499877929688 +209.9149932861328 +141.1999969482422 +197.50999450683594 +212.7899932861328 +142.91650390625 +197.27000427246094 +213.72999572753906 +143.0749969482422 +197.27000427246094 +213.2458953857422 +142.65499877929688 +196.2779998779297 +212.4149932861328 +141.60000610351562 +196.22000122070312 +211.55999755859375 +141.5050048828125 +196.4499969482422 +212.10000610351562 +141.9600067138672 +198.42999267578125 +214.66000366210938 +144.47999572753906 +197.31500244140625 +216.02999877929688 +145.4698028564453 +197.0800018310547 +215.27999877929688 +145.9550018310547 +197.875 +215.8350067138672 +145.625 +197.9886932373047 +215.7550048828125 +145.22999572753906 +198.2449951171875 +216.3000030517578 +144.97000122070312 +198.3699951171875 +216.16000366210938 +144.6699981689453 +197.5800018310547 +215.97999572753906 +144.3986053466797 +197.5800018310547 +216.22999572753906 +144.50999450683594 +197.61500549316406 +216.80999755859375 +145.02000427246094 +196.52000427246094 +216.01010131835938 +144.8300018310547 +195.4600067138672 +214.9499969482422 +144.17999267578125 +195.83999633789062 +215.0800018310547 +144.27609252929688 +195.63999938964844 +214.80999755859375 +144.0399932861328 +197.06019592285156 +217.75840759277344 +145.22000122070312 +196.94000244140625 +216.6199951171875 +144.99000549316406 +196.9508056640625 +215.39990234375 +145.27999877929688 +196.05999755859375 +214.8350067138672 +145.13499450683594 +195.91000366210938 +215.1999969482422 +145.0500030517578 +195.63999938964844 +214.54010009765625 +144.17990112304688 +196.25 +212.55499267578125 +145.47000122070312 +198.67999267578125 +210.69000244140625 +144.625 +197.6699981689453 +210.08999633789062 +143.89990234375 +198.49000549316406 +209.91000366210938 +143.9550018310547 +198.32000732421875 +209.30999755859375 +143.48500061035156 +199.80999755859375 +209.98500061035156 +144.15499877929688 +199.92999267578125 +208.66000366210938 +143.78990173339844 +200.94000244140625 +209.60459899902344 +143.77999877929688 +201.37179565429688 +209.85000610351562 +143.6300048828125 +200.52999877929688 +208.87210083007812 +143.80999755859375 +200.1396026611328 +208.63999938964844 +142.92999267578125 +201.43899536132812 +209.5 +144.4058074951172 +201.69000244140625 +209.27499389648438 +143.90989685058594 +201.36019897460938 +209.0850067138672 +143.84500122070312 +201.5500030517578 +208.47999572753906 +144.1750030517578 +200.9822998046875 +212.67999267578125 +147.02000427246094 +201.3800048828125 +213.4199981689453 +146.90499877929688 +202.4499969482422 +213.40499877929688 +147.1649932861328 +201.9600067138672 +213.74319458007812 +147.19500732421875 +201.57000732421875 +213.5699005126953 +147.35009765625 +201.52999877929688 +213.55999755859375 +147.22850036621094 +200.2899932861328 +212.77000427246094 +147.8300018310547 +202.44000244140625 +213.8699951171875 +152.2050018310547 +202.10000610351562 +213.76980590820312 +152.0500030517578 +201.8699951171875 +212.88499450683594 +152.14129638671875 +201.13999938964844 +212.2100067138672 +153.89999389648438 +201.01539611816406 +211.60000610351562 +153.9322967529297 +201.15980529785156 +211.7667999267578 +153.75439453125 +201.60000610351562 +212.05999755859375 +154.30999755859375 +199.75 +213.32000732421875 +156.44859313964844 +199.69000244140625 +216.06500244140625 +154.95989990234375 +200.122802734375 +215.8699951171875 +155.625 +200.24000549316406 +216.1750030517578 +156.02999877929688 +200.97999572753906 +217.72999572753906 +156.0850067138672 +201.1750030517578 +216.95399475097656 +155.46429443359375 +200.94000244140625 +217.1300048828125 +155.0800018310547 +201.58009338378906 +220.00999450683594 +157.42010498046875 +201.38180541992188 +219.63499450683594 +157.91009521484375 +201.99000549316406 +219.6750030517578 +157.69000244140625 +202.0800018310547 +219.16000366210938 +157.48500061035156 +201.44000244140625 +217.4600067138672 +156.30499267578125 +201.125 +219.7050018310547 +156.47000122070312 +201.10000610351562 +223.2100067138672 +157.75 +201.00990295410156 +221.7899932861328 +157.10000610351562 +199.97000122070312 +221.40330505371094 +157.04989624023438 +200.3249969482422 +219.6649932861328 +157.7100067138672 +200.15499877929688 +219.86500549316406 +157.82550048828125 +200.69500732421875 +219.5800018310547 +157.57989501953125 +206.58560180664062 +219.80999755859375 +157.94500732421875 +205.1199951171875 +219.39999389648438 +157.8699951171875 +209.54010009765625 +219.5 +154.6300048828125 +207.9499969482422 +219.7270050048828 +152.88499450683594 +207.875 +219.2100067138672 +153.39500427246094 +208.08999633789062 +220.67739868164062 +154.27499389648438 +208.2100067138672 +220.8502960205078 +154.35169982910156 +208.19000244140625 +221.6999969482422 +153.72999572753906 +207.86000061035156 +220.4499969482422 +153.27999877929688 +212.3000030517578 +220.3000030517578 +156.08140563964844 +211.47500610351562 +220.6199951171875 +156.36500549316406 +210.92030334472656 +220.9300994873047 +157.093505859375 +210.81809997558594 +220.30499267578125 +157.2053985595703 +211.58999633789062 +220.2501983642578 +156.9550018310547 +211.94500732421875 +219.88999938964844 +156.8874969482422 +212.41000366210938 +219.8800048828125 +157.24000549316406 +213.73500061035156 +221.8300018310547 +160.6300048828125 +213.8800048828125 +222.7093048095703 +159.80499267578125 +214.10000610351562 +222.99960327148438 +159.37969970703125 +212.36000061035156 +223.89999389648438 +158.30999755859375 +212.0399932861328 +223.8699951171875 +158.27999877929688 +210.8365020751953 +223.05499267578125 +158.22000122070312 +209.67039489746094 +222.9499969482422 +158.3188018798828 +208.94039916992188 +222.50999450683594 +157.8249969482422 +209.4499969482422 +223.2100067138672 +158.3000946044922 +209.94000244140625 +223.47999572753906 +158.24000549316406 +209.27999877929688 +221.1300048828125 +159.07000732421875 +209.87069702148438 +219.77999877929688 +159.0800018310547 +210.8300018310547 +220.94000244140625 +159.72999572753906 +209.8350067138672 +220.55999755859375 +159.5850067138672 +209.94500732421875 +220.47000122070312 +159.5399932861328 +209.60499572753906 +219.69500732421875 +159.89500427246094 +210.03500366210938 +219.33999633789062 +160.00010681152344 +209.91000366210938 +222.88999938964844 +163.06869506835938 +207.80499267578125 +222.3699951171875 +163.35000610351562 +207.8000030517578 +222.39999389648438 +163.27000427246094 +208.9156036376953 +222.61329650878906 +162.56500244140625 +209.7324981689453 +222.41000366210938 +162.81500244140625 +209.88999938964844 +222.58070373535156 +162.85000610351562 +211.11000061035156 +222.47000122070312 +162.8300018310547 +212.00999450683594 +220.25999450683594 +162.41000366210938 +212.97999572753906 +221.63470458984375 +162.59669494628906 +212.0800018310547 +222.0850067138672 +163.2747039794922 +212.6199951171875 +222.2899932861328 +163.44769287109375 +212.60000610351562 +222.60000610351562 +163.72999572753906 +212.5749969482422 +222.05999755859375 +164.05999755859375 +212.4199981689453 +222.27999877929688 +164.10499572753906 +211.7899932861328 +224.37559509277344 +167.35989379882812 +210.8249969482422 +224.52999877929688 +166.4949951171875 +210.63499450683594 +225.26010131835938 +166.47869873046875 +211.1649932861328 +225.5800018310547 +166.1822967529297 +211.40499877929688 +226.10000610351562 +165.68150329589844 +211.16000366210938 +225.7899932861328 +165.09500122070312 +211.0749969482422 +224.99000549316406 +164.8800048828125 +208.02999877929688 +225.30560302734375 +163.72000122070312 +208.76499938964844 +225.8800048828125 +164.75469970703125 +208.8406982421875 +225.9949951171875 +164.97000122070312 +209.0 +225.7550048828125 +165.08009338378906 +209.0 +225.4499969482422 +164.82000732421875 +209.1999053955078 +225.33349609375 +164.40330505371094 +208.5399932861328 +225.6300048828125 +164.07000732421875 +210.1699981689453 +226.86000061035156 +171.57839965820312 +211.42999267578125 +226.67999267578125 +171.38499450683594 +210.67999267578125 +226.60000610351562 +171.38499450683594 +210.67269897460938 +225.9600067138672 +170.52499389648438 +211.375 +226.8350067138672 +170.91180419921875 +210.17999267578125 +226.2969970703125 +170.1999053955078 +209.00999450683594 +226.3000030517578 +170.5500030517578 +212.0850067138672 +225.27999877929688 +169.96490478515625 +210.1199951171875 +224.2050018310547 +170.37860107421875 +209.58999633789062 +223.36000061035156 +170.39500427246094 +210.35000610351562 +223.02999877929688 +170.9022979736328 +210.0384979248047 +223.1999969482422 +171.0050048828125 +210.3249969482422 +223.19000244140625 +170.77999877929688 +210.22000122070312 +223.1699981689453 +171.33999633789062 +209.9499969482422 +222.6204071044922 +172.92999267578125 +210.44000244140625 +223.75999450683594 +173.11500549316406 +211.38999938964844 +223.67999267578125 +173.860107421875 +210.9550018310547 +223.72000122070312 +173.72000122070312 +211.27999877929688 +223.94000244140625 +173.2989959716797 +210.9949951171875 +223.98500061035156 +173.28500366210938 +210.06100463867188 +223.99000549316406 +173.1114044189453 +209.9542999267578 +223.3699951171875 +172.08999633789062 +210.85000610351562 +224.52000427246094 +172.16009521484375 +211.00999450683594 +224.8699951171875 +172.15469360351562 +211.19000244140625 +225.9250030517578 +172.64999389648438 +210.93499755859375 +225.96499633789062 +172.4149932861328 +210.9499969482422 +225.9149932861328 +172.07000732421875 +211.22000122070312 +226.1199951171875 +172.38999938964844 +214.64500427246094 +227.94000244140625 +173.08009338378906 +213.47000122070312 +227.75 +172.6981964111328 +213.31959533691406 +228.4600067138672 +172.02940368652344 +213.67999267578125 +228.93089294433594 +172.55479431152344 +213.25999450683594 +229.35000610351562 +172.70480346679688 +212.5800018310547 +229.25990295410156 +171.9600067138672 +212.5399932861328 +229.30999755859375 +171.4600067138672 +213.2655029296875 +227.25 +166.0847930908203 +213.477294921875 +226.9600067138672 +167.86000061035156 +213.27999877929688 +226.44540405273438 +167.5509033203125 +214.41119384765625 +227.50999450683594 +168.26499938964844 +213.7100067138672 +227.22000122070312 +167.90029907226562 +214.18499755859375 +227.82000732421875 +167.88499450683594 +214.38999938964844 +227.52000427246094 +167.00999450683594 +212.9351043701172 +227.96499633789062 +169.1300048828125 +213.14999389648438 +227.38999938964844 +169.52330017089844 +213.5 +227.69000244140625 +168.6199951171875 +214.125 +228.2906951904297 +169.03500366210938 +214.40499877929688 +228.37899780273438 +170.65750122070312 +214.13999938964844 +228.10000610351562 +170.7100067138672 +214.30999755859375 +228.27000427246094 +170.8300018310547 +214.4600067138672 +230.85000610351562 +172.08999633789062 +215.25999450683594 +232.03500366210938 +172.67849731445312 +214.33999633789062 +232.00999450683594 +172.94500732421875 +214.7899932861328 +232.0050048828125 +173.43240356445312 +214.73500061035156 +232.24000549316406 +173.4550018310547 +214.80999755859375 +231.97999572753906 +173.6501007080078 +213.75999450683594 +232.24899291992188 +173.77999877929688 +214.58529663085938 +231.42140197753906 +174.46189880371094 +214.50999450683594 +232.125 +174.06809997558594 +214.3896026611328 +232.25 +174.3800048828125 +214.1699981689453 +231.7550048828125 +173.8843994140625 +213.88999938964844 +231.7899932861328 +173.64999389648438 +213.5 +231.74249267578125 +173.7949981689453 +213.9600067138672 +231.4499969482422 +173.49000549316406 +214.52000427246094 +233.47000122070312 +174.9250030517578 +214.43499755859375 +233.22000122070312 +174.92999267578125 +214.5399932861328 +232.75999450683594 +175.0299072265625 +213.64500427246094 +232.82000732421875 +175.2100067138672 +213.8000030517578 +232.9199981689453 +175.47500610351562 +213.42999267578125 +232.5854949951172 +176.15499877929688 +214.0399932861328 +232.80999755859375 +176.75 +213.0500030517578 +231.51499938964844 +178.13999938964844 +211.89999389648438 +230.69970703125 +175.85989379882812 +212.0 +231.1750030517578 +176.33999633789062 +212.1999969482422 +231.6999969482422 +176.19529724121094 +211.9600067138672 +231.28500366210938 +176.2050018310547 +211.88999938964844 +231.31149291992188 +175.8249969482422 +211.35000610351562 +231.0 +175.50999450683594 +210.61000061035156 +230.32000732421875 +178.4600067138672 +209.71499633789062 +230.13999938964844 +178.26519775390625 +210.1199951171875 +230.47999572753906 +178.80499267578125 +209.75650024414062 +230.35499572753906 +179.00669860839844 +209.85499572753906 +230.66000366210938 +179.55499267578125 +208.52000427246094 +229.49000549316406 +178.58999633789062 +209.02000427246094 +230.25999450683594 +179.2899932861328 +208.8424072265625 +232.5399932861328 +181.57000732421875 +208.28280639648438 +233.1699981689453 +179.889892578125 +208.95449829101562 +236.30999755859375 +181.3780059814453 +208.6649932861328 +234.4550018310547 +179.02000427246094 +208.61000061035156 +234.3699951171875 +177.36500549316406 +208.5699005126953 +233.4499969482422 +177.41969299316406 +207.61000061035156 +234.11000061035156 +177.85000610351562 +205.36000061035156 +219.09500122070312 +174.97500610351562 +203.44000244140625 +215.27499389648438 +174.77999877929688 +202.75 +216.05999755859375 +175.82000732421875 +201.9824981689453 +214.33999633789062 +173.10989379882812 +203.5500030517578 +214.24920654296875 +173.2799072265625 +203.19000244140625 +214.8800048828125 +173.75 +202.27000427246094 +214.80999755859375 +173.58999633789062 +206.75999450683594 +213.38999938964844 +177.9499969482422 +205.77000427246094 +211.75100708007812 +177.8498992919922 +203.93499755859375 +213.3509979248047 +178.9250030517578 +204.14999389648438 +212.7899932861328 +179.02999877929688 +203.42999267578125 +212.42739868164062 +179.27000427246094 +202.3249969482422 +212.44000244140625 +179.31390380859375 +203.33999633789062 +211.72000122070312 +179.97000122070312 +204.52999877929688 +214.69000244140625 +178.24000549316406 +204.6300048828125 +214.97999572753906 +176.88499450683594 +203.7100067138672 +215.3800048828125 +177.92999267578125 +204.03500366210938 +215.07000732421875 +178.02999877929688 +203.8699951171875 +214.14999389648438 +178.50999450683594 +203.3350067138672 +213.86000061035156 +178.77520751953125 +202.92999267578125 +213.80999755859375 +178.25999450683594 +210.75999450683594 +215.47000122070312 +178.0399932861328 +214.22500610351562 +217.50999450683594 +178.14999389648438 +214.49989318847656 +218.6750030517578 +178.23500061035156 +214.5399932861328 +220.80999755859375 +178.42999267578125 +214.6024932861328 +221.44500732421875 +179.22999572753906 +213.875 +221.1999969482422 +179.6649932861328 +213.25 +222.3300018310547 +179.41000366210938 +218.27000427246094 +224.6300048828125 +182.47999572753906 +219.62899780273438 +223.1903076171875 +181.52999877929688 +219.9149932861328 +222.78970336914062 +181.14999389648438 +218.7100067138672 +221.66990661621094 +179.97000122070312 +219.5 +221.39999389648438 +179.42010498046875 +219.3000946044922 +221.47999572753906 +179.47000122070312 +220.1300048828125 +223.1750030517578 +180.8699951171875 +222.7816925048828 +222.6197052001953 +182.19500732421875 +224.36000061035156 +222.8863067626953 +183.01499938964844 +228.1999969482422 +222.52999877929688 +182.90809631347656 +228.6750030517578 +222.4499969482422 +181.88499450683594 +229.2899932861328 +222.0850067138672 +182.61500549316406 +228.8300018310547 +222.44000244140625 +182.69500732421875 +229.3699951171875 +222.69000244140625 +182.75 +226.77499389648438 +221.52000427246094 +183.3455047607422 +227.47000122070312 +221.72000122070312 +183.1800994873047 +228.72999572753906 +222.11500549316406 +183.73500061035156 +228.10000610351562 +221.67999267578125 +183.23550415039062 +227.73500061035156 +220.72999572753906 +182.89999389648438 +227.64999389648438 +221.23500061035156 +182.16000366210938 +227.2050018310547 +221.3699951171875 +182.0850067138672 +228.57000732421875 +220.82000732421875 +180.92999267578125 +229.72999572753906 +221.08999633789062 +182.0146942138672 +229.77999877929688 +221.67999267578125 +182.27499389648438 +229.77499389648438 +222.1199951171875 +182.24000549316406 +229.57000732421875 +221.9698944091797 +183.06500244140625 +229.18299865722656 +221.86500549316406 +182.7845001220703 +229.64999389648438 +221.44000244140625 +183.10000610351562 +231.80999755859375 +222.60000610351562 +181.41099548339844 +232.2899932861328 +224.2010040283203 +180.13180541992188 +233.09500122070312 +224.32000732421875 +180.0500030517578 +232.4550018310547 +224.64999389648438 +180.99000549316406 +232.9250030517578 +224.08999633789062 +181.32989501953125 +233.5850067138672 +224.38499450683594 +181.26499938964844 +233.3300018310547 +224.55499267578125 +181.57000732421875 +232.2100067138672 +229.3350067138672 +182.5800018310547 +231.74020385742188 +228.6009979248047 +181.3800048828125 +232.00999450683594 +230.4550018310547 +181.14349365234375 +232.92730712890625 +232.14999389648438 +182.1649932861328 +232.72999572753906 +232.47000122070312 +181.52499389648438 +232.94500732421875 +231.3699951171875 +181.9600067138672 +232.8300018310547 +230.88999938964844 +182.0 +232.1699981689453 +232.2301025390625 +179.92010498046875 +231.07000732421875 +231.39999389648438 +179.5050048828125 +230.74000549316406 +230.00999450683594 +178.92999267578125 +230.57000732421875 +230.19000244140625 +179.70010375976562 +230.85000610351562 +230.41000366210938 +180.17999267578125 +231.36000061035156 +230.76499938964844 +179.97000122070312 +231.64999389648438 +231.05999755859375 +180.44000244140625 +230.66000366210938 +230.2899932861328 +182.67999267578125 +230.86000061035156 +230.16009521484375 +181.1519012451172 +230.67999267578125 +230.3000030517578 +181.7657928466797 +231.07000732421875 +230.8197021484375 +181.49920654296875 +231.14500427246094 +230.60000610351562 +181.76210021972656 +231.22500610351562 +231.3249969482422 +182.19500732421875 +230.8800048828125 +231.4199981689453 +181.97999572753906 +231.8300018310547 +228.76010131835938 +178.66490173339844 +231.32260131835938 +228.72000122070312 +178.27749633789062 +231.30990600585938 +228.55999755859375 +177.53990173339844 +230.625 +228.07000732421875 +176.69509887695312 +230.0500030517578 +227.99000549316406 +176.5749053955078 +230.18499755859375 +227.50999450683594 +176.33250427246094 +230.5399932861328 +228.02000427246094 +175.64999389648438 +226.7200927734375 +222.47500610351562 +170.30999755859375 +227.3350067138672 +223.3699951171875 +172.4250030517578 +227.1345977783203 +224.14999389648438 +174.0500030517578 +226.2949981689453 +224.2100067138672 +173.47500610351562 +225.99009704589844 +223.32000732421875 +172.8249969482422 +226.44500732421875 +223.97500610351562 +174.5800018310547 +225.9600067138672 +223.80999755859375 +175.38999938964844 +225.57989501953125 +222.3074951171875 +176.47500610351562 +225.1300048828125 +221.58999633789062 +174.96499633789062 +224.8300018310547 +221.25999450683594 +174.22569274902344 +224.1750030517578 +220.9499969482422 +174.26499938964844 +224.22999572753906 +221.6750030517578 +174.7449951171875 +224.8800048828125 +222.02000427246094 +174.80189514160156 +224.91000366210938 +221.9499969482422 +174.9709930419922 +227.9499969482422 +225.3625030517578 +176.32000732421875 +228.05999755859375 +227.7008056640625 +178.1300048828125 +227.16929626464844 +226.87139892578125 +177.00579833984375 +228.61000061035156 +227.55999755859375 +178.2949981689453 +227.8699951171875 +228.1300048828125 +178.11500549316406 +227.85000610351562 +228.8300018310547 +178.0601043701172 +227.75 +228.83999633789062 +178.02000427246094 +228.80999755859375 +228.52000427246094 +178.99000549316406 +228.56500244140625 +229.42010498046875 +181.22140502929688 +228.5399932861328 +228.26300048828125 +181.5240936279297 +228.43499755859375 +228.3350067138672 +181.0 +227.88499450683594 +228.50990295410156 +181.33990478515625 +227.59840393066406 +228.77000427246094 +181.03500366210938 +227.14999389648438 +227.89500427246094 +179.83999633789062 +226.5 +227.94500732421875 +180.97999572753906 +226.9615936279297 +228.03500366210938 +180.8800048828125 +227.57049560546875 +228.1804962158203 +181.68499755859375 +228.11160278320312 +227.85000610351562 +181.6199951171875 +228.3592071533203 +227.7989044189453 +181.81500244140625 +228.56820678710938 +228.2949981689453 +182.02549743652344 +229.3000030517578 +228.72000122070312 +181.6999969482422 +230.01499938964844 +229.15989685058594 +181.05999755859375 +229.5740966796875 +228.8249969482422 +181.58999633789062 +229.8699951171875 +228.69000244140625 +181.40420532226562 +229.83999633789062 +228.7050018310547 +181.93499755859375 +230.625 +229.10000610351562 +182.22259521484375 +230.13250732421875 +228.64999389648438 +181.6645965576172 +230.44000244140625 +229.0500030517578 +181.60000610351562 +230.41580200195312 +229.9969940185547 +177.69500732421875 +230.9499969482422 +231.7050018310547 +179.156494140625 +232.2899932861328 +232.42999267578125 +179.69000244140625 +233.0 +231.6790008544922 +179.91419982910156 +232.91920471191406 +232.02499389648438 +180.82969665527344 +232.97500610351562 +231.61000061035156 +180.0800018310547 +232.49000549316406 +231.55999755859375 +180.1999969482422 +232.80960083007812 +229.6649932861328 +175.06500244140625 +232.9600067138672 +228.92999267578125 +174.77499389648438 +232.5 +228.50999450683594 +174.14999389648438 +232.02999877929688 +228.4499969482422 +173.52000427246094 +232.17999267578125 +228.66000366210938 +173.55670166015625 +232.3542938232422 +228.93499755859375 +174.0399932861328 +232.27000427246094 +229.0500030517578 +174.27999877929688 +230.60000610351562 +224.9600067138672 +170.63360595703125 +227.82899475097656 +223.25 +169.05999755859375 +227.85000610351562 +223.74859619140625 +167.93499755859375 +228.41000366210938 +225.02999877929688 +169.23500061035156 +228.39999389648438 +225.16000366210938 +169.1981964111328 +228.94000244140625 +225.52000427246094 +170.2949981689453 +229.7100067138672 +225.3300018310547 +170.75 +236.8300018310547 +226.42999267578125 +171.35000610351562 +236.01100158691406 +225.61000061035156 +170.70590209960938 +236.49000549316406 +225.6407928466797 +171.52499389648438 +237.4272003173828 +225.625 +170.7834930419922 +236.91000366210938 +224.7100067138672 +169.36000061035156 +237.15499877929688 +224.8800048828125 +169.36500549316406 +238.49000549316406 +226.0 +170.6300048828125 +237.69000244140625 +233.1999969482422 +170.8614959716797 +237.39999389648438 +233.41000366210938 +170.8000030517578 +237.16000366210938 +233.51499938964844 +170.46420288085938 +238.0399932861328 +234.4199981689453 +170.4499969482422 +238.05999755859375 +235.1699981689453 +170.41220092773438 +238.70449829101562 +234.95010375976562 +170.90499877929688 +239.7100067138672 +235.69000244140625 +171.64999389648438 +239.28500366210938 +234.0762939453125 +165.13729858398438 +239.80499267578125 +233.03500366210938 +166.08999633789062 +238.77000427246094 +233.72000122070312 +166.36549377441406 +239.625 +232.97999572753906 +166.5850067138672 +239.1199951171875 +232.9499969482422 +166.76010131835938 +239.9250030517578 +232.87669372558594 +167.09500122070312 +239.6699981689453 +232.32000732421875 +167.0399932861328 +239.22999572753906 +235.36000061035156 +170.25999450683594 +238.6999969482422 +237.33009338378906 +169.9698944091797 +237.72999572753906 +236.60000610351562 +170.1649932861328 +237.80580139160156 +236.1342010498047 +169.86500549316406 +237.1649932861328 +236.50010681152344 +169.71499633789062 +237.11000061035156 +236.1699981689453 +169.14500427246094 +237.9199981689453 +235.86000061035156 +168.3699951171875 +236.3101043701172 +235.8800048828125 +168.0800018310547 +236.22500610351562 +236.17999267578125 +167.7550048828125 +236.0 +237.19000244140625 +168.7050018310547 +237.75 +237.76499938964844 +168.0850067138672 +234.52859497070312 +237.8000030517578 +168.2449951171875 +234.30999755859375 +238.23500061035156 +170.23989868164062 +234.35000610351562 +238.22999572753906 +170.7584991455078 +228.10800170898438 +233.86000061035156 +177.64999389648438 +227.0399932861328 +232.5850067138672 +178.61419677734375 +227.7386016845703 +231.7100067138672 +177.99000549316406 +226.80499267578125 +231.56460571289062 +178.00509643554688 +227.05999755859375 +231.1699981689453 +176.27499389648438 +226.18499755859375 +229.64199829101562 +176.72500610351562 +226.77999877929688 +230.36000061035156 +177.3300018310547 +228.94000244140625 +229.61000061035156 +177.2550048828125 +228.74000549316406 +230.94000244140625 +178.09500122070312 +228.61000061035156 +230.8498992919922 +177.55810546875 +229.47250366210938 +231.27000427246094 +177.0941925048828 +229.4600067138672 +231.22999572753906 +177.5749969482422 +229.85000610351562 +230.08270263671875 +177.1199951171875 +230.02000427246094 +229.9550018310547 +177.08999633789062 +234.07000732421875 +229.0500030517578 +177.77499389648438 +234.09500122070312 +229.0500030517578 +177.6750030517578 +233.9694061279297 +228.6750030517578 +178.11000061035156 +233.23500061035156 +228.52999877929688 +177.52499389648438 +233.5399932861328 +227.6300048828125 +177.4700927734375 +233.77549743652344 +227.7635955810547 +177.68499755859375 +234.05999755859375 +228.11000061035156 +177.7899932861328 +236.21499633789062 +231.06500244140625 +175.48899841308594 +236.82000732421875 +232.84970092773438 +177.02169799804688 +236.57000732421875 +231.95030212402344 +177.5850067138672 +235.75999450683594 +231.3350067138672 +177.27000427246094 +235.63999938964844 +231.5399932861328 +177.52499389648438 +235.97000122070312 +231.2624053955078 +177.19500732421875 +236.75999450683594 +231.44000244140625 +177.77999877929688 +239.52999877929688 +235.1898956298828 +176.31500244140625 +239.5928955078125 +235.64500427246094 +176.13999938964844 +239.19500732421875 +235.4149932861328 +175.26499938964844 +239.08560180664062 +234.8300018310547 +175.14999389648438 +238.92999267578125 +234.91000366210938 +174.77499389648438 +238.93829345703125 +234.41000366210938 +174.75 +238.13999938964844 +234.02000427246094 +174.8300018310547 +239.6300048828125 +230.41000366210938 +170.1199951171875 +239.47999572753906 +230.25999450683594 +170.40499877929688 +239.67430114746094 +230.96429443359375 +169.87840270996094 +239.52000427246094 +231.08999633789062 +170.23500061035156 +239.55999755859375 +231.37989807128906 +170.19580078125 +239.2628936767578 +231.41000366210938 +171.18850708007812 +238.97000122070312 +231.63999938964844 +170.2100067138672 +237.55999755859375 +231.85499572753906 +175.77490234375 +238.19000244140625 +232.8000030517578 +176.2550048828125 +237.94000244140625 +232.8800048828125 +176.25999450683594 +237.8800048828125 +232.63999938964844 +176.6199951171875 +237.8018035888672 +231.92999267578125 +176.55499267578125 +237.4499969482422 +231.68499755859375 +176.34500122070312 +237.85000610351562 +231.2100067138672 +176.27999877929688 +241.14999389648438 +233.39999389648438 +177.7050018310547 +242.27999877929688 +233.23019409179688 +176.3000030517578 +244.52000427246094 +233.61000061035156 +176.0677032470703 +245.24380493164062 +232.72000122070312 +175.88499450683594 +245.48849487304688 +232.44000244140625 +175.59500122070312 +245.61000061035156 +231.83999633789062 +176.31500244140625 +245.2899932861328 +231.60000610351562 +176.5019073486328 +252.67160034179688 +230.27999877929688 +175.4199981689453 +255.789794921875 +229.22500610351562 +175.46009826660156 +253.72000122070312 +228.52999877929688 +182.1999969482422 +254.5928955078125 +228.60499572753906 +182.9949951171875 +255.24000549316406 +228.1300048828125 +182.68499755859375 +255.7899932861328 +227.93499755859375 +183.26010131835938 +256.0899963378906 +227.6199951171875 +183.61000061035156 +256.6173095703125 +222.35000610351562 +180.6522979736328 +256.1000061035156 +223.2899932861328 +180.21499633789062 +255.72689819335938 +222.64999389648438 +179.485595703125 +254.6699981689453 +221.85000610351562 +178.69000244140625 +254.63999938964844 +221.02000427246094 +177.89500427246094 +254.16990661621094 +220.17649841308594 +178.10000610351562 +254.52999877929688 +220.74000549316406 +178.4499969482422 +252.6219940185547 +221.13999938964844 +178.4949951171875 +252.1199951171875 +221.139892578125 +178.3542022705078 +252.1649932861328 +220.88999938964844 +176.2449951171875 +251.49000549316406 +220.9199981689453 +177.12010192871094 +251.76499938964844 +220.0850067138672 +176.72000122070312 +251.38999938964844 +219.77999877929688 +177.05999755859375 +252.24000549316406 +220.2100067138672 +176.8800048828125 +254.0 +219.75990295410156 +177.14500427246094 +253.50010681152344 +219.8300018310547 +178.0301055908203 +252.53030395507812 +219.80999755859375 +179.26510620117188 +253.5 +218.8699951171875 +177.9799041748047 +254.55999755859375 +217.02999877929688 +177.20989990234375 +256.9599914550781 +217.47000122070312 +177.0749969482422 +256.94000244140625 +218.1300048828125 +177.67999267578125 +255.02000427246094 +218.9149932861328 +175.58999633789062 +255.9700927734375 +219.44000244140625 +176.7449951171875 +255.6649932861328 +219.97500610351562 +176.52999877929688 +256.5199890136719 +220.39999389648438 +177.15499877929688 +256.55499267578125 +220.19000244140625 +177.7342987060547 +255.64500427246094 +220.27000427246094 +177.68499755859375 +255.4600067138672 +219.8000030517578 +178.19000244140625 +254.2198944091797 +221.4300994873047 +183.375 +253.47000122070312 +220.67630004882812 +182.3249969482422 +253.66000366210938 +221.36129760742188 +182.02999877929688 +253.39999389648438 +221.77000427246094 +181.9031982421875 +254.57000732421875 +221.51499938964844 +181.7100067138672 +253.99000549316406 +221.74000549316406 +180.89500427246094 +254.35000610351562 +222.1699981689453 +181.82000732421875 +254.88619995117188 +218.91000366210938 +184.73989868164062 +254.22000122070312 +218.7449951171875 +186.30990600585938 +254.53509521484375 +219.3300018310547 +186.73500061035156 +253.73500061035156 +219.25999450683594 +185.625 +253.33999633789062 +219.24949645996094 +186.2725067138672 +253.9499969482422 +219.5968017578125 +185.88999938964844 +254.55999755859375 +219.55999755859375 +186.55999755859375 +256.1614074707031 +219.42999267578125 +186.65499877929688 +255.52450561523438 +219.2386932373047 +186.55999755859375 +256.1600036621094 +221.14999389648438 +186.60499572753906 +256.1404113769531 +221.5399932861328 +187.57000732421875 +256.4849853515625 +221.9600067138672 +187.48440551757812 +255.94000244140625 +220.875 +187.18350219726562 +255.41000366210938 +220.60000610351562 +187.1699981689453 +256.2200927734375 +220.69009399414062 +190.1049041748047 +257.1650085449219 +220.52999877929688 +189.85499572753906 +257.3450012207031 +222.2899932861328 +189.2100067138672 +257.4100036621094 +222.47000122070312 +189.11929321289062 +257.8800048828125 +221.97000122070312 +188.87510681152344 +257.510009765625 +221.9149932861328 +189.18499755859375 +257.1400146484375 +222.41000366210938 +188.9199981689453 +257.8500061035156 +223.49000549316406 +188.94369506835938 +258.510009765625 +222.5863037109375 +189.47390747070312 +258.5487060546875 +222.1800994873047 +188.7001953125 +258.30999755859375 +220.38999938964844 +187.17750549316406 +258.3699951171875 +220.21310424804688 +187.47500610351562 +257.9200134277344 +219.64999389648438 +187.3249969482422 +258.0150146484375 +219.49000549316406 +187.62100219726562 +257.7799987792969 +218.3300018310547 +185.5 +257.5513000488281 +219.10879516601562 +185.9698944091797 +257.1300048828125 +219.60499572753906 +186.92999267578125 +256.55999755859375 +220.24000549316406 +186.14990234375 +256.18499755859375 +221.1699981689453 +185.58999633789062 +256.510009765625 +220.67999267578125 +185.80999755859375 +256.6499938964844 +220.8800048828125 +185.52999877929688 +256.67999267578125 +221.4669952392578 +188.01510620117188 +256.3789978027344 +221.25 +185.24000549316406 +256.3384094238281 +221.07000732421875 +185.47000122070312 +255.88999938964844 +221.17999267578125 +185.90980529785156 +256.06988525390625 +221.13499450683594 +185.89500427246094 +256.0199890136719 +221.1999969482422 +185.5863037109375 +256.489990234375 +221.8000030517578 +184.9600067138672 +257.8399963378906 +223.18499755859375 +189.0449981689453 +258.0400085449219 +223.97999572753906 +188.27000427246094 +258.20001220703125 +225.02999877929688 +188.18499755859375 +257.92498779296875 +225.87669372558594 +188.14999389648438 +257.9150085449219 +226.61000061035156 +188.42239379882812 +258.25 +225.39999389648438 +188.58999633789062 +258.0299987792969 +225.1999969482422 +189.07000732421875 +254.97999572753906 +222.6999969482422 +194.05499267578125 +254.89500427246094 +223.10000610351562 +193.73500061035156 +253.84500122070312 +224.16299438476562 +193.85000610351562 +253.4575958251953 +223.86000061035156 +192.61000061035156 +253.55999755859375 +226.27000427246094 +192.875 +253.89999389648438 +227.0449981689453 +193.1199951171875 +253.97999572753906 +227.6199951171875 +192.2949981689453 +255.17999267578125 +226.54879760742188 +195.2550048828125 +249.41000366210938 +220.52000427246094 +188.5998992919922 +248.61000061035156 +220.16000366210938 +189.14999389648438 +247.80999755859375 +219.02000427246094 +188.16000366210938 +247.16000366210938 +218.61000061035156 +187.72000122070312 +246.1649932861328 +217.80299377441406 +186.39999389648438 +245.27999877929688 +216.17999267578125 +183.13999938964844 +246.37600708007812 +220.11000061035156 +188.49000549316406 +248.59030151367188 +220.16000366210938 +188.27499389648438 +249.17999267578125 +220.1699981689453 +188.43179321289062 +249.1042022705078 +220.0500030517578 +188.5500030517578 +249.1461944580078 +220.52499389648438 +187.9250030517578 +248.32000732421875 +220.1199951171875 +187.80259704589844 +247.58999633789062 +220.0 +188.32000732421875 +247.02000427246094 +216.4250030517578 +182.38499450683594 +246.21400451660156 +216.4949951171875 +181.5500030517578 +247.38999938964844 +218.3000030517578 +183.43629455566406 +247.79800415039062 +218.9199981689453 +183.22500610351562 +247.48500061035156 +217.55999755859375 +182.17999267578125 +248.4199981689453 +217.48500061035156 +181.89990234375 +247.85000610351562 +216.44000244140625 +180.07000732421875 +250.85000610351562 +216.1999969482422 +182.36990356445312 +249.85989379882812 +215.44000244140625 +181.71090698242188 +249.77499389648438 +215.42010498046875 +180.69020080566406 +248.0904998779297 +213.61500549316406 +178.17999267578125 +249.64700317382812 +214.8000030517578 +179.79490661621094 +249.9199981689453 +215.18099975585938 +180.16000366210938 +249.42999267578125 +215.6300048828125 +179.8699951171875 +247.50999450683594 +217.5749969482422 +182.41000366210938 +248.23500061035156 +216.75999450683594 +182.32139587402344 +247.72000122070312 +215.5 +180.96499633789062 +247.22000122070312 +215.52999877929688 +182.3300018310547 +245.66000366210938 +213.17999267578125 +180.33999633789062 +246.5500030517578 +214.07000732421875 +180.78500366210938 +247.42999267578125 +214.47000122070312 +181.81100463867188 +249.5601043701172 +213.9600067138672 +183.27999877929688 +248.47999572753906 +211.58999633789062 +180.8719940185547 +250.29649353027344 +213.05999755859375 +182.6300048828125 +250.81500244140625 +212.36639404296875 +182.36000061035156 +252.3000030517578 +213.68499755859375 +183.69000244140625 +252.75999450683594 +213.25999450683594 +183.7100067138672 +252.3000030517578 +213.0500030517578 +183.24000549316406 +259.5050048828125 +215.3300018310547 +184.94400024414062 +262.57000732421875 +214.64999389648438 +183.78500366210938 +263.489990234375 +214.8800048828125 +183.80999755859375 +263.1650085449219 +215.7100067138672 +183.8159942626953 +263.7300109863281 +215.72000122070312 +183.63409423828125 +263.4200134277344 +216.35499572753906 +182.95530700683594 +262.2300109863281 +216.47000122070312 +182.57000732421875 +263.4999084472656 +221.72000122070312 +180.18499755859375 +263.6619873046875 +221.97000122070312 +181.91000366210938 +263.1700134277344 +222.97500610351562 +182.49000549316406 +263.3265075683594 +221.5449981689453 +181.47999572753906 +263.44989013671875 +222.5843048095703 +181.22999572753906 +263.0849914550781 +222.4600067138672 +181.3350067138672 +262.8399963378906 +222.02999877929688 +181.13999938964844 +260.0498962402344 +217.4499969482422 +180.3968963623047 +258.4299011230469 +218.73989868164062 +178.87010192871094 +258.54998779296875 +218.97000122070312 +179.22000122070312 +256.69140625 +217.8000030517578 +177.69000244140625 +256.5509948730469 +217.30499267578125 +177.7050018310547 +257.510009765625 +218.27000427246094 +179.47669982910156 +258.42999267578125 +217.97000122070312 +180.2899932861328 +259.4798889160156 +219.88560485839844 +181.58009338378906 +259.3999938964844 +220.27139282226562 +181.9949951171875 +260.0400085449219 +220.07000732421875 +181.82000732421875 +259.8599853515625 +219.77499389648438 +181.78500366210938 +259.9700012207031 +220.60000610351562 +182.7100067138672 +259.8999938964844 +220.96499633789062 +182.78500366210938 +259.5799865722656 +221.08999633789062 +182.1999969482422 +260.94140625 +223.47999572753906 +184.61500549316406 +263.2799987792969 +223.7899932861328 +185.19000244140625 +263.5799865722656 +224.76519775390625 +185.08999633789062 +263.6099853515625 +224.83999633789062 +185.0 +264.0199890136719 +224.85000610351562 +185.27499389648438 +263.5 +224.3350067138672 +186.91000366210938 +262.739990234375 +224.25999450683594 +186.25999450683594 +265.7300109863281 +227.35279846191406 +189.8800048828125 +265.7099914550781 +226.93350219726562 +190.92449951171875 +265.92999267578125 +227.30999755859375 +190.9250030517578 +265.6199951171875 +227.3800048828125 +191.3341064453125 +265.5950012207031 +227.82000732421875 +190.55999755859375 +267.2749938964844 +226.72999572753906 +190.7252960205078 +268.739990234375 +226.97999572753906 +191.42999267578125 +268.6499938964844 +226.52000427246094 +192.8249969482422 +268.69720458984375 +227.5500030517578 +192.80499267578125 +268.9949951171875 +229.11000061035156 +193.70010375976562 +269.4949951171875 +230.69000244140625 +194.58929443359375 +269.0902099609375 +230.05239868164062 +199.31199645996094 +269.20001220703125 +230.368896484375 +202.01499938964844 +269.0299987792969 +229.24000549316406 +201.02999877929688 +270.4200134277344 +229.1300048828125 +210.61000061035156 +267.6300048828125 +230.53500366210938 +208.7949981689453 +268.6199951171875 +231.3679962158203 +206.58999633789062 +269.93011474609375 +230.3721923828125 +206.78900146484375 +270.80999755859375 +229.69000244140625 +206.94000244140625 +268.30999755859375 +228.86000061035156 +207.0399932861328 +269.7300109863281 +230.33999633789062 +207.0500030517578 +269.0899963378906 +226.67999267578125 +202.20590209960938 +270.7900085449219 +227.9600067138672 +203.0749969482422 +272.010009765625 +226.1199951171875 +203.42990112304688 +271.95001220703125 +225.4199981689453 +203.05499267578125 +271.75 +225.08999633789062 +203.5904998779297 +271.3399963378906 +224.39100646972656 +202.54989624023438 +271.2900085449219 +222.77000427246094 +202.8000030517578 +270.3800048828125 +246.5500030517578 +205.47999572753906 +271.29998779296875 +247.7899932861328 +205.2801055908203 +272.43499755859375 +245.8000030517578 +203.98500061035156 +270.3487854003906 +246.02499389648438 +202.8365020751953 +271.80999755859375 +247.60000610351562 +204.27000427246094 +272.1050109863281 +246.85220336914062 +204.41000366210938 +270.25 +244.22000122070312 +202.41000366210938 +267.6300048828125 +255.33999633789062 +207.7949981689453 +266.6400146484375 +255.4600067138672 +207.9149932861328 +267.5350036621094 +256.01031494140625 +209.4199981689453 +267.6780090332031 +256.510009765625 +210.95989990234375 +267.30999755859375 +255.06500244140625 +207.7050018310547 +267.6199951171875 +254.8699951171875 +207.0749969482422 +269.05999755859375 +254.05999755859375 +207.0 +268.42999267578125 +253.38999938964844 +201.6595001220703 +270.6099853515625 +252.44009399414062 +201.85000610351562 +270.010009765625 +250.9550018310547 +200.97500610351562 +270.6383972167969 +249.8699951171875 +199.82510375976562 +270.5104064941406 +249.75 +200.19000244140625 +270.09051513671875 +249.42999267578125 +199.88499450683594 +270.2099914550781 +249.42999267578125 +198.5399932861328 +269.0101013183594 +248.60000610351562 +200.6300048828125 +270.2900085449219 +249.10000610351562 +202.33999633789062 +269.9700012207031 +249.80999755859375 +201.27000427246094 +270.1199951171875 +249.97000122070312 +200.9499969482422 +270.42999267578125 +249.12060546875 +201.03500366210938 +269.6000061035156 +248.44000244140625 +199.5301055908203 +270.1099853515625 +250.24000549316406 +195.1699981689453 +272.82000732421875 +247.1595001220703 +193.06500244140625 +272.1814880371094 +243.66000366210938 +190.6999969482422 +271.42498779296875 +243.94000244140625 +186.82000732421875 +271.3500061035156 +244.11000061035156 +189.20640563964844 +271.9901123046875 +245.40989685058594 +190.5 +271.2099914550781 +244.1199951171875 +189.82000732421875 +269.6600036621094 +243.0800018310547 +188.1699981689453 +271.5799865722656 +240.9499969482422 +182.42799377441406 +269.5299987792969 +240.00999450683594 +180.11219787597656 +269.1099853515625 +239.75999450683594 +182.05999755859375 +268.45001220703125 +240.5500030517578 +184.44000244140625 +267.25 +241.48989868164062 +184.98500061035156 +267.7598876953125 +243.3699951171875 +186.13499450683594 +268.4200134277344 +244.41000366210938 +188.2299041748047 +271.85699462890625 +248.02999877929688 +196.6199951171875 +269.06640625 +246.3800048828125 +194.12179565429688 +269.0799865722656 +247.10499572753906 +195.8656005859375 +269.7300109863281 +248.6300048828125 +196.71180725097656 +269.6600036621094 +248.7698974609375 +197.9199981689453 +269.11859130859375 +248.27000427246094 +198.74000549316406 +269.3599853515625 +248.41000366210938 +199.0399932861328 +274.1000061035156 +248.46780395507812 +192.52999877929688 +272.5 +247.5800018310547 +192.375 +273.31500244140625 +248.26829528808594 +192.4199981689453 +274.4800109863281 +249.3260040283203 +193.64999389648438 +275.32000732421875 +249.3699951171875 +193.97509765625 +275.25 +248.8800048828125 +194.10499572753906 +275.29998779296875 +249.13999938964844 +193.22999572753906 +272.94000244140625 +245.9250030517578 +192.69000244140625 +274.6000061035156 +245.3000030517578 +193.10000610351562 +274.3900146484375 +245.1699981689453 +192.0500030517578 +274.9800109863281 +245.44869995117188 +192.6300048828125 +274.45001220703125 +245.08749389648438 +192.12989807128906 +274.04998779296875 +245.16000366210938 +192.41000366210938 +273.4700012207031 +244.25 +193.85000610351562 +273.7099914550781 +242.53900146484375 +188.09609985351562 +274.037109375 +239.789794921875 +186.2899932861328 +272.8599853515625 +239.84500122070312 +186.92990112304688 +272.5700988769531 +238.07339477539062 +184.86500549316406 +273.5299987792969 +239.0500030517578 +186.00999450683594 +273.03961181640625 +238.3990020751953 +185.9499969482422 +273.0400085449219 +237.5800018310547 +186.9600067138672 +273.7591857910156 +236.7100067138672 +186.9644012451172 +274.6499938964844 +238.2899932861328 +189.97979736328125 +275.7049865722656 +237.55999755859375 +190.03500366210938 +274.5849914550781 +236.20640563964844 +189.1999969482422 +273.9599914550781 +236.25509643554688 +189.9600067138672 +272.989990234375 +235.1999969482422 +190.10000610351562 +272.4100036621094 +234.6999969482422 +190.27999877929688 +269.2799987792969 +230.72500610351562 +187.5500030517578 +267.8799133300781 +232.4199981689453 +187.1999969482422 +268.9200134277344 +233.52000427246094 +187.5800018310547 +267.7799987792969 +232.0 +186.72999572753906 +267.2900085449219 +231.39930725097656 +185.3300018310547 +266.44000244140625 +231.66000366210938 +184.93499755859375 +267.4599914550781 +232.88999938964844 +186.58999633789062 +267.6499938964844 +225.52000427246094 +181.85000610351562 +267.8399963378906 +226.25999450683594 +182.88999938964844 +267.1650085449219 +222.8144073486328 +181.5800018310547 +268.45001220703125 +223.64999389648438 +183.6199951171875 +268.03448486328125 +225.1999969482422 +183.4499969482422 +268.28021240234375 +224.1699981689453 +182.91000366210938 +267.510009765625 +222.55499267578125 +181.3000030517578 +271.8500061035156 +220.58999633789062 +187.6300048828125 +269.7300109863281 +222.05979919433594 +185.38999938964844 +270.3999938964844 +221.77999877929688 +184.38999938964844 +270.0299987792969 +220.58999633789062 +184.25999450683594 +269.6700134277344 +220.6999969482422 +184.6300048828125 +270.0350036621094 +222.67999267578125 +186.7050018310547 +268.57000732421875 +222.69000244140625 +186.69180297851562 +273.9049987792969 +226.41000366210938 +193.9199981689453 +271.7799987792969 +223.74000549316406 +189.75999450683594 +268.94000244140625 +219.4600067138672 +183.68519592285156 +268.80999755859375 +219.83389282226562 +184.50999450683594 +267.7950134277344 +219.57000732421875 +182.72000122070312 +267.32000732421875 +219.07000732421875 +182.3800048828125 +266.3800048828125 +217.14999389648438 +180.94000244140625 +269.8500061035156 +216.26499938964844 +175.7899932861328 +270.8999938964844 +218.5749969482422 +178.86000061035156 +270.54998779296875 +219.63999938964844 +181.07000732421875 +270.9800109863281 +218.7220001220703 +179.33470153808594 +272.6099853515625 +222.0500030517578 +184.19000244140625 +271.3699951171875 +220.18499755859375 +180.38999938964844 +271.489990234375 +220.64500427246094 +178.94000244140625 +273.0950012207031 +225.8699951171875 +178.0 +275.0 +224.94900512695312 +182.08999633789062 +274.8500061035156 +224.6199951171875 +182.47000122070312 +276.1199951171875 +224.97000122070312 +182.10000610351562 +276.2195129394531 +225.91000366210938 +181.8699951171875 +276.4750061035156 +226.09930419921875 +181.6699981689453 +275.9800109863281 +226.10000610351562 +182.5500030517578 +278.9049987792969 +226.7100067138672 +171.0749969482422 +277.8299865722656 +227.77000427246094 +174.7238006591797 +279.0700988769531 +229.25 +175.53500366210938 +278.760009765625 +229.55999755859375 +176.2050018310547 +278.0350036621094 +229.8000030517578 +174.77499389648438 +277.56500244140625 +229.49000549316406 +176.84170532226562 +276.95001220703125 +229.60000610351562 +177.8000030517578 +277.80999755859375 +230.51499938964844 +179.5850067138672 +279.0101013183594 +231.0841064453125 +180.91000366210938 +279.0790100097656 +230.8800048828125 +180.77999877929688 +278.54998779296875 +230.7100067138672 +180.80999755859375 +278.260009765625 +229.56500244140625 +180.5500030517578 +278.0799865722656 +229.42999267578125 +180.50999450683594 +277.4700012207031 +229.1199951171875 +180.19000244140625 +276.260009765625 +231.47999572753906 +177.2899932861328 +276.25 +231.94000244140625 +177.08140563964844 +277.04998779296875 +232.10450744628906 +177.1342010498047 +278.14208984375 +232.8800048828125 +178.86000061035156 +277.9200134277344 +233.97000122070312 +178.9600067138672 +279.7705078125 +234.36500549316406 +179.8350067138672 +280.58819580078125 +234.96009826660156 +179.40499877929688 +280.8900146484375 +234.17999267578125 +179.08999633789062 +281.9100036621094 +234.4781951904297 +179.37989807128906 +283.32000732421875 +233.9499969482422 +179.99000549316406 +284.57000732421875 +234.72000122070312 +183.2550048828125 +285.5400085449219 +234.39010620117188 +180.55999755859375 +285.8699951171875 +236.19000244140625 +182.16000366210938 +285.2149963378906 +235.16000366210938 +181.71499633789062 +285.625 +234.9821014404297 +181.0 +286.239990234375 +235.5 +181.42999267578125 +286.2300109863281 +234.3699951171875 +181.36000061035156 +287.34051513671875 +231.39999389648438 +180.3300018310547 +286.4100036621094 +232.18069458007812 +180.5500030517578 +286.385009765625 +232.47000122070312 +180.375 +285.6792907714844 +231.9600067138672 +180.64999389648438 +285.2099914550781 +231.92489624023438 +180.7449951171875 +284.55499267578125 +232.61000061035156 +180.02000427246094 +284.1499938964844 +232.3699951171875 +179.63999938964844 +281.2250061035156 +228.77499389648438 +181.08009338378906 +280.2799987792969 +227.89999389648438 +182.63510131835938 +280.114990234375 +227.1699981689453 +183.5449981689453 +280.0050048828125 +228.3000030517578 +183.61500549316406 +278.8599853515625 +228.30999755859375 +182.31500244140625 +280.125 +228.7082061767578 +182.32350158691406 +280.6499938964844 +229.10000610351562 +183.39999389648438 +280.4551086425781 +230.9384002685547 +182.7698974609375 +279.2950134277344 +229.6739959716797 +182.05999755859375 +278.31500244140625 +229.38999938964844 +181.77980041503906 +279.44000244140625 +229.83999633789062 +182.24000549316406 +279.2337951660156 +229.6750030517578 +181.45509338378906 +278.8013916015625 +229.25999450683594 +181.8574981689453 +278.7900085449219 +229.5500030517578 +182.35000610351562 +277.55999755859375 +229.0399932861328 +183.05059814453125 +277.4599914550781 +228.07000732421875 +183.48500061035156 +277.2300109863281 +227.2799072265625 +183.40499877929688 +276.9700012207031 +227.0500030517578 +185.89410400390625 +276.3599853515625 +227.08999633789062 +184.7064971923828 +276.92498779296875 +226.9741973876953 +184.88499450683594 +277.9599914550781 +226.99000549316406 +185.5800018310547 +277.70001220703125 +227.66000366210938 +184.6300048828125 +277.4100036621094 +227.83999633789062 +185.07000732421875 +277.875 +227.99000549316406 +184.88800048828125 +278.385009765625 +228.30999755859375 +184.8582000732422 +278.69000244140625 +227.97999572753906 +184.5449981689453 +277.864990234375 +227.9149932861328 +184.3300018310547 +277.2300109863281 +227.89999389648438 +184.97000122070312 +277.45001220703125 +231.73500061035156 +183.85960388183594 +278.2576904296875 +231.66000366210938 +182.8455047607422 +278.5264892578125 +230.72000122070312 +182.57000732421875 +278.1199951171875 +230.3350067138672 +182.61000061035156 +278.2200012207031 +230.26499938964844 +183.09579467773438 +278.9800109863281 +231.9199981689453 +183.7899932861328 +278.7200012207031 +231.69000244140625 +183.77999877929688 +276.1199951171875 +230.8800048828125 +178.0850067138672 +275.82501220703125 +228.85000610351562 +177.05990600585938 +277.9049987792969 +230.08250427246094 +178.4862060546875 +277.5226135253906 +229.47999572753906 +179.30499267578125 +277.760009765625 +229.8441925048828 +180.906494140625 +278.0950012207031 +229.6925048828125 +180.36990356445312 +278.05999755859375 +230.27000427246094 +180.9355010986328 +277.8699951171875 +226.3800048828125 +179.5399932861328 +277.739990234375 +226.02000427246094 +176.63499450683594 +277.8550109863281 +226.3300018310547 +176.52000427246094 +279.04998779296875 +226.99000549316406 +177.4499969482422 +277.95001220703125 +226.85000610351562 +176.2136993408203 +278.05499267578125 +226.71200561523438 +175.90499877929688 +278.3699951171875 +226.19000244140625 +174.99000549316406 +274.1449890136719 +223.02999877929688 +175.45159912109375 +275.510009765625 +224.38999938964844 +178.2519989013672 +274.9200134277344 +222.5449981689453 +177.59500122070312 +274.0400085449219 +222.375 +177.125 +273.3699951171875 +223.22259521484375 +177.13999938964844 +273.80499267578125 +222.6649932861328 +176.3300018310547 +274.114990234375 +222.5500030517578 +176.22999572753906 +273.1700134277344 +222.36500549316406 +176.1501007080078 +272.80999755859375 +222.75 +176.02000427246094 +273.20001220703125 +222.30999755859375 +176.48500061035156 +272.1300048828125 +221.47579956054688 +176.22000122070312 +273.56500244140625 +222.08999633789062 +176.74000549316406 +274.55999755859375 +222.64920043945312 +177.17880249023438 +274.4700012207031 +222.52999877929688 +177.50999450683594 +275.4949951171875 +224.77870178222656 +174.3800048828125 +273.489990234375 +224.13999938964844 +171.13499450683594 +272.8699951171875 +223.64500427246094 +171.4499053955078 +273.0199890136719 +223.7899932861328 +172.25 +273.7850036621094 +222.9149932861328 +170.9499053955078 +273.65008544921875 +222.02000427246094 +171.19000244140625 +271.8599853515625 +221.24099731445312 +170.9199981689453 +270.8999938964844 +227.58270263671875 +175.0399932861328 +272.29998779296875 +228.32000732421875 +174.88009643554688 +270.25 +225.80349731445312 +174.0399932861328 +272.6499938964844 +227.0449981689453 +174.91439819335938 +271.3699951171875 +226.58999633789062 +174.5500030517578 +271.8399963378906 +226.76499938964844 +174.6750030517578 +272.1600036621094 +226.75999450683594 +174.00999450683594 +271.7349853515625 +226.86000061035156 +178.66000366210938 +271.26080322265625 +227.85679626464844 +179.3000030517578 +270.6549987792969 +228.41000366210938 +180.5200958251953 +270.75 +228.66900634765625 +179.96499633789062 +271.3699951171875 +228.75990295410156 +180.57420349121094 +270.79998779296875 +228.64999389648438 +180.44850158691406 +273.6700134277344 +227.3699951171875 +180.99000549316406 +272.0150146484375 +227.82000732421875 +183.39999389648438 +272.44000244140625 +227.52999877929688 +183.6300048828125 +271.94000244140625 +228.01499938964844 +183.10000610351562 +270.9399108886719 +228.0 +183.22560119628906 +270.864990234375 +228.39500427246094 +183.3800048828125 +270.7200012207031 +228.83999633789062 +183.28500366210938 +270.82000732421875 +228.44000244140625 +183.61000061035156 +270.8399963378906 +230.11849975585938 +185.27499389648438 +271.7814025878906 +230.4600067138672 +187.91009521484375 +271.5299987792969 +231.38999938964844 +188.2144012451172 +271.70001220703125 +231.53799438476562 +187.9949951171875 +271.80999755859375 +232.0 +188.61810302734375 +272.10699462890625 +232.2100067138672 +188.78640747070312 +272.239990234375 +232.1199951171875 +189.2100067138672 +274.03509521484375 +232.10000610351562 +187.22999572753906 +274.85101318359375 +232.5399932861328 +187.94500732421875 +275.3599853515625 +232.80999755859375 +188.22500610351562 +274.8247985839844 +232.14990234375 +191.5800018310547 +274.8800048828125 +232.53500366210938 +191.02499389648438 +274.6400146484375 +232.95840454101562 +190.77969360351562 +274.5199890136719 +232.46580505371094 +191.53289794921875 +274.7601013183594 +232.74000549316406 +192.24000549316406 +273.9800109863281 +232.7949981689453 +191.42999267578125 +273.25 +232.5 +190.5399932861328 +273.9543151855469 +232.25 +187.2550048828125 +273.2200012207031 +231.52239990234375 +187.24459838867188 +273.0400085449219 +231.1300048828125 +186.8800048828125 +273.6400146484375 +231.50999450683594 +187.45989990234375 +273.67999267578125 +231.32000732421875 +187.375 +273.9028015136719 +232.10000610351562 +187.96449279785156 +273.79901123046875 +232.0800018310547 +188.22999572753906 +272.5899963378906 +231.30499267578125 +187.17030334472656 +272.85980224609375 +231.86000061035156 +188.25999450683594 +272.5899963378906 +231.2949981689453 +187.90989685058594 +273.1000061035156 +231.19569396972656 +188.21600341796875 +273.3900146484375 +231.6999053955078 +188.15420532226562 +273.1650085449219 +231.74000549316406 +187.5800018310547 +272.989990234375 +232.48989868164062 +187.5500030517578 +272.489990234375 +231.85879516601562 +189.01499938964844 +272.489990234375 +231.2100067138672 +188.8459930419922 +272.6700134277344 +231.36000061035156 +188.91990661621094 +272.625 +231.63999938964844 +188.97000122070312 +272.9609069824219 +231.8800048828125 +188.0449981689453 +272.0799865722656 +230.77999877929688 +187.13499450683594 +271.8399963378906 +230.83999633789062 +186.49000549316406 +273.3900146484375 +227.52499389648438 +190.58900451660156 +270.3245849609375 +225.88999938964844 +189.59939575195312 +270.1499938964844 +226.7064971923828 +189.47999572753906 +270.0799865722656 +225.6199951171875 +189.3616943359375 +270.1300048828125 +226.4499969482422 +189.20570373535156 +270.510009765625 +226.47999572753906 +188.9550018310547 +270.9800109863281 +226.5 +188.80990600585938 +269.80999755859375 +233.22000122070312 +190.0749969482422 +268.7900085449219 +232.25 +190.19000244140625 +266.9700012207031 +233.19000244140625 +187.6199951171875 +267.4200134277344 +232.61000061035156 +187.78500366210938 +266.2698974609375 +232.8450927734375 +186.64320373535156 +267.0190124511719 +232.64999389648438 +187.47000122070312 +267.260009765625 +233.0500030517578 +188.11000061035156 +264.0299987792969 +237.3300018310547 +191.39999389648438 +262.4198913574219 +238.6699981689453 +188.58999633789062 +262.8846130371094 +242.2301025390625 +189.03990173339844 +262.5400085449219 +241.69000244140625 +188.2899932861328 +262.87701416015625 +241.1750030517578 +187.9600067138672 +262.82000732421875 +240.86000061035156 +186.94000244140625 +262.42498779296875 +241.05499267578125 +187.25 +262.0299987792969 +242.42999267578125 +191.01499938964844 +261.0837097167969 +243.49000549316406 +189.5800018310547 +262.3599853515625 +244.41799926757812 +190.0030059814453 +261.2200012207031 +244.89999389648438 +189.625 +261.5899963378906 +243.25 +189.2801055908203 +261.3299865722656 +242.55999755859375 +188.99000549316406 +260.3599853515625 +241.5749969482422 +189.25 +256.7449951171875 +244.84010314941406 +186.10000610351562 +256.1099853515625 +244.47999572753906 +184.8800048828125 +256.7090148925781 +245.3679962158203 +184.25579833984375 +257.4800109863281 +245.67250061035156 +184.75 +256.6000061035156 +245.8000030517578 +184.14999389648438 +258.2799987792969 +245.80999755859375 +185.18649291992188 +259.05999755859375 +246.25900268554688 +185.1300048828125 +258.4599914550781 +245.66000366210938 +184.96200561523438 +256.9599914550781 +246.33250427246094 +185.30999755859375 +258.92999267578125 +245.9250030517578 +184.9541015625 +259.1199951171875 +245.75 +185.18499755859375 +259.7300109863281 +246.63009643554688 +185.88009643554688 +259.9649963378906 +247.0 +185.55499267578125 +259.3500061035156 +247.35000610351562 +184.85000610351562 +260.3500061035156 +247.6699981689453 +184.6199951171875 +260.2300109863281 +247.64759826660156 +185.23989868164062 +260.60931396484375 +248.0998992919922 +186.28500366210938 +260.8900146484375 +248.08999633789062 +186.7801055908203 +260.6400146484375 +248.0050048828125 +186.99000549316406 +260.9700012207031 +247.0500030517578 +186.00999450683594 +260.2099914550781 +246.4199981689453 +184.89999389648438 +260.090087890625 +243.5491943359375 +183.91749572753906 +259.9100036621094 +244.15499877929688 +185.22999572753906 +260.8399963378906 +244.35499572753906 +186.39999389648438 +259.989990234375 +242.71499633789062 +185.0699005126953 +259.739990234375 +241.3000030517578 +184.78990173339844 +259.0199890136719 +242.1199951171875 +184.72000122070312 +261.04998779296875 +242.61000061035156 +185.82000732421875 +259.75 +238.8300018310547 +181.6750030517578 +258.739990234375 +238.5800018310547 +181.98500061035156 +257.3800048828125 +237.49000549316406 +182.10000610351562 +257.5299987792969 +237.07000732421875 +182.22000122070312 +257.79998779296875 +237.57000732421875 +181.82000732421875 +259.9700012207031 +237.41000366210938 +182.14999389648438 +259.95001220703125 +236.6750030517578 +183.1699981689453 +260.10009765625 +237.75 +187.60000610351562 +260.4949951171875 +238.97999572753906 +187.5200958251953 +259.3299865722656 +239.49000549316406 +188.61349487304688 +259.5299987792969 +238.71499633789062 +189.2301025390625 +258.32000732421875 +237.85499572753906 +188.39500427246094 +257.6700134277344 +237.48269653320312 +187.4250030517578 +258.3299865722656 +238.1699981689453 +187.13999938964844 +256.80999755859375 +237.9199981689453 +187.63839721679688 +256.4399108886719 +237.8175048828125 +187.99000549316406 +255.8300018310547 +237.67919921875 +188.02999877929688 +256.0299987792969 +238.80499267578125 +187.93499755859375 +256.0 +237.64999389648438 +187.69000244140625 +256.17999267578125 +238.22500610351562 +187.74000549316406 +255.47999572753906 +239.05999755859375 +186.22999572753906 +251.61570739746094 +234.80690002441406 +180.8000030517578 +251.30499267578125 +234.2899932861328 +180.3199005126953 +250.55999755859375 +233.4600067138672 +180.0198974609375 +249.19500732421875 +231.77499389648438 +179.52000427246094 +247.45249938964844 +229.97999572753906 +179.43499755859375 +245.4600067138672 +230.6197052001953 +178.4949951171875 +246.69000244140625 +231.11000061035156 +178.2100067138672 +247.57000732421875 +231.25999450683594 +180.80999755859375 +247.3000030517578 +231.30499267578125 +182.73550415039062 +245.8300018310547 +228.44000244140625 +179.43499755859375 +245.8800048828125 +227.57000732421875 +180.2449951171875 +247.1103057861328 +229.42999267578125 +182.97999572753906 +248.38279724121094 +230.5399932861328 +183.7899932861328 +247.6300048828125 +231.35000610351562 +183.33999633789062 +250.1300048828125 +232.75 +184.8699951171875 +249.6999053955078 +234.77999877929688 +185.73550415039062 +249.74000549316406 +235.02740478515625 +184.97500610351562 +250.67999267578125 +235.22000122070312 +184.72549438476562 +250.52000427246094 +235.02000427246094 +184.65499877929688 +248.3699951171875 +233.97000122070312 +184.11000061035156 +248.36000061035156 +234.2899932861328 +184.85000610351562 +247.01010131835938 +238.0 +187.65499877929688 +248.35000610351562 +239.15499877929688 +187.75999450683594 +248.73989868164062 +239.86500549316406 +187.74009704589844 +247.92999267578125 +239.40609741210938 +187.89500427246094 +247.47500610351562 +239.4499969482422 +187.8300018310547 +248.19000244140625 +239.27000427246094 +187.22999572753906 +247.97000122070312 +239.19000244140625 +187.6699981689453 +254.0399932861328 +238.96499633789062 +187.3459930419922 +255.0998992919922 +239.84249877929688 +186.80499267578125 +254.5 +239.6300048828125 +186.66000366210938 +254.64999389648438 +239.0800018310547 +186.42999267578125 +255.94000244140625 +239.44000244140625 +186.5749969482422 +255.72500610351562 +239.24000549316406 +186.44500732421875 +255.4199981689453 +238.4199981689453 +186.38999938964844 +259.8450012207031 +242.0399932861328 +188.91510009765625 +260.7200012207031 +241.77000427246094 +189.70579528808594 +261.30999755859375 +242.35000610351562 +189.68499755859375 +260.2550048828125 +243.0800018310547 +189.48500061035156 +259.875 +243.8249969482422 +189.125 +259.3800048828125 +244.02999877929688 +189.4250030517578 +258.2699890136719 +244.67999267578125 +188.5399932861328 +256.0899963378906 +244.89999389648438 +191.40499877929688 +255.49000549316406 +243.0800018310547 +191.77999877929688 +254.82000732421875 +242.4425048828125 +191.09579467773438 +255.2550048828125 +242.94000244140625 +191.72000122070312 +255.11000061035156 +242.27000427246094 +191.52000427246094 +256.4750061035156 +243.08990478515625 +191.6230010986328 +256.44000244140625 +243.02000427246094 +191.52999877929688 +256.8999938964844 +238.78500366210938 +188.92999267578125 +256.1700134277344 +238.0 +187.8350067138672 +257.2200012207031 +239.97999572753906 +189.5449981689453 +257.3800048828125 +239.57260131835938 +190.05499267578125 +258.1449890136719 +239.51980590820312 +190.36000061035156 +258.2950134277344 +239.97999572753906 +190.94500732421875 +258.17498779296875 +241.67999267578125 +192.42999267578125 +254.0 +242.30999755859375 +191.65499877929688 +256.6875 +240.66009521484375 +192.231201171875 +255.2100067138672 +240.72000122070312 +192.8300018310547 +256.05499267578125 +238.63999938964844 +191.27000427246094 +257.5849914550781 +240.1699981689453 +191.47000122070312 +259.9100036621094 +239.94000244140625 +189.84500122070312 +259.4800109863281 +239.25999450683594 +191.28500366210938 +265.0400085449219 +244.7550048828125 +188.58749389648438 +264.29180908203125 +244.5399932861328 +189.139892578125 +264.17999267578125 +244.96029663085938 +189.21009826660156 +265.1300048828125 +243.5850067138672 +189.73500061035156 +267.17999267578125 +243.52999877929688 +189.9199981689453 +268.9800109863281 +242.9582061767578 +186.1750030517578 +269.9599914550781 +242.9409942626953 +185.69000244140625 +269.885009765625 +239.21499633789062 +180.29989624023438 +268.8949890136719 +237.5800018310547 +179.10000610351562 +268.8999938964844 +237.3000030517578 +180.00010681152344 +269.3399963378906 +236.92990112304688 +179.1584930419922 +271.4800109863281 +236.1699981689453 +178.69500732421875 +269.2099914550781 +237.3800048828125 +178.69700622558594 +269.4599914550781 +238.63299560546875 +180.3300018310547 +276.1000061035156 +237.4949951171875 +177.19520568847656 +277.21380615234375 +236.9499969482422 +175.25 +275.25 +233.42019653320312 +173.35000610351562 +275.6000061035156 +233.7449951171875 +174.12660217285156 +274.9100036621094 +232.60000610351562 +174.94009399414062 +277.6099853515625 +233.8000030517578 +175.27099609375 +276.4599914550781 +232.92999267578125 +174.1999969482422 +276.7850036621094 +222.27000427246094 +171.5850067138672 +275.2200012207031 +223.69000244140625 +174.2550048828125 +274.739990234375 +224.7050018310547 +175.28500366210938 +274.32000732421875 +223.3905029296875 +174.3300018310547 +277.0450134277344 +223.1699981689453 +173.6699981689453 +276.6300048828125 +223.1699981689453 +172.26010131835938 +275.9200134277344 +222.5 +171.82000732421875 +279.2900085449219 +204.8699951171875 +182.64999389648438 +279.114990234375 +204.89999389648438 +183.97999572753906 +278.67999267578125 +208.05999755859375 +184.5312042236328 +277.7749938964844 +207.25999450683594 +184.5102996826172 +277.1300048828125 +207.39999389648438 +184.44500732421875 +277.6600036621094 +207.7899932861328 +185.3350067138672 +278.0799865722656 +210.31500244140625 +185.41000366210938 +273.08270263671875 +207.14999389648438 +190.66000366210938 +273.398193359375 +209.6300048828125 +191.8249969482422 +272.0115051269531 +210.31500244140625 +191.58999633789062 +271.9800109863281 +210.44000244140625 +190.9929962158203 +273.6199951171875 +209.19000244140625 +191.00999450683594 +274.0400085449219 +209.03500366210938 +189.89999389648438 +274.5400085449219 +208.66000366210938 +189.7899932861328 +274.4200134277344 +211.80499267578125 +189.17320251464844 +274.05999755859375 +210.08740234375 +189.12010192871094 +273.3500061035156 +209.9949951171875 +189.69000244140625 +274.05499267578125 +207.75999450683594 +189.2449951171875 +273.9649963378906 +208.2550048828125 +189.21499633789062 +274.07000732421875 +207.71800231933594 +189.10000610351562 +273.7900085449219 +206.99000549316406 +188.61000061035156 +277.05010986328125 +204.96189880371094 +188.9199981689453 +278.19000244140625 +204.3800048828125 +191.289794921875 +279.94500732421875 +203.4492950439453 +191.98500061035156 +278.9599914550781 +204.27890014648438 +191.43099975585938 +279.5799865722656 +205.11500549316406 +192.0449981689453 +276.04998779296875 +203.88499450683594 +191.05999755859375 +275.5400085449219 +204.00999450683594 +190.02999877929688 +271.25 +202.31500244140625 +191.69000244140625 +266.1700134277344 +197.77000427246094 +187.30499267578125 +264.6000061035156 +199.5 +189.5749969482422 +262.3299865722656 +199.3350067138672 +189.25 +261.7799987792969 +199.1199951171875 +189.0500030517578 +261.489990234375 +198.375 +187.60000610351562 +261.5899963378906 +199.4499969482422 +186.91000366210938 diff --git a/messaging/clients/curl/test_get.sh b/messaging/clients/curl/test_get.sh new file mode 100755 index 0000000..4c9d7b0 --- /dev/null +++ b/messaging/clients/curl/test_get.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +export REPEAT=100 + +echo "Getting $REPEAT messages" + +for i in $(seq $REPEAT) +do + echo "Msg $i ----" + . ./get_portfolio_order.sh + sleep 1 + echo "" +done diff --git a/messaging/clients/curl/test_post.sh b/messaging/clients/curl/test_post.sh new file mode 100755 index 0000000..05a51f3 --- /dev/null +++ b/messaging/clients/curl/test_post.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +export REPEAT=100 + +echo "Posting $REPEAT messages" + +for i in $(seq $REPEAT) +do + echo "Msg $i ----" + . ./post_portfolio_order.sh + SLEEP_TIME=$(expr $RANDOM % 3) + sleep $SLEEP_TIME + echo "" +done diff --git a/messaging/clients/kaf/consumers/kaf_consume.sh b/messaging/clients/kaf/consumers/kaf_consume.sh new file mode 100755 index 0000000..db24648 --- /dev/null +++ b/messaging/clients/kaf/consumers/kaf_consume.sh @@ -0,0 +1,6 @@ +#!/bin/bash +export KTOPIC=stockprice +kaf consume \ + ${KTOPIC} \ + -v \ + -b localhost:9092 diff --git a/messaging/clients/kaf/consumers/kaf_ssl_conf.yaml b/messaging/clients/kaf/consumers/kaf_ssl_conf.yaml new file mode 100644 index 0000000..5092193 --- /dev/null +++ b/messaging/clients/kaf/consumers/kaf_ssl_conf.yaml @@ -0,0 +1,9 @@ +clusters: + - name: seckafkabroker + brokers: + - localhost:49092 + TLS: + cafile: "../../../config/ca/cacert.pem" + clientfile: "../../../config/certs/client/client.signed.pem" + clientkeyfile: "../../../config/certs/client/client.key" + insecure: false diff --git a/messaging/clients/kaf/consumers/seckaf_consume.sh b/messaging/clients/kaf/consumers/seckaf_consume.sh new file mode 100755 index 0000000..49671a4 --- /dev/null +++ b/messaging/clients/kaf/consumers/seckaf_consume.sh @@ -0,0 +1,7 @@ +#!/bin/bash +export KTOPIC=portfolioupdates +export KTOPIC=orderplacement +kaf consume \ + ${KTOPIC} \ + --config ./kaf_ssl_conf.yaml \ + --cluster seckafkabroker diff --git a/messaging/clients/kaf/producers/generate_ticker_data.sh b/messaging/clients/kaf/producers/generate_ticker_data.sh new file mode 100755 index 0000000..e61314c --- /dev/null +++ b/messaging/clients/kaf/producers/generate_ticker_data.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# this script produces fake ticker prices, using the `prices.txt` data +# with each line for each of the list of tickers +KTOPIC=stockprice +KADDRESS=localhost:9092 + +echo -e "Producing: $KKEY into '$KTOPIC' topic\n" + +SLEEP_PERIOD=1 +TICKERS=('NVDA', 'AAPL', 'AMZN') + +export idx=0 +while read -r line +do + export idx=$(expr $idx + 1) + export idx=$(expr $idx % 3) + + export PRICE=$line + export TICKER=${TICKERS[$idx]} + export KKEY=$(date +%Y%m%d_%H%M%S) + echo '{"ticker": "$TICKER", "price": $PRICE}' | envsubst | \ + kaf produce \ + ${KTOPIC} \ + -H Content-Type:application/json \ + -k ${KKEY} \ + -b ${KADDRESS} \ + -v \ + --input-mode full + sleep $SLEEP_PERIOD +done < './prices.txt' diff --git a/messaging/clients/kaf/producers/kaf.sh b/messaging/clients/kaf/producers/kaf.sh new file mode 100755 index 0000000..646076b --- /dev/null +++ b/messaging/clients/kaf/producers/kaf.sh @@ -0,0 +1,21 @@ +#!/bin/bash +KTOPIC=stockprice +KADDRESS=localhost:9092 +SLEEP_PERIOD=5 +PRICES=("309.28", "312.59", "315.7", "314.68", "311.9", "309.70", "319.00") + +for p in ${PRICES[@]}; do + echo "producing price ${p}" + export PRICE=$p + export KKEY=$(date +%Y%m%d_%H%M%S) + envsubst < kaf_payload.json | \ + kaf produce \ + ${KTOPIC} \ + -H Content-Type:application/json \ + -k ${KKEY} \ + -b ${KADDRESS} \ + -v \ + --input-mode full + sleep ${SLEEP_PERIOD} +done + diff --git a/messaging/clients/kaf/producers/kaf_payload.json b/messaging/clients/kaf/producers/kaf_payload.json new file mode 100644 index 0000000..7188519 --- /dev/null +++ b/messaging/clients/kaf/producers/kaf_payload.json @@ -0,0 +1,5 @@ +{ + "ticker": "AAPL", + "price": "${PRICE}", + "name": "Apple Inc" +} diff --git a/messaging/clients/kaf/producers/kaf_ssl_conf.yaml b/messaging/clients/kaf/producers/kaf_ssl_conf.yaml new file mode 100644 index 0000000..5092193 --- /dev/null +++ b/messaging/clients/kaf/producers/kaf_ssl_conf.yaml @@ -0,0 +1,9 @@ +clusters: + - name: seckafkabroker + brokers: + - localhost:49092 + TLS: + cafile: "../../../config/ca/cacert.pem" + clientfile: "../../../config/certs/client/client.signed.pem" + clientkeyfile: "../../../config/certs/client/client.key" + insecure: false diff --git a/messaging/clients/kaf/producers/prices.txt b/messaging/clients/kaf/producers/prices.txt new file mode 100644 index 0000000..f6481a8 --- /dev/null +++ b/messaging/clients/kaf/producers/prices.txt @@ -0,0 +1,5298 @@ +229.86619567871094 +233.5500030517578 +134.41000366210938 +229.36000061035156 +233.0800018310547 +133.47500610351562 +228.470703125 +231.88999938964844 +134.0290069580078 +228.47000122070312 +232.4600067138672 +134.3300018310547 +228.6999053955078 +233.0399932861328 +134.51499938964844 +227.69000244140625 +233.58999633789062 +134.51930236816406 +227.63999938964844 +233.1300048828125 +133.50999450683594 +233.33999633789062 +232.69119262695312 +133.94500732421875 +234.64999389648438 +231.3549041748047 +133.9698944091797 +234.57229614257812 +231.0 +132.7100067138672 +233.5449981689453 +231.8350067138672 +132.83230590820312 +233.3699951171875 +231.6699981689453 +133.03500366210938 +233.1107940673828 +232.32000732421875 +133.45140075683594 +232.77000427246094 +232.80999755859375 +132.8699951171875 +233.60499572753906 +229.85000610351562 +131.32020568847656 +235.07000732421875 +229.61000061035156 +130.61990356445312 +235.2899932861328 +230.76499938964844 +131.5749969482422 +235.47999572753906 +230.8800048828125 +130.97500610351562 +236.2100067138672 +230.7135009765625 +130.6898956298828 +236.46499633789062 +229.85499572753906 +131.52499389648438 +236.88999938964844 +228.89999389648438 +131.07989501953125 +237.8800048828125 +229.50379943847656 +134.5500030517578 +240.47999572753906 +228.6199951171875 +135.71499633789062 +240.34500122070312 +228.11500549316406 +135.00999450683594 +241.02999877929688 +228.1699981689453 +134.52499389648438 +241.7698974609375 +229.18280029296875 +135.12030029296875 +241.5449981689453 +229.63499450683594 +135.36129760742188 +241.52000427246094 +230.36000061035156 +135.25 +244.3800048828125 +227.7899932861328 +138.00010681152344 +243.94500732421875 +228.72999572753906 +136.5800018310547 +243.81520080566406 +228.29440307617188 +136.74009704589844 +243.99989318847656 +228.6699981689453 +137.3376007080078 +244.14999389648438 +228.93499755859375 +137.82000732421875 +244.10000610351562 +228.67999267578125 +138.36509704589844 +244.57000732421875 +228.67999267578125 +138.86000061035156 +244.0904998779297 +225.19140625 +140.66000366210938 +244.72999572753906 +224.95950317382812 +141.19500732421875 +244.42999267578125 +224.47500610351562 +139.96499633789062 +243.43499755859375 +224.10299682617188 +140.15139770507812 +243.05499267578125 +224.40269470214844 +139.5749969482422 +243.52000427246094 +224.58999633789062 +139.54989624023438 +244.47000122070312 +226.6699981689453 +139.41000366210938 +243.9398956298828 +224.00999450683594 +139.3300018310547 +244.3957061767578 +224.52000427246094 +139.94830322265625 +245.14999389648438 +224.62010192871094 +139.81500244140625 +244.7100067138672 +224.76499938964844 +140.639892578125 +244.9001007080078 +225.49000549316406 +140.44509887695312 +244.8800048828125 +226.0399932861328 +139.31939697265625 +244.8800048828125 +226.6699981689453 +139.24000549316406 +244.7449951171875 +223.4600067138672 +138.62060546875 +246.13059997558594 +222.61000061035156 +138.3000030517578 +246.3800048828125 +222.72000122070312 +139.5800018310547 +245.44500732421875 +222.35000610351562 +139.49000549316406 +245.2550048828125 +222.5399932861328 +139.80490112304688 +245.6199951171875 +222.69000244140625 +139.89999389648438 +245.86000061035156 +222.8699951171875 +140.1199951171875 +245.7899932861328 +219.4949951171875 +139.22999572753906 +247.1300048828125 +219.26499938964844 +139.19920349121094 +247.3699951171875 +217.6300048828125 +138.99110412597656 +247.44119262695312 +216.04969787597656 +137.1699981689453 +246.49000549316406 +214.9600067138672 +135.39669799804688 +245.8000030517578 +216.4398956298828 +135.10000610351562 +245.58999633789062 +216.49000549316406 +134.27000427246094 +247.85000610351562 +213.63510131835938 +132.92999267578125 +247.11019897460938 +214.19000244140625 +134.0399932861328 +247.7949981689453 +214.6999969482422 +134.60000610351562 +248.0500030517578 +214.97279357910156 +134.6199951171875 +248.66000366210938 +214.58709716796875 +132.72000122070312 +247.61000061035156 +214.2613067626953 +132.57000732421875 +247.22999572753906 +212.72999572753906 +130.10000610351562 +245.11000061035156 +207.11500549316406 +125.33999633789062 +246.52499389648438 +205.97000122070312 +126.19000244140625 +249.5800018310547 +207.80560302734375 +128.52499389648438 +247.97999572753906 +209.52999877929688 +128.3699951171875 +247.66810607910156 +210.75999450683594 +127.2699966430664 +247.72000122070312 +212.5399932861328 +128.81500244140625 +247.0500030517578 +212.8000030517578 +126.62999725341797 +243.47999572753906 +216.91000366210938 +130.4499969482422 +241.80999755859375 +216.8800048828125 +132.4149932861328 +243.1300048828125 +217.07000732421875 +132.55679321289062 +240.34030151367188 +214.67999267578125 +130.3751983642578 +239.82000732421875 +213.77000427246094 +129.88999938964844 +239.9499969482422 +213.72000122070312 +130.74000549316406 +240.30999755859375 +214.27000427246094 +131.52000427246094 +241.375 +214.41000366210938 +127.4800033569336 +241.52000427246094 +214.10870361328125 +126.27999877929688 +241.05799865722656 +213.65499877929688 +127.08000183105469 +241.89999389648438 +213.75 +127.61000061035156 +240.6300048828125 +211.08999633789062 +123.74500274658203 +238.9199981689453 +209.80999755859375 +121.91000366210938 +237.3800048828125 +208.82000732421875 +120.01000213623047 +237.59500122070312 +210.5742950439453 +122.7300033569336 +236.9199981689453 +209.3699951171875 +121.55999755859375 +237.60499572753906 +209.28500366210938 +122.18099975585938 +237.41000366210938 +208.5124053955078 +120.57990264892578 +237.9199981689453 +208.20249938964844 +120.47000122070312 +239.7100067138672 +209.77000427246094 +121.88500213623047 +241.83999633789062 +212.3000030517578 +125.05000305175781 +241.48500061035156 +210.6699981689453 +119.51000213623047 +241.19000244140625 +208.6699981689453 +119.22000122070312 +242.5399932861328 +209.2332000732422 +118.41000366210938 +240.96499633789062 +207.36000061035156 +115.23999786376953 +241.15179443359375 +207.24000549316406 +116.04499816894531 +236.8892059326172 +204.22999572753906 +113.16999816894531 +238.13999938964844 +205.05999755859375 +114.01000213623047 +238.39999389648438 +198.35000610351562 +111.61000061035156 +238.6300048828125 +199.40499877929688 +111.83000183105469 +238.1649932861328 +203.06500244140625 +116.01020050048828 +236.75 +202.89999389648438 +116.19999694824219 +238.2888946533203 +204.85000610351562 +117.7698974609375 +238.69000244140625 +206.1999969482422 +118.88999938964844 +236.07000732421875 +203.85000610351562 +115.95999908447266 +230.9199981689453 +205.19500732421875 +115.97000122070312 +230.6490020751953 +205.44500732421875 +115.40989685058594 +234.53990173339844 +207.34500122070312 +116.56310272216797 +234.67999267578125 +207.67999267578125 +116.2699966430664 +235.74749755859375 +208.64999389648438 +117.10980224609375 +236.0399932861328 +209.10040283203125 +117.66000366210938 +235.77000427246094 +208.4600067138672 +117.29000091552734 +236.47000122070312 +205.1199951171875 +114.84439849853516 +236.77999877929688 +203.8350067138672 +114.05999755859375 +234.4149932861328 +201.31500244140625 +111.6355972290039 +234.2949981689453 +200.8350067138672 +111.53500366210938 +233.69000244140625 +198.8000030517578 +110.52999877929688 +235.17999267578125 +199.52000427246094 +111.09719848632812 +235.32000732421875 +200.6999969482422 +110.58000183105469 +238.30999755859375 +199.4250030517578 +111.04000091552734 +239.02000427246094 +194.52499389648438 +109.69999694824219 +239.2899932861328 +193.9199981689453 +109.00499725341797 +240.41439819335938 +197.16009521484375 +110.50890350341797 +239.64999389648438 +200.3350067138672 +112.25 +238.8114013671875 +199.13999938964844 +112.6050033569336 +239.07000732421875 +199.27000427246094 +112.7300033569336 +228.5500030517578 +193.30999755859375 +108.06439971923828 +226.50869750976562 +194.33999633789062 +107.658203125 +225.47999572753906 +193.63999938964844 +108.08499908447266 +225.2100067138672 +193.18190002441406 +107.06009674072266 +226.5800018310547 +192.345703125 +106.76000213623047 +226.9761962890625 +193.0800018310547 +106.64990234375 +227.54100036621094 +194.66000366210938 +107.0199966430664 +222.52000427246094 +195.47500610351562 +106.30999755859375 +221.00320434570312 +197.11000061035156 +108.8949966430664 +218.5500030517578 +196.4499969482422 +108.81999969482422 +217.7550048828125 +193.5500030517578 +107.55999755859375 +220.5449981689453 +197.25999450683594 +110.43000030517578 +221.82020568847656 +198.34500122070312 +110.80860137939453 +220.72999572753906 +196.5 +108.63999938964844 +218.9499969482422 +198.58999633789062 +114.65010070800781 +216.44500732421875 +196.78500366210938 +114.51000213623047 +218.3603973388672 +199.52000427246094 +115.83499908447266 +218.18980407714844 +199.4333953857422 +116.11499786376953 +216.11000061035156 +199.22000122070312 +115.55500030517578 +215.639892578125 +199.01499938964844 +115.44999694824219 +216.94000244140625 +198.88999938964844 +115.73999786376953 +214.27999877929688 +195.71499633789062 +116.65499877929688 +214.0402069091797 +194.85000610351562 +116.08000183105469 +211.94000244140625 +193.7100067138672 +115.86090087890625 +211.15499877929688 +192.5399932861328 +115.26499938964844 +212.2899932861328 +193.89999389648438 +116.94999694824219 +210.6300048828125 +193.05999755859375 +116.00499725341797 +209.7100067138672 +193.91000366210938 +115.70999908447266 +210.3780975341797 +195.8350067138672 +119.52490234375 +211.92999267578125 +197.25999450683594 +120.93000030517578 +212.23069763183594 +197.41000366210938 +120.51499938964844 +212.31500244140625 +197.6699981689453 +120.54499816894531 +211.2449951171875 +197.0500030517578 +120.2750015258789 +212.90530395507812 +197.66250610351562 +120.58499908447266 +213.3800048828125 +197.94000244140625 +121.44999694824219 +213.22470092773438 +196.1649932861328 +119.53500366210938 +210.75469970703125 +195.4199981689453 +119.29499816894531 +211.1999969482422 +194.71299743652344 +118.36509704589844 +212.33030700683594 +196.1403045654297 +119.17489624023438 +214.4550018310547 +198.36000061035156 +120.5 +214.68499755859375 +197.47000122070312 +120.3644027709961 +214.19000244140625 +195.85000610351562 +119.4800033569336 +214.55140686035156 +190.82000732421875 +115.83999633789062 +213.3300018310547 +191.72000122070312 +116.75499725341797 +213.72000122070312 +192.24000549316406 +117.63999938964844 +212.2834014892578 +192.05999755859375 +117.15499877929688 +211.9949951171875 +192.56500244140625 +116.63870239257812 +212.34500122070312 +193.35499572753906 +116.13500213623047 +212.7899932861328 +192.91000366210938 +115.58000183105469 +217.14500427246094 +193.47999572753906 +116.98999786376953 +215.66900634765625 +193.4499969482422 +117.24500274658203 +215.3000030517578 +193.78500366210938 +118.0250015258789 +214.3800048828125 +192.21499633789062 +117.45860290527344 +214.27000427246094 +193.2449951171875 +118.53600311279297 +215.50990295410156 +194.33999633789062 +118.25 +215.3000030517578 +195.52000427246094 +117.5199966430664 +216.9904022216797 +197.80999755859375 +118.9000015258789 +216.0500030517578 +198.00999450683594 +119.63999938964844 +214.13999938964844 +195.0800018310547 +118.29000091552734 +213.22999572753906 +194.2595977783203 +117.88899993896484 +212.75999450683594 +193.7657012939453 +118.0791015625 +212.68350219726562 +194.14999389648438 +118.04499816894531 +214.14999389648438 +194.9499969482422 +118.47000122070312 +213.74000549316406 +195.15499877929688 +116.46939849853516 +213.44349670410156 +194.19119262695312 +116.29000091552734 +214.65499877929688 +195.35000610351562 +117.3499984741211 +214.6199951171875 +195.22500610351562 +117.06500244140625 +214.6699981689453 +195.375 +117.19110107421875 +215.30999755859375 +195.5802001953125 +116.78500366210938 +218.36000061035156 +196.22000122070312 +117.63500213623047 +219.77000427246094 +202.79359436035156 +120.4800033569336 +219.15750122070312 +201.80470275878906 +122.04000091552734 +219.0 +202.07850646972656 +121.75 +219.2899932861328 +202.15499877929688 +121.72879791259766 +219.75999450683594 +202.35000610351562 +121.81500244140625 +219.77000427246094 +203.0 +121.79499816894531 +220.42999267578125 +203.02999877929688 +121.2300033569336 +223.3699951171875 +205.13999938964844 +119.9800033569336 +223.52999877929688 +205.33999633789062 +120.2615966796875 +223.11000061035156 +204.75999450683594 +120.66020202636719 +222.80999755859375 +204.9199981689453 +120.23500061035156 +223.49000549316406 +205.4949951171875 +120.71510314941406 +223.4199981689453 +205.2100067138672 +120.69499969482422 +223.72999572753906 +205.6999969482422 +120.6449966430664 +224.07449340820312 +202.70010375976562 +115.11499786376953 +223.72000122070312 +203.31500244140625 +115.16500091552734 +223.6750030517578 +202.89999389648438 +114.03500366210938 +222.0800018310547 +201.7100067138672 +113.45999908447266 +221.8350067138672 +201.08999633789062 +113.6449966430664 +220.60000610351562 +200.47500610351562 +113.26499938964844 +221.39999389648438 +201.1479949951172 +113.69999694824219 +221.64999389648438 +202.8000030517578 +112.81500244140625 +222.8000946044922 +202.6300048828125 +113.55000305175781 +223.19500732421875 +202.5500030517578 +112.50499725341797 +223.10499572753906 +201.8000030517578 +111.69139862060547 +224.3699951171875 +202.3800048828125 +112.1449966430664 +224.7899932861328 +202.5500030517578 +112.66999816894531 +223.92999267578125 +201.36000061035156 +111.43000030517578 +219.91000366210938 +194.61000061035156 +109.27880096435547 +219.97999572753906 +194.82000732421875 +109.65499877929688 +218.69000244140625 +193.28500366210938 +109.58499908447266 +218.49000549316406 +192.3350067138672 +109.4749984741211 +219.0500030517578 +192.86990356445312 +110.01499938964844 +218.50999450683594 +192.60000610351562 +109.91000366210938 +217.8800048828125 +192.63999938964844 +109.63999938964844 +218.57000732421875 +184.72999572753906 +103.88999938964844 +219.1300048828125 +186.9792022705078 +105.1895980834961 +220.9199981689453 +188.7550048828125 +105.9800033569336 +219.8699951171875 +188.5959930419922 +105.72000122070312 +220.7949981689453 +189.8300018310547 +107.55010223388672 +221.22500610351562 +189.4250030517578 +107.23999786376953 +221.9949951171875 +190.2899932861328 +108.7699966430664 +221.5198974609375 +189.51499938964844 +107.12999725341797 +222.87989807128906 +192.22500610351562 +108.91089630126953 +222.52999877929688 +193.02000427246094 +109.4000015258789 +222.3385009765625 +192.13999938964844 +108.80120086669922 +221.5 +191.0 +107.71990203857422 +221.72999572753906 +191.3000030517578 +108.61129760742188 +223.13999938964844 +192.16000366210938 +110.1500015258789 +224.0399932861328 +192.17999267578125 +108.99859619140625 +224.47999572753906 +192.36500549316406 +110.25 +224.1300048828125 +195.77000427246094 +111.15239715576172 +224.72000122070312 +197.2353057861328 +111.23500061035156 +222.92999267578125 +194.61000061035156 +109.32499694824219 +223.66009521484375 +195.88999938964844 +109.6500015258789 +223.7899932861328 +195.9600067138672 +110.37999725341797 +205.63499450683594 +179.92999267578125 +105.1500015258789 +204.0500030517578 +180.11000061035156 +102.96990203857422 +206.05999755859375 +182.80999755859375 +103.66100311279297 +204.0050048828125 +181.052001953125 +103.0199966430664 +203.0 +179.77499389648438 +102.625 +202.1999969482422 +178.32000732421875 +102.66850280761719 +203.47000122070312 +178.5 +102.01000213623047 +195.27999877929688 +174.02000427246094 +94.60579681396484 +194.49000549316406 +176.28500366210938 +95.0999984741211 +192.80999755859375 +174.8699951171875 +93.82990264892578 +190.99000549316406 +174.77999877929688 +94.10009765625 +188.8800048828125 +174.4600067138672 +94.01000213623047 +190.22999572753906 +175.0850067138672 +95.16500091552734 +188.3800048828125 +170.97999572753906 +94.31999969482422 +182.39999389648438 +173.48500061035156 +93.61000061035156 +176.36000061035156 +170.88999938964844 +93.87999725341797 +178.13999938964844 +172.51499938964844 +95.87000274658203 +181.5399932861328 +174.77999877929688 +98.23290252685547 +180.3350067138672 +174.9600067138672 +97.41000366210938 +178.42129516601562 +173.8199005126953 +96.6500015258789 +181.58999633789062 +175.4499969482422 +97.70999908447266 +189.3300018310547 +182.20449829101562 +104.7300033569336 +184.08999633789062 +178.1510009765625 +102.05999755859375 +183.3300018310547 +177.16000366210938 +101.58499908447266 +175.02999877929688 +173.7274932861328 +98.77999877929688 +175.3300018310547 +173.9600067138672 +99.42990112304688 +172.88999938964844 +171.33999633789062 +96.31999969482422 +172.77000427246094 +171.08999633789062 +96.70999908447266 +178.41180419921875 +173.60499572753906 +99.97940063476562 +179.7550048828125 +171.68499755859375 +99.1688003540039 +179.58999633789062 +171.56500244140625 +99.44000244140625 +188.52499389648438 +181.27000427246094 +106.47000122070312 +190.8000030517578 +188.38999938964844 +112.02999877929688 +196.05999755859375 +189.33999633789062 +112.79000091552734 +198.85000610351562 +190.9499969482422 +114.25 +192.14500427246094 +184.59500122070312 +109.08000183105469 +188.8592071533203 +182.5800018310547 +107.8949966430664 +184.27000427246094 +176.49000549316406 +104.05000305175781 +188.00999450683594 +180.2550048828125 +106.47000122070312 +191.75999450683594 +182.8939971923828 +108.44400024414062 +189.98500061035156 +180.10000610351562 +106.44000244140625 +190.44000244140625 +181.0399932861328 +107.69999694824219 +189.92999267578125 +178.27999877929688 +107.69999694824219 +193.32000732421875 +179.52999877929688 +108.63999938964844 +195.80099487304688 +181.22250366210938 +109.44000244140625 +196.83070373535156 +182.88999938964844 +109.73999786376953 +197.5800018310547 +183.5749969482422 +110.3499984741211 +198.3419952392578 +184.47999572753906 +110.11000061035156 +198.02000427246094 +184.7899932861328 +110.69000244140625 +204.75 +184.97999572753906 +112.56700134277344 +203.60000610351562 +182.9499969482422 +111.33350372314453 +201.75 +180.57000732421875 +110.02999877929688 +203.86399841308594 +180.3800048828125 +110.44000244140625 +205.7899932861328 +181.67999267578125 +111.19999694824219 +205.7100067138672 +182.4199981689453 +111.3499984741211 +202.58999633789062 +182.08999633789062 +110.69999694824219 +200.8000030517578 +179.7906951904297 +111.01499938964844 +202.11500549316406 +180.9550018310547 +112.02999877929688 +203.0399932861328 +180.63999938964844 +113.26499938964844 +201.60440063476562 +179.1248016357422 +111.84010314941406 +201.76499938964844 +178.3531036376953 +112.12000274658203 +202.8000030517578 +178.98280334472656 +112.21009826660156 +202.1300048828125 +179.5800018310547 +112.0999984741211 +197.07000732421875 +176.64999389648438 +105.5199966430664 +198.35009765625 +178.67669677734375 +105.17510223388672 +196.91000366210938 +176.8300018310547 +103.91500091552734 +197.75999450683594 +176.69020080566406 +103.93499755859375 +194.55499267578125 +173.3000030517578 +102.18499755859375 +192.57000732421875 +171.6300048828125 +101.00499725341797 +194.3000030517578 +174.38999938964844 +104.5 +195.63999938964844 +172.9149932861328 +100.49500274658203 +196.0399932861328 +173.30999755859375 +100.39820098876953 +197.80499267578125 +173.83999633789062 +101.23500061035156 +196.6999969482422 +173.09500122070312 +100.8311996459961 +198.27999877929688 +174.1999969482422 +102.15630340576172 +197.24220275878906 +172.57000732421875 +101.21499633789062 +196.8699951171875 +172.58999633789062 +101.41000366210938 +192.1199951171875 +166.13999938964844 +95.83499908447266 +190.73500061035156 +166.82009887695312 +95.88999938964844 +191.1300048828125 +166.52999877929688 +95.80000305175781 +190.61399841308594 +165.63999938964844 +95.36859893798828 +190.82000732421875 +165.9290008544922 +95.58999633789062 +191.10499572753906 +165.85499572753906 +95.5999984741211 +193.08999633789062 +167.30999755859375 +96.80000305175781 +198.01499938964844 +171.88999938964844 +99.0199966430664 +198.8300018310547 +173.9199981689453 +98.8949966430664 +201.3800048828125 +176.58399963378906 +99.6500015258789 +198.5399932861328 +173.03500366210938 +98.1050033569336 +199.8917999267578 +173.0500946044922 +98.48500061035156 +198.6201934814453 +172.24989318847656 +97.70500183105469 +199.66000366210938 +173.1300048828125 +98.87999725341797 +206.80499267578125 +186.14999389648438 +104.18499755859375 +204.6300048828125 +183.2899932861328 +103.13700103759766 +204.11000061035156 +181.9613037109375 +103.36000061035156 +204.9499969482422 +181.9600067138672 +103.95999908447266 +204.48240661621094 +181.6300048828125 +103.71499633789062 +204.00999450683594 +180.85000610351562 +102.41999816894531 +204.36000061035156 +180.5399932861328 +102.53500366210938 +206.32000732421875 +183.72500610351562 +105.36869812011719 +205.9250030517578 +184.38319396972656 +105.34500122070312 +206.2899932861328 +185.02999877929688 +105.7489013671875 +206.90499877929688 +185.3000030517578 +106.29499816894531 +207.28900146484375 +185.81500244140625 +106.33470153808594 +207.09010314941406 +185.5399932861328 +105.7249984741211 +208.1999969482422 +186.47999572753906 +106.37999725341797 +206.63479614257812 +186.2100067138672 +107.54100036621094 +207.10000610351562 +187.11000061035156 +108.66000366210938 +208.63560485839844 +187.54730224609375 +109.4749984741211 +209.3701934814453 +188.66000366210938 +111.87000274658203 +208.50450134277344 +188.77149963378906 +110.83499908447266 +208.22000122070312 +189.38499450683594 +110.73500061035156 +209.22999572753906 +188.9499969482422 +110.95999908447266 +208.92999267578125 +188.42999267578125 +108.52519989013672 +207.9499969482422 +185.76150512695312 +106.5999984741211 +207.86000061035156 +185.0500030517578 +106.5509033203125 +208.13999938964844 +185.16000366210938 +106.27999877929688 +209.8699951171875 +186.2700958251953 +107.30000305175781 +210.5399932861328 +187.44000244140625 +108.19000244140625 +210.08999633789062 +187.6699981689453 +108.63999938964844 +210.9499969482422 +185.7949981689453 +108.52999877929688 +211.0399932861328 +186.2949981689453 +108.80979919433594 +210.48800659179688 +186.956298828125 +108.875 +210.36000061035156 +186.30999755859375 +108.73500061035156 +211.7227020263672 +187.94000244140625 +109.9801025390625 +211.3000030517578 +187.41000366210938 +109.4000015258789 +211.24000549316406 +187.39999389648438 +108.91999816894531 +209.32119750976562 +181.03790283203125 +105.98500061035156 +210.5449981689453 +181.72999572753906 +106.375 +210.58999633789062 +180.88499450683594 +106.05500030517578 +211.0800018310547 +181.69000244140625 +106.47000122070312 +210.71499633789062 +182.1300048828125 +107.19499969482422 +210.3446044921875 +181.7899932861328 +107.25499725341797 +212.49000549316406 +184.32000732421875 +108.7750015258789 +211.74000549316406 +189.19000244140625 +113.33000183105469 +212.8966064453125 +190.36000061035156 +114.32499694824219 +212.77999877929688 +189.55099487304688 +113.65180206298828 +212.50999450683594 +189.89010620117188 +113.5647964477539 +212.77999877929688 +189.94639587402344 +113.66999816894531 +212.94000244140625 +191.68499755859375 +113.0 +212.8300018310547 +189.8350067138672 +111.52999877929688 +206.72000122070312 +189.61000061035156 +113.90499877929688 +204.9008026123047 +189.32989501953125 +114.65010070800781 +205.0 +192.02859497070312 +114.74500274658203 +204.69900512695312 +190.8249969482422 +114.364501953125 +204.8800048828125 +190.94500732421875 +114.80000305175781 +204.75999450683594 +190.3699951171875 +114.47000122070312 +205.3000030517578 +190.0 +114.38999938964844 +198.77999877929688 +187.16940307617188 +113.24500274658203 +199.19960021972656 +187.625 +113.9198989868164 +199.9739990234375 +187.35000610351562 +113.78500366210938 +200.41000366210938 +187.4770050048828 +114.12999725341797 +200.9600067138672 +187.34759521484375 +114.37100219726562 +199.39999389648438 +186.8699951171875 +114.3740005493164 +198.77000427246094 +186.2100067138672 +113.80999755859375 +198.91000366210938 +186.64999389648438 +112.65499877929688 +199.03500366210938 +186.80999755859375 +113.06999969482422 +198.97999572753906 +186.40460205078125 +113.01789855957031 +199.4250030517578 +185.5449981689453 +112.91999816894531 +199.30499267578125 +185.9259033203125 +113.68000030517578 +199.70840454101562 +185.72999572753906 +114.2300033569336 +198.41000366210938 +184.97999572753906 +113.44499969482422 +199.22000122070312 +190.80999755859375 +113.48030090332031 +194.35069274902344 +187.98500061035156 +113.29499816894531 +194.8699951171875 +187.83770751953125 +113.67990112304688 +195.3000030517578 +188.993896484375 +113.94499969482422 +194.00999450683594 +187.74000549316406 +113.0000991821289 +194.32000732421875 +187.6199951171875 +113.23500061035156 +196.25 +188.77000427246094 +117.0199966430664 +195.82000732421875 +190.27000427246094 +117.23999786376953 +197.5399932861328 +191.66000366210938 +117.26000213623047 +199.24000549316406 +192.99839782714844 +118.04989624023438 +199.13999938964844 +193.76499938964844 +117.90489959716797 +198.63999938964844 +193.072998046875 +117.9749984741211 +199.55999755859375 +193.9199981689453 +118.54049682617188 +197.39999389648438 +192.13499450683594 +117.37000274658203 +198.360107421875 +192.25 +116.13159942626953 +198.42999267578125 +192.2100067138672 +116.37750244140625 +198.13499450683594 +192.42999267578125 +116.28500366210938 +198.13999938964844 +192.14999389648438 +116.43000030517578 +198.91000366210938 +192.33999633789062 +116.58000183105469 +198.77999877929688 +193.08999633789062 +116.7251968383789 +198.5399932861328 +193.0800018310547 +116.62069702148438 +209.16000366210938 +206.9550018310547 +120.86000061035156 +208.75999450683594 +206.86500549316406 +121.65139770507812 +208.72999572753906 +207.2801055908203 +122.37129974365234 +209.93499755859375 +208.24000549316406 +122.6614990234375 +210.77000427246094 +208.52000427246094 +122.73500061035156 +210.0500030517578 +207.97999572753906 +122.58499908447266 +210.8300018310547 +208.72000122070312 +122.98999786376953 +211.4499969482422 +214.48500061035156 +129.21499633789062 +211.38499450683594 +213.32000732421875 +129.8300018310547 +211.27999877929688 +213.94500732421875 +130.4600067138672 +211.7100067138672 +212.39999389648438 +130.8350067138672 +212.4600067138672 +212.05999755859375 +130.44500732421875 +213.22999572753906 +211.61830139160156 +130.21499633789062 +212.83999633789062 +211.19000244140625 +129.83999633789062 +213.2899932861328 +211.02000427246094 +132.66000366210938 +212.6199951171875 +211.75 +134.15499877929688 +212.2899932861328 +210.85000610351562 +134.97000122070312 +210.9600067138672 +209.8249969482422 +134.4600067138672 +211.3699951171875 +209.97900390625 +134.55999755859375 +211.3594970703125 +209.6300048828125 +134.88999938964844 +212.41000366210938 +210.24000549316406 +135.34710693359375 +210.27499389648438 +204.2100067138672 +133.27000427246094 +212.49639892578125 +204.470703125 +134.38499450683594 +211.64169311523438 +204.9385986328125 +135.2165985107422 +212.12010192871094 +205.52000427246094 +136.22000122070312 +210.6300048828125 +204.86000061035156 +135.36000061035156 +210.36000061035156 +204.2899932861328 +133.73500061035156 +211.45799255371094 +205.13999938964844 +134.89999389648438 +210.60000610351562 +205.52969360351562 +135.4250030517578 +210.0800018310547 +204.89999389648438 +134.86500549316406 +210.9550018310547 +205.3300018310547 +134.7949981689453 +211.11000061035156 +204.8596954345703 +135.82179260253906 +211.6199951171875 +204.97999572753906 +135.03500366210938 +211.72500610351562 +205.24000549316406 +135.08030700683594 +211.19000244140625 +205.55999755859375 +135.32000732421875 +206.61990356445312 +205.27000427246094 +135.28500366210938 +207.3300018310547 +205.3105926513672 +134.9250030517578 +208.48260498046875 +206.0050048828125 +135.22500610351562 +208.92999267578125 +206.26499938964844 +135.27499389648438 +208.02999877929688 +205.55499267578125 +135.0850067138672 +208.1273956298828 +205.55999755859375 +135.1199951171875 +208.75999450683594 +206.13999938964844 +135.49000549316406 +207.84500122070312 +203.83999633789062 +132.9499969482422 +207.63429260253906 +203.9091033935547 +133.77499389648438 +207.80999755859375 +203.87750244140625 +134.0845947265625 +207.3800048828125 +203.97000122070312 +134.10499572753906 +205.58999633789062 +203.30999755859375 +133.4499969482422 +206.27000427246094 +203.52000427246094 +133.81500244140625 +206.8699951171875 +204.1300048828125 +134.3800048828125 +205.80999755859375 +201.67860412597656 +134.0850067138672 +206.5800018310547 +202.9250030517578 +135.87579345703125 +205.63999938964844 +203.07000732421875 +137.0850067138672 +202.10000610351562 +200.82989501953125 +133.21499633789062 +202.3415069580078 +201.52000427246094 +132.84500122070312 +201.0301055908203 +200.62460327148438 +131.07870483398438 +202.05999755859375 +201.11599731445312 +131.72999572753906 +200.36000061035156 +202.50999450683594 +133.0399932861328 +200.9499969482422 +202.5865020751953 +132.8800048828125 +201.9499969482422 +203.4149932861328 +133.39500427246094 +201.88999938964844 +203.11000061035156 +133.51100158691406 +201.97000122070312 +204.1862030029297 +133.3350067138672 +202.61000061035156 +204.42979431152344 +133.918701171875 +201.3699951171875 +203.0800018310547 +132.78990173339844 +197.1699981689453 +201.03500366210938 +130.52999877929688 +196.5850067138672 +200.9199981689453 +130.97999572753906 +196.05020141601562 +201.24000549316406 +131.00999450683594 +196.6199951171875 +202.00900268554688 +131.9499969482422 +195.75 +201.86000061035156 +132.13499450683594 +195.46240234375 +201.375 +131.6239013671875 +195.33999633789062 +200.99000549316406 +131.30999755859375 +198.35000610351562 +205.02000427246094 +135.2917938232422 +199.36500549316406 +205.26010131835938 +135.2100067138672 +199.9949951171875 +205.8300018310547 +135.26199340820312 +199.95989990234375 +206.0449981689453 +135.60000610351562 +200.3699951171875 +205.8000030517578 +135.25160217285156 +200.29440307617188 +205.3300018310547 +135.13999938964844 +200.1999969482422 +205.9949951171875 +135.49000549316406 +200.75 +205.61000061035156 +135.26499938964844 +201.0449981689453 +205.63999938964844 +135.59190368652344 +201.10000610351562 +205.7050018310547 +135.9403076171875 +201.11000061035156 +205.55999755859375 +136.4499969482422 +200.85000610351562 +205.88999938964844 +136.6699981689453 +201.12860107421875 +205.5399932861328 +136.8300018310547 +200.4199981689453 +204.7949981689453 +134.8115997314453 +201.13999938964844 +207.10000610351562 +140.61929321289062 +200.74000549316406 +206.94000244140625 +141.66000366210938 +199.4199981689453 +205.97999572753906 +140.57020568847656 +199.97500610351562 +206.41000366210938 +139.875 +199.0399932861328 +204.52000427246094 +138.44419860839844 +199.13929748535156 +205.2899932861328 +138.91000366210938 +199.9499969482422 +205.68499755859375 +139.17999267578125 +199.24000549316406 +205.07000732421875 +137.36000061035156 +199.30999755859375 +204.6829071044922 +136.10499572753906 +197.71499633789062 +202.80999755859375 +133.58999633789062 +198.0850067138672 +202.6750030517578 +134.46229553222656 +199.1199951171875 +203.875 +134.77999877929688 +200.05059814453125 +204.89349365234375 +135.26499938964844 +200.66000366210938 +204.66000366210938 +134.83999633789062 +200.52999877929688 +204.32530212402344 +136.66009521484375 +200.7100067138672 +205.0800018310547 +136.45989990234375 +201.02999877929688 +205.22999572753906 +137.4075927734375 +200.860107421875 +205.7100067138672 +137.57000732421875 +201.45399475097656 +206.18739318847656 +138.03140258789062 +201.66000366210938 +206.83999633789062 +137.625 +201.8000030517578 +206.7100067138672 +137.3699951171875 +201.74000549316406 +207.68299865722656 +141.3000030517578 +202.5 +207.00999450683594 +141.8199005126953 +203.05499267578125 +207.47999572753906 +141.56500244140625 +203.31460571289062 +207.67999267578125 +141.61500549316406 +203.09170532226562 +206.34249877929688 +141.15980529785156 +203.17999267578125 +205.65249633789062 +141.4499969482422 +203.33999633789062 +205.77999877929688 +141.27000427246094 +205.13999938964844 +206.19000244140625 +140.98500061035156 +204.08999633789062 +205.97999572753906 +141.3249969482422 +202.8300018310547 +206.47000122070312 +140.51010131835938 +203.4149932861328 +207.56539916992188 +140.7899932861328 +203.1199951171875 +207.843505859375 +141.61880493164062 +203.19000244140625 +207.7449951171875 +141.6699981689453 +202.88699340820312 +207.24000549316406 +141.83009338378906 +202.4499969482422 +209.80990600585938 +141.97830200195312 +204.54379272460938 +212.55499267578125 +143.0388946533203 +203.13999938964844 +210.9499969482422 +143.0050048828125 +202.60009765625 +210.8800048828125 +141.57870483398438 +202.2104034423828 +209.59649658203125 +140.71499633789062 +200.72999572753906 +208.4949951171875 +139.59010314941406 +200.5500030517578 +207.85000610351562 +139.9499969482422 +203.66000366210938 +211.0399932861328 +141.64500427246094 +203.17990112304688 +211.28860473632812 +141.69500732421875 +202.625 +211.98500061035156 +142.25999450683594 +203.58999633789062 +212.31759643554688 +142.11500549316406 +204.98500061035156 +212.9134979248047 +142.36500549316406 +204.6999969482422 +212.88999938964844 +142.07179260253906 +203.92999267578125 +213.52000427246094 +141.69000244140625 +205.32000732421875 +214.6699981689453 +144.375 +204.52999877929688 +214.8699951171875 +143.1800994873047 +203.92880249023438 +215.7899932861328 +142.22500610351562 +200.72000122070312 +216.97000122070312 +142.77000427246094 +201.4600067138672 +217.1199951171875 +142.83990478515625 +201.25 +217.22000122070312 +142.77499389648438 +201.44000244140625 +216.9199981689453 +142.5500030517578 +202.8699951171875 +216.30999755859375 +142.8000030517578 +203.31500244140625 +215.6226043701172 +142.68699645996094 +202.53880310058594 +216.12879943847656 +143.11500549316406 +201.75999450683594 +216.2100067138672 +142.65499877929688 +201.6999969482422 +215.77999877929688 +143.11990356445312 +202.82000732421875 +216.94000244140625 +144.0 +202.75 +217.56900024414062 +143.9499969482422 +202.76010131835938 +217.59249877929688 +144.477294921875 +200.94000244140625 +216.7550048828125 +144.1501007080078 +200.2071075439453 +215.61000061035156 +143.37989807128906 +200.91000366210938 +215.80999755859375 +143.7100067138672 +199.23919677734375 +213.42999267578125 +142.4716033935547 +198.97999572753906 +213.2100067138672 +142.39999389648438 +198.85000610351562 +213.17100524902344 +142.83999633789062 +198.0666961669922 +212.8300018310547 +144.06500244140625 +198.14999389648438 +212.53030395507812 +144.45120239257812 +198.58999633789062 +213.37989807128906 +144.4499969482422 +199.25999450683594 +212.7050018310547 +144.3300018310547 +198.75 +213.02000427246094 +144.47500610351562 +198.88499450683594 +212.97000122070312 +144.7550048828125 +199.1999969482422 +213.24000549316406 +145.0 +196.15499877929688 +209.9149932861328 +141.1999969482422 +197.50999450683594 +212.7899932861328 +142.91650390625 +197.27000427246094 +213.72999572753906 +143.0749969482422 +197.27000427246094 +213.2458953857422 +142.65499877929688 +196.2779998779297 +212.4149932861328 +141.60000610351562 +196.22000122070312 +211.55999755859375 +141.5050048828125 +196.4499969482422 +212.10000610351562 +141.9600067138672 +198.42999267578125 +214.66000366210938 +144.47999572753906 +197.31500244140625 +216.02999877929688 +145.4698028564453 +197.0800018310547 +215.27999877929688 +145.9550018310547 +197.875 +215.8350067138672 +145.625 +197.9886932373047 +215.7550048828125 +145.22999572753906 +198.2449951171875 +216.3000030517578 +144.97000122070312 +198.3699951171875 +216.16000366210938 +144.6699981689453 +197.5800018310547 +215.97999572753906 +144.3986053466797 +197.5800018310547 +216.22999572753906 +144.50999450683594 +197.61500549316406 +216.80999755859375 +145.02000427246094 +196.52000427246094 +216.01010131835938 +144.8300018310547 +195.4600067138672 +214.9499969482422 +144.17999267578125 +195.83999633789062 +215.0800018310547 +144.27609252929688 +195.63999938964844 +214.80999755859375 +144.0399932861328 +197.06019592285156 +217.75840759277344 +145.22000122070312 +196.94000244140625 +216.6199951171875 +144.99000549316406 +196.9508056640625 +215.39990234375 +145.27999877929688 +196.05999755859375 +214.8350067138672 +145.13499450683594 +195.91000366210938 +215.1999969482422 +145.0500030517578 +195.63999938964844 +214.54010009765625 +144.17990112304688 +196.25 +212.55499267578125 +145.47000122070312 +198.67999267578125 +210.69000244140625 +144.625 +197.6699981689453 +210.08999633789062 +143.89990234375 +198.49000549316406 +209.91000366210938 +143.9550018310547 +198.32000732421875 +209.30999755859375 +143.48500061035156 +199.80999755859375 +209.98500061035156 +144.15499877929688 +199.92999267578125 +208.66000366210938 +143.78990173339844 +200.94000244140625 +209.60459899902344 +143.77999877929688 +201.37179565429688 +209.85000610351562 +143.6300048828125 +200.52999877929688 +208.87210083007812 +143.80999755859375 +200.1396026611328 +208.63999938964844 +142.92999267578125 +201.43899536132812 +209.5 +144.4058074951172 +201.69000244140625 +209.27499389648438 +143.90989685058594 +201.36019897460938 +209.0850067138672 +143.84500122070312 +201.5500030517578 +208.47999572753906 +144.1750030517578 +200.9822998046875 +212.67999267578125 +147.02000427246094 +201.3800048828125 +213.4199981689453 +146.90499877929688 +202.4499969482422 +213.40499877929688 +147.1649932861328 +201.9600067138672 +213.74319458007812 +147.19500732421875 +201.57000732421875 +213.5699005126953 +147.35009765625 +201.52999877929688 +213.55999755859375 +147.22850036621094 +200.2899932861328 +212.77000427246094 +147.8300018310547 +202.44000244140625 +213.8699951171875 +152.2050018310547 +202.10000610351562 +213.76980590820312 +152.0500030517578 +201.8699951171875 +212.88499450683594 +152.14129638671875 +201.13999938964844 +212.2100067138672 +153.89999389648438 +201.01539611816406 +211.60000610351562 +153.9322967529297 +201.15980529785156 +211.7667999267578 +153.75439453125 +201.60000610351562 +212.05999755859375 +154.30999755859375 +199.75 +213.32000732421875 +156.44859313964844 +199.69000244140625 +216.06500244140625 +154.95989990234375 +200.122802734375 +215.8699951171875 +155.625 +200.24000549316406 +216.1750030517578 +156.02999877929688 +200.97999572753906 +217.72999572753906 +156.0850067138672 +201.1750030517578 +216.95399475097656 +155.46429443359375 +200.94000244140625 +217.1300048828125 +155.0800018310547 +201.58009338378906 +220.00999450683594 +157.42010498046875 +201.38180541992188 +219.63499450683594 +157.91009521484375 +201.99000549316406 +219.6750030517578 +157.69000244140625 +202.0800018310547 +219.16000366210938 +157.48500061035156 +201.44000244140625 +217.4600067138672 +156.30499267578125 +201.125 +219.7050018310547 +156.47000122070312 +201.10000610351562 +223.2100067138672 +157.75 +201.00990295410156 +221.7899932861328 +157.10000610351562 +199.97000122070312 +221.40330505371094 +157.04989624023438 +200.3249969482422 +219.6649932861328 +157.7100067138672 +200.15499877929688 +219.86500549316406 +157.82550048828125 +200.69500732421875 +219.5800018310547 +157.57989501953125 +206.58560180664062 +219.80999755859375 +157.94500732421875 +205.1199951171875 +219.39999389648438 +157.8699951171875 +209.54010009765625 +219.5 +154.6300048828125 +207.9499969482422 +219.7270050048828 +152.88499450683594 +207.875 +219.2100067138672 +153.39500427246094 +208.08999633789062 +220.67739868164062 +154.27499389648438 +208.2100067138672 +220.8502960205078 +154.35169982910156 +208.19000244140625 +221.6999969482422 +153.72999572753906 +207.86000061035156 +220.4499969482422 +153.27999877929688 +212.3000030517578 +220.3000030517578 +156.08140563964844 +211.47500610351562 +220.6199951171875 +156.36500549316406 +210.92030334472656 +220.9300994873047 +157.093505859375 +210.81809997558594 +220.30499267578125 +157.2053985595703 +211.58999633789062 +220.2501983642578 +156.9550018310547 +211.94500732421875 +219.88999938964844 +156.8874969482422 +212.41000366210938 +219.8800048828125 +157.24000549316406 +213.73500061035156 +221.8300018310547 +160.6300048828125 +213.8800048828125 +222.7093048095703 +159.80499267578125 +214.10000610351562 +222.99960327148438 +159.37969970703125 +212.36000061035156 +223.89999389648438 +158.30999755859375 +212.0399932861328 +223.8699951171875 +158.27999877929688 +210.8365020751953 +223.05499267578125 +158.22000122070312 +209.67039489746094 +222.9499969482422 +158.3188018798828 +208.94039916992188 +222.50999450683594 +157.8249969482422 +209.4499969482422 +223.2100067138672 +158.3000946044922 +209.94000244140625 +223.47999572753906 +158.24000549316406 +209.27999877929688 +221.1300048828125 +159.07000732421875 +209.87069702148438 +219.77999877929688 +159.0800018310547 +210.8300018310547 +220.94000244140625 +159.72999572753906 +209.8350067138672 +220.55999755859375 +159.5850067138672 +209.94500732421875 +220.47000122070312 +159.5399932861328 +209.60499572753906 +219.69500732421875 +159.89500427246094 +210.03500366210938 +219.33999633789062 +160.00010681152344 +209.91000366210938 +222.88999938964844 +163.06869506835938 +207.80499267578125 +222.3699951171875 +163.35000610351562 +207.8000030517578 +222.39999389648438 +163.27000427246094 +208.9156036376953 +222.61329650878906 +162.56500244140625 +209.7324981689453 +222.41000366210938 +162.81500244140625 +209.88999938964844 +222.58070373535156 +162.85000610351562 +211.11000061035156 +222.47000122070312 +162.8300018310547 +212.00999450683594 +220.25999450683594 +162.41000366210938 +212.97999572753906 +221.63470458984375 +162.59669494628906 +212.0800018310547 +222.0850067138672 +163.2747039794922 +212.6199951171875 +222.2899932861328 +163.44769287109375 +212.60000610351562 +222.60000610351562 +163.72999572753906 +212.5749969482422 +222.05999755859375 +164.05999755859375 +212.4199981689453 +222.27999877929688 +164.10499572753906 +211.7899932861328 +224.37559509277344 +167.35989379882812 +210.8249969482422 +224.52999877929688 +166.4949951171875 +210.63499450683594 +225.26010131835938 +166.47869873046875 +211.1649932861328 +225.5800018310547 +166.1822967529297 +211.40499877929688 +226.10000610351562 +165.68150329589844 +211.16000366210938 +225.7899932861328 +165.09500122070312 +211.0749969482422 +224.99000549316406 +164.8800048828125 +208.02999877929688 +225.30560302734375 +163.72000122070312 +208.76499938964844 +225.8800048828125 +164.75469970703125 +208.8406982421875 +225.9949951171875 +164.97000122070312 +209.0 +225.7550048828125 +165.08009338378906 +209.0 +225.4499969482422 +164.82000732421875 +209.1999053955078 +225.33349609375 +164.40330505371094 +208.5399932861328 +225.6300048828125 +164.07000732421875 +210.1699981689453 +226.86000061035156 +171.57839965820312 +211.42999267578125 +226.67999267578125 +171.38499450683594 +210.67999267578125 +226.60000610351562 +171.38499450683594 +210.67269897460938 +225.9600067138672 +170.52499389648438 +211.375 +226.8350067138672 +170.91180419921875 +210.17999267578125 +226.2969970703125 +170.1999053955078 +209.00999450683594 +226.3000030517578 +170.5500030517578 +212.0850067138672 +225.27999877929688 +169.96490478515625 +210.1199951171875 +224.2050018310547 +170.37860107421875 +209.58999633789062 +223.36000061035156 +170.39500427246094 +210.35000610351562 +223.02999877929688 +170.9022979736328 +210.0384979248047 +223.1999969482422 +171.0050048828125 +210.3249969482422 +223.19000244140625 +170.77999877929688 +210.22000122070312 +223.1699981689453 +171.33999633789062 +209.9499969482422 +222.6204071044922 +172.92999267578125 +210.44000244140625 +223.75999450683594 +173.11500549316406 +211.38999938964844 +223.67999267578125 +173.860107421875 +210.9550018310547 +223.72000122070312 +173.72000122070312 +211.27999877929688 +223.94000244140625 +173.2989959716797 +210.9949951171875 +223.98500061035156 +173.28500366210938 +210.06100463867188 +223.99000549316406 +173.1114044189453 +209.9542999267578 +223.3699951171875 +172.08999633789062 +210.85000610351562 +224.52000427246094 +172.16009521484375 +211.00999450683594 +224.8699951171875 +172.15469360351562 +211.19000244140625 +225.9250030517578 +172.64999389648438 +210.93499755859375 +225.96499633789062 +172.4149932861328 +210.9499969482422 +225.9149932861328 +172.07000732421875 +211.22000122070312 +226.1199951171875 +172.38999938964844 +214.64500427246094 +227.94000244140625 +173.08009338378906 +213.47000122070312 +227.75 +172.6981964111328 +213.31959533691406 +228.4600067138672 +172.02940368652344 +213.67999267578125 +228.93089294433594 +172.55479431152344 +213.25999450683594 +229.35000610351562 +172.70480346679688 +212.5800018310547 +229.25990295410156 +171.9600067138672 +212.5399932861328 +229.30999755859375 +171.4600067138672 +213.2655029296875 +227.25 +166.0847930908203 +213.477294921875 +226.9600067138672 +167.86000061035156 +213.27999877929688 +226.44540405273438 +167.5509033203125 +214.41119384765625 +227.50999450683594 +168.26499938964844 +213.7100067138672 +227.22000122070312 +167.90029907226562 +214.18499755859375 +227.82000732421875 +167.88499450683594 +214.38999938964844 +227.52000427246094 +167.00999450683594 +212.9351043701172 +227.96499633789062 +169.1300048828125 +213.14999389648438 +227.38999938964844 +169.52330017089844 +213.5 +227.69000244140625 +168.6199951171875 +214.125 +228.2906951904297 +169.03500366210938 +214.40499877929688 +228.37899780273438 +170.65750122070312 +214.13999938964844 +228.10000610351562 +170.7100067138672 +214.30999755859375 +228.27000427246094 +170.8300018310547 +214.4600067138672 +230.85000610351562 +172.08999633789062 +215.25999450683594 +232.03500366210938 +172.67849731445312 +214.33999633789062 +232.00999450683594 +172.94500732421875 +214.7899932861328 +232.0050048828125 +173.43240356445312 +214.73500061035156 +232.24000549316406 +173.4550018310547 +214.80999755859375 +231.97999572753906 +173.6501007080078 +213.75999450683594 +232.24899291992188 +173.77999877929688 +214.58529663085938 +231.42140197753906 +174.46189880371094 +214.50999450683594 +232.125 +174.06809997558594 +214.3896026611328 +232.25 +174.3800048828125 +214.1699981689453 +231.7550048828125 +173.8843994140625 +213.88999938964844 +231.7899932861328 +173.64999389648438 +213.5 +231.74249267578125 +173.7949981689453 +213.9600067138672 +231.4499969482422 +173.49000549316406 +214.52000427246094 +233.47000122070312 +174.9250030517578 +214.43499755859375 +233.22000122070312 +174.92999267578125 +214.5399932861328 +232.75999450683594 +175.0299072265625 +213.64500427246094 +232.82000732421875 +175.2100067138672 +213.8000030517578 +232.9199981689453 +175.47500610351562 +213.42999267578125 +232.5854949951172 +176.15499877929688 +214.0399932861328 +232.80999755859375 +176.75 +213.0500030517578 +231.51499938964844 +178.13999938964844 +211.89999389648438 +230.69970703125 +175.85989379882812 +212.0 +231.1750030517578 +176.33999633789062 +212.1999969482422 +231.6999969482422 +176.19529724121094 +211.9600067138672 +231.28500366210938 +176.2050018310547 +211.88999938964844 +231.31149291992188 +175.8249969482422 +211.35000610351562 +231.0 +175.50999450683594 +210.61000061035156 +230.32000732421875 +178.4600067138672 +209.71499633789062 +230.13999938964844 +178.26519775390625 +210.1199951171875 +230.47999572753906 +178.80499267578125 +209.75650024414062 +230.35499572753906 +179.00669860839844 +209.85499572753906 +230.66000366210938 +179.55499267578125 +208.52000427246094 +229.49000549316406 +178.58999633789062 +209.02000427246094 +230.25999450683594 +179.2899932861328 +208.8424072265625 +232.5399932861328 +181.57000732421875 +208.28280639648438 +233.1699981689453 +179.889892578125 +208.95449829101562 +236.30999755859375 +181.3780059814453 +208.6649932861328 +234.4550018310547 +179.02000427246094 +208.61000061035156 +234.3699951171875 +177.36500549316406 +208.5699005126953 +233.4499969482422 +177.41969299316406 +207.61000061035156 +234.11000061035156 +177.85000610351562 +205.36000061035156 +219.09500122070312 +174.97500610351562 +203.44000244140625 +215.27499389648438 +174.77999877929688 +202.75 +216.05999755859375 +175.82000732421875 +201.9824981689453 +214.33999633789062 +173.10989379882812 +203.5500030517578 +214.24920654296875 +173.2799072265625 +203.19000244140625 +214.8800048828125 +173.75 +202.27000427246094 +214.80999755859375 +173.58999633789062 +206.75999450683594 +213.38999938964844 +177.9499969482422 +205.77000427246094 +211.75100708007812 +177.8498992919922 +203.93499755859375 +213.3509979248047 +178.9250030517578 +204.14999389648438 +212.7899932861328 +179.02999877929688 +203.42999267578125 +212.42739868164062 +179.27000427246094 +202.3249969482422 +212.44000244140625 +179.31390380859375 +203.33999633789062 +211.72000122070312 +179.97000122070312 +204.52999877929688 +214.69000244140625 +178.24000549316406 +204.6300048828125 +214.97999572753906 +176.88499450683594 +203.7100067138672 +215.3800048828125 +177.92999267578125 +204.03500366210938 +215.07000732421875 +178.02999877929688 +203.8699951171875 +214.14999389648438 +178.50999450683594 +203.3350067138672 +213.86000061035156 +178.77520751953125 +202.92999267578125 +213.80999755859375 +178.25999450683594 +210.75999450683594 +215.47000122070312 +178.0399932861328 +214.22500610351562 +217.50999450683594 +178.14999389648438 +214.49989318847656 +218.6750030517578 +178.23500061035156 +214.5399932861328 +220.80999755859375 +178.42999267578125 +214.6024932861328 +221.44500732421875 +179.22999572753906 +213.875 +221.1999969482422 +179.6649932861328 +213.25 +222.3300018310547 +179.41000366210938 +218.27000427246094 +224.6300048828125 +182.47999572753906 +219.62899780273438 +223.1903076171875 +181.52999877929688 +219.9149932861328 +222.78970336914062 +181.14999389648438 +218.7100067138672 +221.66990661621094 +179.97000122070312 +219.5 +221.39999389648438 +179.42010498046875 +219.3000946044922 +221.47999572753906 +179.47000122070312 +220.1300048828125 +223.1750030517578 +180.8699951171875 +222.7816925048828 +222.6197052001953 +182.19500732421875 +224.36000061035156 +222.8863067626953 +183.01499938964844 +228.1999969482422 +222.52999877929688 +182.90809631347656 +228.6750030517578 +222.4499969482422 +181.88499450683594 +229.2899932861328 +222.0850067138672 +182.61500549316406 +228.8300018310547 +222.44000244140625 +182.69500732421875 +229.3699951171875 +222.69000244140625 +182.75 +226.77499389648438 +221.52000427246094 +183.3455047607422 +227.47000122070312 +221.72000122070312 +183.1800994873047 +228.72999572753906 +222.11500549316406 +183.73500061035156 +228.10000610351562 +221.67999267578125 +183.23550415039062 +227.73500061035156 +220.72999572753906 +182.89999389648438 +227.64999389648438 +221.23500061035156 +182.16000366210938 +227.2050018310547 +221.3699951171875 +182.0850067138672 +228.57000732421875 +220.82000732421875 +180.92999267578125 +229.72999572753906 +221.08999633789062 +182.0146942138672 +229.77999877929688 +221.67999267578125 +182.27499389648438 +229.77499389648438 +222.1199951171875 +182.24000549316406 +229.57000732421875 +221.9698944091797 +183.06500244140625 +229.18299865722656 +221.86500549316406 +182.7845001220703 +229.64999389648438 +221.44000244140625 +183.10000610351562 +231.80999755859375 +222.60000610351562 +181.41099548339844 +232.2899932861328 +224.2010040283203 +180.13180541992188 +233.09500122070312 +224.32000732421875 +180.0500030517578 +232.4550018310547 +224.64999389648438 +180.99000549316406 +232.9250030517578 +224.08999633789062 +181.32989501953125 +233.5850067138672 +224.38499450683594 +181.26499938964844 +233.3300018310547 +224.55499267578125 +181.57000732421875 +232.2100067138672 +229.3350067138672 +182.5800018310547 +231.74020385742188 +228.6009979248047 +181.3800048828125 +232.00999450683594 +230.4550018310547 +181.14349365234375 +232.92730712890625 +232.14999389648438 +182.1649932861328 +232.72999572753906 +232.47000122070312 +181.52499389648438 +232.94500732421875 +231.3699951171875 +181.9600067138672 +232.8300018310547 +230.88999938964844 +182.0 +232.1699981689453 +232.2301025390625 +179.92010498046875 +231.07000732421875 +231.39999389648438 +179.5050048828125 +230.74000549316406 +230.00999450683594 +178.92999267578125 +230.57000732421875 +230.19000244140625 +179.70010375976562 +230.85000610351562 +230.41000366210938 +180.17999267578125 +231.36000061035156 +230.76499938964844 +179.97000122070312 +231.64999389648438 +231.05999755859375 +180.44000244140625 +230.66000366210938 +230.2899932861328 +182.67999267578125 +230.86000061035156 +230.16009521484375 +181.1519012451172 +230.67999267578125 +230.3000030517578 +181.7657928466797 +231.07000732421875 +230.8197021484375 +181.49920654296875 +231.14500427246094 +230.60000610351562 +181.76210021972656 +231.22500610351562 +231.3249969482422 +182.19500732421875 +230.8800048828125 +231.4199981689453 +181.97999572753906 +231.8300018310547 +228.76010131835938 +178.66490173339844 +231.32260131835938 +228.72000122070312 +178.27749633789062 +231.30990600585938 +228.55999755859375 +177.53990173339844 +230.625 +228.07000732421875 +176.69509887695312 +230.0500030517578 +227.99000549316406 +176.5749053955078 +230.18499755859375 +227.50999450683594 +176.33250427246094 +230.5399932861328 +228.02000427246094 +175.64999389648438 +226.7200927734375 +222.47500610351562 +170.30999755859375 +227.3350067138672 +223.3699951171875 +172.4250030517578 +227.1345977783203 +224.14999389648438 +174.0500030517578 +226.2949981689453 +224.2100067138672 +173.47500610351562 +225.99009704589844 +223.32000732421875 +172.8249969482422 +226.44500732421875 +223.97500610351562 +174.5800018310547 +225.9600067138672 +223.80999755859375 +175.38999938964844 +225.57989501953125 +222.3074951171875 +176.47500610351562 +225.1300048828125 +221.58999633789062 +174.96499633789062 +224.8300018310547 +221.25999450683594 +174.22569274902344 +224.1750030517578 +220.9499969482422 +174.26499938964844 +224.22999572753906 +221.6750030517578 +174.7449951171875 +224.8800048828125 +222.02000427246094 +174.80189514160156 +224.91000366210938 +221.9499969482422 +174.9709930419922 +227.9499969482422 +225.3625030517578 +176.32000732421875 +228.05999755859375 +227.7008056640625 +178.1300048828125 +227.16929626464844 +226.87139892578125 +177.00579833984375 +228.61000061035156 +227.55999755859375 +178.2949981689453 +227.8699951171875 +228.1300048828125 +178.11500549316406 +227.85000610351562 +228.8300018310547 +178.0601043701172 +227.75 +228.83999633789062 +178.02000427246094 +228.80999755859375 +228.52000427246094 +178.99000549316406 +228.56500244140625 +229.42010498046875 +181.22140502929688 +228.5399932861328 +228.26300048828125 +181.5240936279297 +228.43499755859375 +228.3350067138672 +181.0 +227.88499450683594 +228.50990295410156 +181.33990478515625 +227.59840393066406 +228.77000427246094 +181.03500366210938 +227.14999389648438 +227.89500427246094 +179.83999633789062 +226.5 +227.94500732421875 +180.97999572753906 +226.9615936279297 +228.03500366210938 +180.8800048828125 +227.57049560546875 +228.1804962158203 +181.68499755859375 +228.11160278320312 +227.85000610351562 +181.6199951171875 +228.3592071533203 +227.7989044189453 +181.81500244140625 +228.56820678710938 +228.2949981689453 +182.02549743652344 +229.3000030517578 +228.72000122070312 +181.6999969482422 +230.01499938964844 +229.15989685058594 +181.05999755859375 +229.5740966796875 +228.8249969482422 +181.58999633789062 +229.8699951171875 +228.69000244140625 +181.40420532226562 +229.83999633789062 +228.7050018310547 +181.93499755859375 +230.625 +229.10000610351562 +182.22259521484375 +230.13250732421875 +228.64999389648438 +181.6645965576172 +230.44000244140625 +229.0500030517578 +181.60000610351562 +230.41580200195312 +229.9969940185547 +177.69500732421875 +230.9499969482422 +231.7050018310547 +179.156494140625 +232.2899932861328 +232.42999267578125 +179.69000244140625 +233.0 +231.6790008544922 +179.91419982910156 +232.91920471191406 +232.02499389648438 +180.82969665527344 +232.97500610351562 +231.61000061035156 +180.0800018310547 +232.49000549316406 +231.55999755859375 +180.1999969482422 +232.80960083007812 +229.6649932861328 +175.06500244140625 +232.9600067138672 +228.92999267578125 +174.77499389648438 +232.5 +228.50999450683594 +174.14999389648438 +232.02999877929688 +228.4499969482422 +173.52000427246094 +232.17999267578125 +228.66000366210938 +173.55670166015625 +232.3542938232422 +228.93499755859375 +174.0399932861328 +232.27000427246094 +229.0500030517578 +174.27999877929688 +230.60000610351562 +224.9600067138672 +170.63360595703125 +227.82899475097656 +223.25 +169.05999755859375 +227.85000610351562 +223.74859619140625 +167.93499755859375 +228.41000366210938 +225.02999877929688 +169.23500061035156 +228.39999389648438 +225.16000366210938 +169.1981964111328 +228.94000244140625 +225.52000427246094 +170.2949981689453 +229.7100067138672 +225.3300018310547 +170.75 +236.8300018310547 +226.42999267578125 +171.35000610351562 +236.01100158691406 +225.61000061035156 +170.70590209960938 +236.49000549316406 +225.6407928466797 +171.52499389648438 +237.4272003173828 +225.625 +170.7834930419922 +236.91000366210938 +224.7100067138672 +169.36000061035156 +237.15499877929688 +224.8800048828125 +169.36500549316406 +238.49000549316406 +226.0 +170.6300048828125 +237.69000244140625 +233.1999969482422 +170.8614959716797 +237.39999389648438 +233.41000366210938 +170.8000030517578 +237.16000366210938 +233.51499938964844 +170.46420288085938 +238.0399932861328 +234.4199981689453 +170.4499969482422 +238.05999755859375 +235.1699981689453 +170.41220092773438 +238.70449829101562 +234.95010375976562 +170.90499877929688 +239.7100067138672 +235.69000244140625 +171.64999389648438 +239.28500366210938 +234.0762939453125 +165.13729858398438 +239.80499267578125 +233.03500366210938 +166.08999633789062 +238.77000427246094 +233.72000122070312 +166.36549377441406 +239.625 +232.97999572753906 +166.5850067138672 +239.1199951171875 +232.9499969482422 +166.76010131835938 +239.9250030517578 +232.87669372558594 +167.09500122070312 +239.6699981689453 +232.32000732421875 +167.0399932861328 +239.22999572753906 +235.36000061035156 +170.25999450683594 +238.6999969482422 +237.33009338378906 +169.9698944091797 +237.72999572753906 +236.60000610351562 +170.1649932861328 +237.80580139160156 +236.1342010498047 +169.86500549316406 +237.1649932861328 +236.50010681152344 +169.71499633789062 +237.11000061035156 +236.1699981689453 +169.14500427246094 +237.9199981689453 +235.86000061035156 +168.3699951171875 +236.3101043701172 +235.8800048828125 +168.0800018310547 +236.22500610351562 +236.17999267578125 +167.7550048828125 +236.0 +237.19000244140625 +168.7050018310547 +237.75 +237.76499938964844 +168.0850067138672 +234.52859497070312 +237.8000030517578 +168.2449951171875 +234.30999755859375 +238.23500061035156 +170.23989868164062 +234.35000610351562 +238.22999572753906 +170.7584991455078 +228.10800170898438 +233.86000061035156 +177.64999389648438 +227.0399932861328 +232.5850067138672 +178.61419677734375 +227.7386016845703 +231.7100067138672 +177.99000549316406 +226.80499267578125 +231.56460571289062 +178.00509643554688 +227.05999755859375 +231.1699981689453 +176.27499389648438 +226.18499755859375 +229.64199829101562 +176.72500610351562 +226.77999877929688 +230.36000061035156 +177.3300018310547 +228.94000244140625 +229.61000061035156 +177.2550048828125 +228.74000549316406 +230.94000244140625 +178.09500122070312 +228.61000061035156 +230.8498992919922 +177.55810546875 +229.47250366210938 +231.27000427246094 +177.0941925048828 +229.4600067138672 +231.22999572753906 +177.5749969482422 +229.85000610351562 +230.08270263671875 +177.1199951171875 +230.02000427246094 +229.9550018310547 +177.08999633789062 +234.07000732421875 +229.0500030517578 +177.77499389648438 +234.09500122070312 +229.0500030517578 +177.6750030517578 +233.9694061279297 +228.6750030517578 +178.11000061035156 +233.23500061035156 +228.52999877929688 +177.52499389648438 +233.5399932861328 +227.6300048828125 +177.4700927734375 +233.77549743652344 +227.7635955810547 +177.68499755859375 +234.05999755859375 +228.11000061035156 +177.7899932861328 +236.21499633789062 +231.06500244140625 +175.48899841308594 +236.82000732421875 +232.84970092773438 +177.02169799804688 +236.57000732421875 +231.95030212402344 +177.5850067138672 +235.75999450683594 +231.3350067138672 +177.27000427246094 +235.63999938964844 +231.5399932861328 +177.52499389648438 +235.97000122070312 +231.2624053955078 +177.19500732421875 +236.75999450683594 +231.44000244140625 +177.77999877929688 +239.52999877929688 +235.1898956298828 +176.31500244140625 +239.5928955078125 +235.64500427246094 +176.13999938964844 +239.19500732421875 +235.4149932861328 +175.26499938964844 +239.08560180664062 +234.8300018310547 +175.14999389648438 +238.92999267578125 +234.91000366210938 +174.77499389648438 +238.93829345703125 +234.41000366210938 +174.75 +238.13999938964844 +234.02000427246094 +174.8300018310547 +239.6300048828125 +230.41000366210938 +170.1199951171875 +239.47999572753906 +230.25999450683594 +170.40499877929688 +239.67430114746094 +230.96429443359375 +169.87840270996094 +239.52000427246094 +231.08999633789062 +170.23500061035156 +239.55999755859375 +231.37989807128906 +170.19580078125 +239.2628936767578 +231.41000366210938 +171.18850708007812 +238.97000122070312 +231.63999938964844 +170.2100067138672 +237.55999755859375 +231.85499572753906 +175.77490234375 +238.19000244140625 +232.8000030517578 +176.2550048828125 +237.94000244140625 +232.8800048828125 +176.25999450683594 +237.8800048828125 +232.63999938964844 +176.6199951171875 +237.8018035888672 +231.92999267578125 +176.55499267578125 +237.4499969482422 +231.68499755859375 +176.34500122070312 +237.85000610351562 +231.2100067138672 +176.27999877929688 +241.14999389648438 +233.39999389648438 +177.7050018310547 +242.27999877929688 +233.23019409179688 +176.3000030517578 +244.52000427246094 +233.61000061035156 +176.0677032470703 +245.24380493164062 +232.72000122070312 +175.88499450683594 +245.48849487304688 +232.44000244140625 +175.59500122070312 +245.61000061035156 +231.83999633789062 +176.31500244140625 +245.2899932861328 +231.60000610351562 +176.5019073486328 +252.67160034179688 +230.27999877929688 +175.4199981689453 +255.789794921875 +229.22500610351562 +175.46009826660156 +253.72000122070312 +228.52999877929688 +182.1999969482422 +254.5928955078125 +228.60499572753906 +182.9949951171875 +255.24000549316406 +228.1300048828125 +182.68499755859375 +255.7899932861328 +227.93499755859375 +183.26010131835938 +256.0899963378906 +227.6199951171875 +183.61000061035156 +256.6173095703125 +222.35000610351562 +180.6522979736328 +256.1000061035156 +223.2899932861328 +180.21499633789062 +255.72689819335938 +222.64999389648438 +179.485595703125 +254.6699981689453 +221.85000610351562 +178.69000244140625 +254.63999938964844 +221.02000427246094 +177.89500427246094 +254.16990661621094 +220.17649841308594 +178.10000610351562 +254.52999877929688 +220.74000549316406 +178.4499969482422 +252.6219940185547 +221.13999938964844 +178.4949951171875 +252.1199951171875 +221.139892578125 +178.3542022705078 +252.1649932861328 +220.88999938964844 +176.2449951171875 +251.49000549316406 +220.9199981689453 +177.12010192871094 +251.76499938964844 +220.0850067138672 +176.72000122070312 +251.38999938964844 +219.77999877929688 +177.05999755859375 +252.24000549316406 +220.2100067138672 +176.8800048828125 +254.0 +219.75990295410156 +177.14500427246094 +253.50010681152344 +219.8300018310547 +178.0301055908203 +252.53030395507812 +219.80999755859375 +179.26510620117188 +253.5 +218.8699951171875 +177.9799041748047 +254.55999755859375 +217.02999877929688 +177.20989990234375 +256.9599914550781 +217.47000122070312 +177.0749969482422 +256.94000244140625 +218.1300048828125 +177.67999267578125 +255.02000427246094 +218.9149932861328 +175.58999633789062 +255.9700927734375 +219.44000244140625 +176.7449951171875 +255.6649932861328 +219.97500610351562 +176.52999877929688 +256.5199890136719 +220.39999389648438 +177.15499877929688 +256.55499267578125 +220.19000244140625 +177.7342987060547 +255.64500427246094 +220.27000427246094 +177.68499755859375 +255.4600067138672 +219.8000030517578 +178.19000244140625 +254.2198944091797 +221.4300994873047 +183.375 +253.47000122070312 +220.67630004882812 +182.3249969482422 +253.66000366210938 +221.36129760742188 +182.02999877929688 +253.39999389648438 +221.77000427246094 +181.9031982421875 +254.57000732421875 +221.51499938964844 +181.7100067138672 +253.99000549316406 +221.74000549316406 +180.89500427246094 +254.35000610351562 +222.1699981689453 +181.82000732421875 +254.88619995117188 +218.91000366210938 +184.73989868164062 +254.22000122070312 +218.7449951171875 +186.30990600585938 +254.53509521484375 +219.3300018310547 +186.73500061035156 +253.73500061035156 +219.25999450683594 +185.625 +253.33999633789062 +219.24949645996094 +186.2725067138672 +253.9499969482422 +219.5968017578125 +185.88999938964844 +254.55999755859375 +219.55999755859375 +186.55999755859375 +256.1614074707031 +219.42999267578125 +186.65499877929688 +255.52450561523438 +219.2386932373047 +186.55999755859375 +256.1600036621094 +221.14999389648438 +186.60499572753906 +256.1404113769531 +221.5399932861328 +187.57000732421875 +256.4849853515625 +221.9600067138672 +187.48440551757812 +255.94000244140625 +220.875 +187.18350219726562 +255.41000366210938 +220.60000610351562 +187.1699981689453 +256.2200927734375 +220.69009399414062 +190.1049041748047 +257.1650085449219 +220.52999877929688 +189.85499572753906 +257.3450012207031 +222.2899932861328 +189.2100067138672 +257.4100036621094 +222.47000122070312 +189.11929321289062 +257.8800048828125 +221.97000122070312 +188.87510681152344 +257.510009765625 +221.9149932861328 +189.18499755859375 +257.1400146484375 +222.41000366210938 +188.9199981689453 +257.8500061035156 +223.49000549316406 +188.94369506835938 +258.510009765625 +222.5863037109375 +189.47390747070312 +258.5487060546875 +222.1800994873047 +188.7001953125 +258.30999755859375 +220.38999938964844 +187.17750549316406 +258.3699951171875 +220.21310424804688 +187.47500610351562 +257.9200134277344 +219.64999389648438 +187.3249969482422 +258.0150146484375 +219.49000549316406 +187.62100219726562 +257.7799987792969 +218.3300018310547 +185.5 +257.5513000488281 +219.10879516601562 +185.9698944091797 +257.1300048828125 +219.60499572753906 +186.92999267578125 +256.55999755859375 +220.24000549316406 +186.14990234375 +256.18499755859375 +221.1699981689453 +185.58999633789062 +256.510009765625 +220.67999267578125 +185.80999755859375 +256.6499938964844 +220.8800048828125 +185.52999877929688 +256.67999267578125 +221.4669952392578 +188.01510620117188 +256.3789978027344 +221.25 +185.24000549316406 +256.3384094238281 +221.07000732421875 +185.47000122070312 +255.88999938964844 +221.17999267578125 +185.90980529785156 +256.06988525390625 +221.13499450683594 +185.89500427246094 +256.0199890136719 +221.1999969482422 +185.5863037109375 +256.489990234375 +221.8000030517578 +184.9600067138672 +257.8399963378906 +223.18499755859375 +189.0449981689453 +258.0400085449219 +223.97999572753906 +188.27000427246094 +258.20001220703125 +225.02999877929688 +188.18499755859375 +257.92498779296875 +225.87669372558594 +188.14999389648438 +257.9150085449219 +226.61000061035156 +188.42239379882812 +258.25 +225.39999389648438 +188.58999633789062 +258.0299987792969 +225.1999969482422 +189.07000732421875 +254.97999572753906 +222.6999969482422 +194.05499267578125 +254.89500427246094 +223.10000610351562 +193.73500061035156 +253.84500122070312 +224.16299438476562 +193.85000610351562 +253.4575958251953 +223.86000061035156 +192.61000061035156 +253.55999755859375 +226.27000427246094 +192.875 +253.89999389648438 +227.0449981689453 +193.1199951171875 +253.97999572753906 +227.6199951171875 +192.2949981689453 +255.17999267578125 +226.54879760742188 +195.2550048828125 +249.41000366210938 +220.52000427246094 +188.5998992919922 +248.61000061035156 +220.16000366210938 +189.14999389648438 +247.80999755859375 +219.02000427246094 +188.16000366210938 +247.16000366210938 +218.61000061035156 +187.72000122070312 +246.1649932861328 +217.80299377441406 +186.39999389648438 +245.27999877929688 +216.17999267578125 +183.13999938964844 +246.37600708007812 +220.11000061035156 +188.49000549316406 +248.59030151367188 +220.16000366210938 +188.27499389648438 +249.17999267578125 +220.1699981689453 +188.43179321289062 +249.1042022705078 +220.0500030517578 +188.5500030517578 +249.1461944580078 +220.52499389648438 +187.9250030517578 +248.32000732421875 +220.1199951171875 +187.80259704589844 +247.58999633789062 +220.0 +188.32000732421875 +247.02000427246094 +216.4250030517578 +182.38499450683594 +246.21400451660156 +216.4949951171875 +181.5500030517578 +247.38999938964844 +218.3000030517578 +183.43629455566406 +247.79800415039062 +218.9199981689453 +183.22500610351562 +247.48500061035156 +217.55999755859375 +182.17999267578125 +248.4199981689453 +217.48500061035156 +181.89990234375 +247.85000610351562 +216.44000244140625 +180.07000732421875 +250.85000610351562 +216.1999969482422 +182.36990356445312 +249.85989379882812 +215.44000244140625 +181.71090698242188 +249.77499389648438 +215.42010498046875 +180.69020080566406 +248.0904998779297 +213.61500549316406 +178.17999267578125 +249.64700317382812 +214.8000030517578 +179.79490661621094 +249.9199981689453 +215.18099975585938 +180.16000366210938 +249.42999267578125 +215.6300048828125 +179.8699951171875 +247.50999450683594 +217.5749969482422 +182.41000366210938 +248.23500061035156 +216.75999450683594 +182.32139587402344 +247.72000122070312 +215.5 +180.96499633789062 +247.22000122070312 +215.52999877929688 +182.3300018310547 +245.66000366210938 +213.17999267578125 +180.33999633789062 +246.5500030517578 +214.07000732421875 +180.78500366210938 +247.42999267578125 +214.47000122070312 +181.81100463867188 +249.5601043701172 +213.9600067138672 +183.27999877929688 +248.47999572753906 +211.58999633789062 +180.8719940185547 +250.29649353027344 +213.05999755859375 +182.6300048828125 +250.81500244140625 +212.36639404296875 +182.36000061035156 +252.3000030517578 +213.68499755859375 +183.69000244140625 +252.75999450683594 +213.25999450683594 +183.7100067138672 +252.3000030517578 +213.0500030517578 +183.24000549316406 +259.5050048828125 +215.3300018310547 +184.94400024414062 +262.57000732421875 +214.64999389648438 +183.78500366210938 +263.489990234375 +214.8800048828125 +183.80999755859375 +263.1650085449219 +215.7100067138672 +183.8159942626953 +263.7300109863281 +215.72000122070312 +183.63409423828125 +263.4200134277344 +216.35499572753906 +182.95530700683594 +262.2300109863281 +216.47000122070312 +182.57000732421875 +263.4999084472656 +221.72000122070312 +180.18499755859375 +263.6619873046875 +221.97000122070312 +181.91000366210938 +263.1700134277344 +222.97500610351562 +182.49000549316406 +263.3265075683594 +221.5449981689453 +181.47999572753906 +263.44989013671875 +222.5843048095703 +181.22999572753906 +263.0849914550781 +222.4600067138672 +181.3350067138672 +262.8399963378906 +222.02999877929688 +181.13999938964844 +260.0498962402344 +217.4499969482422 +180.3968963623047 +258.4299011230469 +218.73989868164062 +178.87010192871094 +258.54998779296875 +218.97000122070312 +179.22000122070312 +256.69140625 +217.8000030517578 +177.69000244140625 +256.5509948730469 +217.30499267578125 +177.7050018310547 +257.510009765625 +218.27000427246094 +179.47669982910156 +258.42999267578125 +217.97000122070312 +180.2899932861328 +259.4798889160156 +219.88560485839844 +181.58009338378906 +259.3999938964844 +220.27139282226562 +181.9949951171875 +260.0400085449219 +220.07000732421875 +181.82000732421875 +259.8599853515625 +219.77499389648438 +181.78500366210938 +259.9700012207031 +220.60000610351562 +182.7100067138672 +259.8999938964844 +220.96499633789062 +182.78500366210938 +259.5799865722656 +221.08999633789062 +182.1999969482422 +260.94140625 +223.47999572753906 +184.61500549316406 +263.2799987792969 +223.7899932861328 +185.19000244140625 +263.5799865722656 +224.76519775390625 +185.08999633789062 +263.6099853515625 +224.83999633789062 +185.0 +264.0199890136719 +224.85000610351562 +185.27499389648438 +263.5 +224.3350067138672 +186.91000366210938 +262.739990234375 +224.25999450683594 +186.25999450683594 +265.7300109863281 +227.35279846191406 +189.8800048828125 +265.7099914550781 +226.93350219726562 +190.92449951171875 +265.92999267578125 +227.30999755859375 +190.9250030517578 +265.6199951171875 +227.3800048828125 +191.3341064453125 +265.5950012207031 +227.82000732421875 +190.55999755859375 +267.2749938964844 +226.72999572753906 +190.7252960205078 +268.739990234375 +226.97999572753906 +191.42999267578125 +268.6499938964844 +226.52000427246094 +192.8249969482422 +268.69720458984375 +227.5500030517578 +192.80499267578125 +268.9949951171875 +229.11000061035156 +193.70010375976562 +269.4949951171875 +230.69000244140625 +194.58929443359375 +269.0902099609375 +230.05239868164062 +199.31199645996094 +269.20001220703125 +230.368896484375 +202.01499938964844 +269.0299987792969 +229.24000549316406 +201.02999877929688 +270.4200134277344 +229.1300048828125 +210.61000061035156 +267.6300048828125 +230.53500366210938 +208.7949981689453 +268.6199951171875 +231.3679962158203 +206.58999633789062 +269.93011474609375 +230.3721923828125 +206.78900146484375 +270.80999755859375 +229.69000244140625 +206.94000244140625 +268.30999755859375 +228.86000061035156 +207.0399932861328 +269.7300109863281 +230.33999633789062 +207.0500030517578 +269.0899963378906 +226.67999267578125 +202.20590209960938 +270.7900085449219 +227.9600067138672 +203.0749969482422 +272.010009765625 +226.1199951171875 +203.42990112304688 +271.95001220703125 +225.4199981689453 +203.05499267578125 +271.75 +225.08999633789062 +203.5904998779297 +271.3399963378906 +224.39100646972656 +202.54989624023438 +271.2900085449219 +222.77000427246094 +202.8000030517578 +270.3800048828125 +246.5500030517578 +205.47999572753906 +271.29998779296875 +247.7899932861328 +205.2801055908203 +272.43499755859375 +245.8000030517578 +203.98500061035156 +270.3487854003906 +246.02499389648438 +202.8365020751953 +271.80999755859375 +247.60000610351562 +204.27000427246094 +272.1050109863281 +246.85220336914062 +204.41000366210938 +270.25 +244.22000122070312 +202.41000366210938 +267.6300048828125 +255.33999633789062 +207.7949981689453 +266.6400146484375 +255.4600067138672 +207.9149932861328 +267.5350036621094 +256.01031494140625 +209.4199981689453 +267.6780090332031 +256.510009765625 +210.95989990234375 +267.30999755859375 +255.06500244140625 +207.7050018310547 +267.6199951171875 +254.8699951171875 +207.0749969482422 +269.05999755859375 +254.05999755859375 +207.0 +268.42999267578125 +253.38999938964844 +201.6595001220703 +270.6099853515625 +252.44009399414062 +201.85000610351562 +270.010009765625 +250.9550018310547 +200.97500610351562 +270.6383972167969 +249.8699951171875 +199.82510375976562 +270.5104064941406 +249.75 +200.19000244140625 +270.09051513671875 +249.42999267578125 +199.88499450683594 +270.2099914550781 +249.42999267578125 +198.5399932861328 +269.0101013183594 +248.60000610351562 +200.6300048828125 +270.2900085449219 +249.10000610351562 +202.33999633789062 +269.9700012207031 +249.80999755859375 +201.27000427246094 +270.1199951171875 +249.97000122070312 +200.9499969482422 +270.42999267578125 +249.12060546875 +201.03500366210938 +269.6000061035156 +248.44000244140625 +199.5301055908203 +270.1099853515625 +250.24000549316406 +195.1699981689453 +272.82000732421875 +247.1595001220703 +193.06500244140625 +272.1814880371094 +243.66000366210938 +190.6999969482422 +271.42498779296875 +243.94000244140625 +186.82000732421875 +271.3500061035156 +244.11000061035156 +189.20640563964844 +271.9901123046875 +245.40989685058594 +190.5 +271.2099914550781 +244.1199951171875 +189.82000732421875 +269.6600036621094 +243.0800018310547 +188.1699981689453 +271.5799865722656 +240.9499969482422 +182.42799377441406 +269.5299987792969 +240.00999450683594 +180.11219787597656 +269.1099853515625 +239.75999450683594 +182.05999755859375 +268.45001220703125 +240.5500030517578 +184.44000244140625 +267.25 +241.48989868164062 +184.98500061035156 +267.7598876953125 +243.3699951171875 +186.13499450683594 +268.4200134277344 +244.41000366210938 +188.2299041748047 +271.85699462890625 +248.02999877929688 +196.6199951171875 +269.06640625 +246.3800048828125 +194.12179565429688 +269.0799865722656 +247.10499572753906 +195.8656005859375 +269.7300109863281 +248.6300048828125 +196.71180725097656 +269.6600036621094 +248.7698974609375 +197.9199981689453 +269.11859130859375 +248.27000427246094 +198.74000549316406 +269.3599853515625 +248.41000366210938 +199.0399932861328 +274.1000061035156 +248.46780395507812 +192.52999877929688 +272.5 +247.5800018310547 +192.375 +273.31500244140625 +248.26829528808594 +192.4199981689453 +274.4800109863281 +249.3260040283203 +193.64999389648438 +275.32000732421875 +249.3699951171875 +193.97509765625 +275.25 +248.8800048828125 +194.10499572753906 +275.29998779296875 +249.13999938964844 +193.22999572753906 +272.94000244140625 +245.9250030517578 +192.69000244140625 +274.6000061035156 +245.3000030517578 +193.10000610351562 +274.3900146484375 +245.1699981689453 +192.0500030517578 +274.9800109863281 +245.44869995117188 +192.6300048828125 +274.45001220703125 +245.08749389648438 +192.12989807128906 +274.04998779296875 +245.16000366210938 +192.41000366210938 +273.4700012207031 +244.25 +193.85000610351562 +273.7099914550781 +242.53900146484375 +188.09609985351562 +274.037109375 +239.789794921875 +186.2899932861328 +272.8599853515625 +239.84500122070312 +186.92990112304688 +272.5700988769531 +238.07339477539062 +184.86500549316406 +273.5299987792969 +239.0500030517578 +186.00999450683594 +273.03961181640625 +238.3990020751953 +185.9499969482422 +273.0400085449219 +237.5800018310547 +186.9600067138672 +273.7591857910156 +236.7100067138672 +186.9644012451172 +274.6499938964844 +238.2899932861328 +189.97979736328125 +275.7049865722656 +237.55999755859375 +190.03500366210938 +274.5849914550781 +236.20640563964844 +189.1999969482422 +273.9599914550781 +236.25509643554688 +189.9600067138672 +272.989990234375 +235.1999969482422 +190.10000610351562 +272.4100036621094 +234.6999969482422 +190.27999877929688 +269.2799987792969 +230.72500610351562 +187.5500030517578 +267.8799133300781 +232.4199981689453 +187.1999969482422 +268.9200134277344 +233.52000427246094 +187.5800018310547 +267.7799987792969 +232.0 +186.72999572753906 +267.2900085449219 +231.39930725097656 +185.3300018310547 +266.44000244140625 +231.66000366210938 +184.93499755859375 +267.4599914550781 +232.88999938964844 +186.58999633789062 +267.6499938964844 +225.52000427246094 +181.85000610351562 +267.8399963378906 +226.25999450683594 +182.88999938964844 +267.1650085449219 +222.8144073486328 +181.5800018310547 +268.45001220703125 +223.64999389648438 +183.6199951171875 +268.03448486328125 +225.1999969482422 +183.4499969482422 +268.28021240234375 +224.1699981689453 +182.91000366210938 +267.510009765625 +222.55499267578125 +181.3000030517578 +271.8500061035156 +220.58999633789062 +187.6300048828125 +269.7300109863281 +222.05979919433594 +185.38999938964844 +270.3999938964844 +221.77999877929688 +184.38999938964844 +270.0299987792969 +220.58999633789062 +184.25999450683594 +269.6700134277344 +220.6999969482422 +184.6300048828125 +270.0350036621094 +222.67999267578125 +186.7050018310547 +268.57000732421875 +222.69000244140625 +186.69180297851562 +273.9049987792969 +226.41000366210938 +193.9199981689453 +271.7799987792969 +223.74000549316406 +189.75999450683594 +268.94000244140625 +219.4600067138672 +183.68519592285156 +268.80999755859375 +219.83389282226562 +184.50999450683594 +267.7950134277344 +219.57000732421875 +182.72000122070312 +267.32000732421875 +219.07000732421875 +182.3800048828125 +266.3800048828125 +217.14999389648438 +180.94000244140625 +269.8500061035156 +216.26499938964844 +175.7899932861328 +270.8999938964844 +218.5749969482422 +178.86000061035156 +270.54998779296875 +219.63999938964844 +181.07000732421875 +270.9800109863281 +218.7220001220703 +179.33470153808594 +272.6099853515625 +222.0500030517578 +184.19000244140625 +271.3699951171875 +220.18499755859375 +180.38999938964844 +271.489990234375 +220.64500427246094 +178.94000244140625 +273.0950012207031 +225.8699951171875 +178.0 +275.0 +224.94900512695312 +182.08999633789062 +274.8500061035156 +224.6199951171875 +182.47000122070312 +276.1199951171875 +224.97000122070312 +182.10000610351562 +276.2195129394531 +225.91000366210938 +181.8699951171875 +276.4750061035156 +226.09930419921875 +181.6699981689453 +275.9800109863281 +226.10000610351562 +182.5500030517578 +278.9049987792969 +226.7100067138672 +171.0749969482422 +277.8299865722656 +227.77000427246094 +174.7238006591797 +279.0700988769531 +229.25 +175.53500366210938 +278.760009765625 +229.55999755859375 +176.2050018310547 +278.0350036621094 +229.8000030517578 +174.77499389648438 +277.56500244140625 +229.49000549316406 +176.84170532226562 +276.95001220703125 +229.60000610351562 +177.8000030517578 +277.80999755859375 +230.51499938964844 +179.5850067138672 +279.0101013183594 +231.0841064453125 +180.91000366210938 +279.0790100097656 +230.8800048828125 +180.77999877929688 +278.54998779296875 +230.7100067138672 +180.80999755859375 +278.260009765625 +229.56500244140625 +180.5500030517578 +278.0799865722656 +229.42999267578125 +180.50999450683594 +277.4700012207031 +229.1199951171875 +180.19000244140625 +276.260009765625 +231.47999572753906 +177.2899932861328 +276.25 +231.94000244140625 +177.08140563964844 +277.04998779296875 +232.10450744628906 +177.1342010498047 +278.14208984375 +232.8800048828125 +178.86000061035156 +277.9200134277344 +233.97000122070312 +178.9600067138672 +279.7705078125 +234.36500549316406 +179.8350067138672 +280.58819580078125 +234.96009826660156 +179.40499877929688 +280.8900146484375 +234.17999267578125 +179.08999633789062 +281.9100036621094 +234.4781951904297 +179.37989807128906 +283.32000732421875 +233.9499969482422 +179.99000549316406 +284.57000732421875 +234.72000122070312 +183.2550048828125 +285.5400085449219 +234.39010620117188 +180.55999755859375 +285.8699951171875 +236.19000244140625 +182.16000366210938 +285.2149963378906 +235.16000366210938 +181.71499633789062 +285.625 +234.9821014404297 +181.0 +286.239990234375 +235.5 +181.42999267578125 +286.2300109863281 +234.3699951171875 +181.36000061035156 +287.34051513671875 +231.39999389648438 +180.3300018310547 +286.4100036621094 +232.18069458007812 +180.5500030517578 +286.385009765625 +232.47000122070312 +180.375 +285.6792907714844 +231.9600067138672 +180.64999389648438 +285.2099914550781 +231.92489624023438 +180.7449951171875 +284.55499267578125 +232.61000061035156 +180.02000427246094 +284.1499938964844 +232.3699951171875 +179.63999938964844 +281.2250061035156 +228.77499389648438 +181.08009338378906 +280.2799987792969 +227.89999389648438 +182.63510131835938 +280.114990234375 +227.1699981689453 +183.5449981689453 +280.0050048828125 +228.3000030517578 +183.61500549316406 +278.8599853515625 +228.30999755859375 +182.31500244140625 +280.125 +228.7082061767578 +182.32350158691406 +280.6499938964844 +229.10000610351562 +183.39999389648438 +280.4551086425781 +230.9384002685547 +182.7698974609375 +279.2950134277344 +229.6739959716797 +182.05999755859375 +278.31500244140625 +229.38999938964844 +181.77980041503906 +279.44000244140625 +229.83999633789062 +182.24000549316406 +279.2337951660156 +229.6750030517578 +181.45509338378906 +278.8013916015625 +229.25999450683594 +181.8574981689453 +278.7900085449219 +229.5500030517578 +182.35000610351562 +277.55999755859375 +229.0399932861328 +183.05059814453125 +277.4599914550781 +228.07000732421875 +183.48500061035156 +277.2300109863281 +227.2799072265625 +183.40499877929688 +276.9700012207031 +227.0500030517578 +185.89410400390625 +276.3599853515625 +227.08999633789062 +184.7064971923828 +276.92498779296875 +226.9741973876953 +184.88499450683594 +277.9599914550781 +226.99000549316406 +185.5800018310547 +277.70001220703125 +227.66000366210938 +184.6300048828125 +277.4100036621094 +227.83999633789062 +185.07000732421875 +277.875 +227.99000549316406 +184.88800048828125 +278.385009765625 +228.30999755859375 +184.8582000732422 +278.69000244140625 +227.97999572753906 +184.5449981689453 +277.864990234375 +227.9149932861328 +184.3300018310547 +277.2300109863281 +227.89999389648438 +184.97000122070312 +277.45001220703125 +231.73500061035156 +183.85960388183594 +278.2576904296875 +231.66000366210938 +182.8455047607422 +278.5264892578125 +230.72000122070312 +182.57000732421875 +278.1199951171875 +230.3350067138672 +182.61000061035156 +278.2200012207031 +230.26499938964844 +183.09579467773438 +278.9800109863281 +231.9199981689453 +183.7899932861328 +278.7200012207031 +231.69000244140625 +183.77999877929688 +276.1199951171875 +230.8800048828125 +178.0850067138672 +275.82501220703125 +228.85000610351562 +177.05990600585938 +277.9049987792969 +230.08250427246094 +178.4862060546875 +277.5226135253906 +229.47999572753906 +179.30499267578125 +277.760009765625 +229.8441925048828 +180.906494140625 +278.0950012207031 +229.6925048828125 +180.36990356445312 +278.05999755859375 +230.27000427246094 +180.9355010986328 +277.8699951171875 +226.3800048828125 +179.5399932861328 +277.739990234375 +226.02000427246094 +176.63499450683594 +277.8550109863281 +226.3300018310547 +176.52000427246094 +279.04998779296875 +226.99000549316406 +177.4499969482422 +277.95001220703125 +226.85000610351562 +176.2136993408203 +278.05499267578125 +226.71200561523438 +175.90499877929688 +278.3699951171875 +226.19000244140625 +174.99000549316406 +274.1449890136719 +223.02999877929688 +175.45159912109375 +275.510009765625 +224.38999938964844 +178.2519989013672 +274.9200134277344 +222.5449981689453 +177.59500122070312 +274.0400085449219 +222.375 +177.125 +273.3699951171875 +223.22259521484375 +177.13999938964844 +273.80499267578125 +222.6649932861328 +176.3300018310547 +274.114990234375 +222.5500030517578 +176.22999572753906 +273.1700134277344 +222.36500549316406 +176.1501007080078 +272.80999755859375 +222.75 +176.02000427246094 +273.20001220703125 +222.30999755859375 +176.48500061035156 +272.1300048828125 +221.47579956054688 +176.22000122070312 +273.56500244140625 +222.08999633789062 +176.74000549316406 +274.55999755859375 +222.64920043945312 +177.17880249023438 +274.4700012207031 +222.52999877929688 +177.50999450683594 +275.4949951171875 +224.77870178222656 +174.3800048828125 +273.489990234375 +224.13999938964844 +171.13499450683594 +272.8699951171875 +223.64500427246094 +171.4499053955078 +273.0199890136719 +223.7899932861328 +172.25 +273.7850036621094 +222.9149932861328 +170.9499053955078 +273.65008544921875 +222.02000427246094 +171.19000244140625 +271.8599853515625 +221.24099731445312 +170.9199981689453 +270.8999938964844 +227.58270263671875 +175.0399932861328 +272.29998779296875 +228.32000732421875 +174.88009643554688 +270.25 +225.80349731445312 +174.0399932861328 +272.6499938964844 +227.0449981689453 +174.91439819335938 +271.3699951171875 +226.58999633789062 +174.5500030517578 +271.8399963378906 +226.76499938964844 +174.6750030517578 +272.1600036621094 +226.75999450683594 +174.00999450683594 +271.7349853515625 +226.86000061035156 +178.66000366210938 +271.26080322265625 +227.85679626464844 +179.3000030517578 +270.6549987792969 +228.41000366210938 +180.5200958251953 +270.75 +228.66900634765625 +179.96499633789062 +271.3699951171875 +228.75990295410156 +180.57420349121094 +270.79998779296875 +228.64999389648438 +180.44850158691406 +273.6700134277344 +227.3699951171875 +180.99000549316406 +272.0150146484375 +227.82000732421875 +183.39999389648438 +272.44000244140625 +227.52999877929688 +183.6300048828125 +271.94000244140625 +228.01499938964844 +183.10000610351562 +270.9399108886719 +228.0 +183.22560119628906 +270.864990234375 +228.39500427246094 +183.3800048828125 +270.7200012207031 +228.83999633789062 +183.28500366210938 +270.82000732421875 +228.44000244140625 +183.61000061035156 +270.8399963378906 +230.11849975585938 +185.27499389648438 +271.7814025878906 +230.4600067138672 +187.91009521484375 +271.5299987792969 +231.38999938964844 +188.2144012451172 +271.70001220703125 +231.53799438476562 +187.9949951171875 +271.80999755859375 +232.0 +188.61810302734375 +272.10699462890625 +232.2100067138672 +188.78640747070312 +272.239990234375 +232.1199951171875 +189.2100067138672 +274.03509521484375 +232.10000610351562 +187.22999572753906 +274.85101318359375 +232.5399932861328 +187.94500732421875 +275.3599853515625 +232.80999755859375 +188.22500610351562 +274.8247985839844 +232.14990234375 +191.5800018310547 +274.8800048828125 +232.53500366210938 +191.02499389648438 +274.6400146484375 +232.95840454101562 +190.77969360351562 +274.5199890136719 +232.46580505371094 +191.53289794921875 +274.7601013183594 +232.74000549316406 +192.24000549316406 +273.9800109863281 +232.7949981689453 +191.42999267578125 +273.25 +232.5 +190.5399932861328 +273.9543151855469 +232.25 +187.2550048828125 +273.2200012207031 +231.52239990234375 +187.24459838867188 +273.0400085449219 +231.1300048828125 +186.8800048828125 +273.6400146484375 +231.50999450683594 +187.45989990234375 +273.67999267578125 +231.32000732421875 +187.375 +273.9028015136719 +232.10000610351562 +187.96449279785156 +273.79901123046875 +232.0800018310547 +188.22999572753906 +272.5899963378906 +231.30499267578125 +187.17030334472656 +272.85980224609375 +231.86000061035156 +188.25999450683594 +272.5899963378906 +231.2949981689453 +187.90989685058594 +273.1000061035156 +231.19569396972656 +188.21600341796875 +273.3900146484375 +231.6999053955078 +188.15420532226562 +273.1650085449219 +231.74000549316406 +187.5800018310547 +272.989990234375 +232.48989868164062 +187.5500030517578 +272.489990234375 +231.85879516601562 +189.01499938964844 +272.489990234375 +231.2100067138672 +188.8459930419922 +272.6700134277344 +231.36000061035156 +188.91990661621094 +272.625 +231.63999938964844 +188.97000122070312 +272.9609069824219 +231.8800048828125 +188.0449981689453 +272.0799865722656 +230.77999877929688 +187.13499450683594 +271.8399963378906 +230.83999633789062 +186.49000549316406 +273.3900146484375 +227.52499389648438 +190.58900451660156 +270.3245849609375 +225.88999938964844 +189.59939575195312 +270.1499938964844 +226.7064971923828 +189.47999572753906 +270.0799865722656 +225.6199951171875 +189.3616943359375 +270.1300048828125 +226.4499969482422 +189.20570373535156 +270.510009765625 +226.47999572753906 +188.9550018310547 +270.9800109863281 +226.5 +188.80990600585938 +269.80999755859375 +233.22000122070312 +190.0749969482422 +268.7900085449219 +232.25 +190.19000244140625 +266.9700012207031 +233.19000244140625 +187.6199951171875 +267.4200134277344 +232.61000061035156 +187.78500366210938 +266.2698974609375 +232.8450927734375 +186.64320373535156 +267.0190124511719 +232.64999389648438 +187.47000122070312 +267.260009765625 +233.0500030517578 +188.11000061035156 +264.0299987792969 +237.3300018310547 +191.39999389648438 +262.4198913574219 +238.6699981689453 +188.58999633789062 +262.8846130371094 +242.2301025390625 +189.03990173339844 +262.5400085449219 +241.69000244140625 +188.2899932861328 +262.87701416015625 +241.1750030517578 +187.9600067138672 +262.82000732421875 +240.86000061035156 +186.94000244140625 +262.42498779296875 +241.05499267578125 +187.25 +262.0299987792969 +242.42999267578125 +191.01499938964844 +261.0837097167969 +243.49000549316406 +189.5800018310547 +262.3599853515625 +244.41799926757812 +190.0030059814453 +261.2200012207031 +244.89999389648438 +189.625 +261.5899963378906 +243.25 +189.2801055908203 +261.3299865722656 +242.55999755859375 +188.99000549316406 +260.3599853515625 +241.5749969482422 +189.25 +256.7449951171875 +244.84010314941406 +186.10000610351562 +256.1099853515625 +244.47999572753906 +184.8800048828125 +256.7090148925781 +245.3679962158203 +184.25579833984375 +257.4800109863281 +245.67250061035156 +184.75 +256.6000061035156 +245.8000030517578 +184.14999389648438 +258.2799987792969 +245.80999755859375 +185.18649291992188 +259.05999755859375 +246.25900268554688 +185.1300048828125 +258.4599914550781 +245.66000366210938 +184.96200561523438 +256.9599914550781 +246.33250427246094 +185.30999755859375 +258.92999267578125 +245.9250030517578 +184.9541015625 +259.1199951171875 +245.75 +185.18499755859375 +259.7300109863281 +246.63009643554688 +185.88009643554688 +259.9649963378906 +247.0 +185.55499267578125 +259.3500061035156 +247.35000610351562 +184.85000610351562 +260.3500061035156 +247.6699981689453 +184.6199951171875 +260.2300109863281 +247.64759826660156 +185.23989868164062 +260.60931396484375 +248.0998992919922 +186.28500366210938 +260.8900146484375 +248.08999633789062 +186.7801055908203 +260.6400146484375 +248.0050048828125 +186.99000549316406 +260.9700012207031 +247.0500030517578 +186.00999450683594 +260.2099914550781 +246.4199981689453 +184.89999389648438 +260.090087890625 +243.5491943359375 +183.91749572753906 +259.9100036621094 +244.15499877929688 +185.22999572753906 +260.8399963378906 +244.35499572753906 +186.39999389648438 +259.989990234375 +242.71499633789062 +185.0699005126953 +259.739990234375 +241.3000030517578 +184.78990173339844 +259.0199890136719 +242.1199951171875 +184.72000122070312 +261.04998779296875 +242.61000061035156 +185.82000732421875 +259.75 +238.8300018310547 +181.6750030517578 +258.739990234375 +238.5800018310547 +181.98500061035156 +257.3800048828125 +237.49000549316406 +182.10000610351562 +257.5299987792969 +237.07000732421875 +182.22000122070312 +257.79998779296875 +237.57000732421875 +181.82000732421875 +259.9700012207031 +237.41000366210938 +182.14999389648438 +259.95001220703125 +236.6750030517578 +183.1699981689453 +260.10009765625 +237.75 +187.60000610351562 +260.4949951171875 +238.97999572753906 +187.5200958251953 +259.3299865722656 +239.49000549316406 +188.61349487304688 +259.5299987792969 +238.71499633789062 +189.2301025390625 +258.32000732421875 +237.85499572753906 +188.39500427246094 +257.6700134277344 +237.48269653320312 +187.4250030517578 +258.3299865722656 +238.1699981689453 +187.13999938964844 +256.80999755859375 +237.9199981689453 +187.63839721679688 +256.4399108886719 +237.8175048828125 +187.99000549316406 +255.8300018310547 +237.67919921875 +188.02999877929688 +256.0299987792969 +238.80499267578125 +187.93499755859375 +256.0 +237.64999389648438 +187.69000244140625 +256.17999267578125 +238.22500610351562 +187.74000549316406 +255.47999572753906 +239.05999755859375 +186.22999572753906 +251.61570739746094 +234.80690002441406 +180.8000030517578 +251.30499267578125 +234.2899932861328 +180.3199005126953 +250.55999755859375 +233.4600067138672 +180.0198974609375 +249.19500732421875 +231.77499389648438 +179.52000427246094 +247.45249938964844 +229.97999572753906 +179.43499755859375 +245.4600067138672 +230.6197052001953 +178.4949951171875 +246.69000244140625 +231.11000061035156 +178.2100067138672 +247.57000732421875 +231.25999450683594 +180.80999755859375 +247.3000030517578 +231.30499267578125 +182.73550415039062 +245.8300018310547 +228.44000244140625 +179.43499755859375 +245.8800048828125 +227.57000732421875 +180.2449951171875 +247.1103057861328 +229.42999267578125 +182.97999572753906 +248.38279724121094 +230.5399932861328 +183.7899932861328 +247.6300048828125 +231.35000610351562 +183.33999633789062 +250.1300048828125 +232.75 +184.8699951171875 +249.6999053955078 +234.77999877929688 +185.73550415039062 +249.74000549316406 +235.02740478515625 +184.97500610351562 +250.67999267578125 +235.22000122070312 +184.72549438476562 +250.52000427246094 +235.02000427246094 +184.65499877929688 +248.3699951171875 +233.97000122070312 +184.11000061035156 +248.36000061035156 +234.2899932861328 +184.85000610351562 +247.01010131835938 +238.0 +187.65499877929688 +248.35000610351562 +239.15499877929688 +187.75999450683594 +248.73989868164062 +239.86500549316406 +187.74009704589844 +247.92999267578125 +239.40609741210938 +187.89500427246094 +247.47500610351562 +239.4499969482422 +187.8300018310547 +248.19000244140625 +239.27000427246094 +187.22999572753906 +247.97000122070312 +239.19000244140625 +187.6699981689453 +254.0399932861328 +238.96499633789062 +187.3459930419922 +255.0998992919922 +239.84249877929688 +186.80499267578125 +254.5 +239.6300048828125 +186.66000366210938 +254.64999389648438 +239.0800018310547 +186.42999267578125 +255.94000244140625 +239.44000244140625 +186.5749969482422 +255.72500610351562 +239.24000549316406 +186.44500732421875 +255.4199981689453 +238.4199981689453 +186.38999938964844 +259.8450012207031 +242.0399932861328 +188.91510009765625 +260.7200012207031 +241.77000427246094 +189.70579528808594 +261.30999755859375 +242.35000610351562 +189.68499755859375 +260.2550048828125 +243.0800018310547 +189.48500061035156 +259.875 +243.8249969482422 +189.125 +259.3800048828125 +244.02999877929688 +189.4250030517578 +258.2699890136719 +244.67999267578125 +188.5399932861328 +256.0899963378906 +244.89999389648438 +191.40499877929688 +255.49000549316406 +243.0800018310547 +191.77999877929688 +254.82000732421875 +242.4425048828125 +191.09579467773438 +255.2550048828125 +242.94000244140625 +191.72000122070312 +255.11000061035156 +242.27000427246094 +191.52000427246094 +256.4750061035156 +243.08990478515625 +191.6230010986328 +256.44000244140625 +243.02000427246094 +191.52999877929688 +256.8999938964844 +238.78500366210938 +188.92999267578125 +256.1700134277344 +238.0 +187.8350067138672 +257.2200012207031 +239.97999572753906 +189.5449981689453 +257.3800048828125 +239.57260131835938 +190.05499267578125 +258.1449890136719 +239.51980590820312 +190.36000061035156 +258.2950134277344 +239.97999572753906 +190.94500732421875 +258.17498779296875 +241.67999267578125 +192.42999267578125 +254.0 +242.30999755859375 +191.65499877929688 +256.6875 +240.66009521484375 +192.231201171875 +255.2100067138672 +240.72000122070312 +192.8300018310547 +256.05499267578125 +238.63999938964844 +191.27000427246094 +257.5849914550781 +240.1699981689453 +191.47000122070312 +259.9100036621094 +239.94000244140625 +189.84500122070312 +259.4800109863281 +239.25999450683594 +191.28500366210938 +265.0400085449219 +244.7550048828125 +188.58749389648438 +264.29180908203125 +244.5399932861328 +189.139892578125 +264.17999267578125 +244.96029663085938 +189.21009826660156 +265.1300048828125 +243.5850067138672 +189.73500061035156 +267.17999267578125 +243.52999877929688 +189.9199981689453 +268.9800109863281 +242.9582061767578 +186.1750030517578 +269.9599914550781 +242.9409942626953 +185.69000244140625 +269.885009765625 +239.21499633789062 +180.29989624023438 +268.8949890136719 +237.5800018310547 +179.10000610351562 +268.8999938964844 +237.3000030517578 +180.00010681152344 +269.3399963378906 +236.92990112304688 +179.1584930419922 +271.4800109863281 +236.1699981689453 +178.69500732421875 +269.2099914550781 +237.3800048828125 +178.69700622558594 +269.4599914550781 +238.63299560546875 +180.3300018310547 +276.1000061035156 +237.4949951171875 +177.19520568847656 +277.21380615234375 +236.9499969482422 +175.25 +275.25 +233.42019653320312 +173.35000610351562 +275.6000061035156 +233.7449951171875 +174.12660217285156 +274.9100036621094 +232.60000610351562 +174.94009399414062 +277.6099853515625 +233.8000030517578 +175.27099609375 +276.4599914550781 +232.92999267578125 +174.1999969482422 +276.7850036621094 +222.27000427246094 +171.5850067138672 +275.2200012207031 +223.69000244140625 +174.2550048828125 +274.739990234375 +224.7050018310547 +175.28500366210938 +274.32000732421875 +223.3905029296875 +174.3300018310547 +277.0450134277344 +223.1699981689453 +173.6699981689453 +276.6300048828125 +223.1699981689453 +172.26010131835938 +275.9200134277344 +222.5 +171.82000732421875 +279.2900085449219 +204.8699951171875 +182.64999389648438 +279.114990234375 +204.89999389648438 +183.97999572753906 +278.67999267578125 +208.05999755859375 +184.5312042236328 +277.7749938964844 +207.25999450683594 +184.5102996826172 +277.1300048828125 +207.39999389648438 +184.44500732421875 +277.6600036621094 +207.7899932861328 +185.3350067138672 +278.0799865722656 +210.31500244140625 +185.41000366210938 +273.08270263671875 +207.14999389648438 +190.66000366210938 +273.398193359375 +209.6300048828125 +191.8249969482422 +272.0115051269531 +210.31500244140625 +191.58999633789062 +271.9800109863281 +210.44000244140625 +190.9929962158203 +273.6199951171875 +209.19000244140625 +191.00999450683594 +274.0400085449219 +209.03500366210938 +189.89999389648438 +274.5400085449219 +208.66000366210938 +189.7899932861328 +274.4200134277344 +211.80499267578125 +189.17320251464844 +274.05999755859375 +210.08740234375 +189.12010192871094 +273.3500061035156 +209.9949951171875 +189.69000244140625 +274.05499267578125 +207.75999450683594 +189.2449951171875 +273.9649963378906 +208.2550048828125 +189.21499633789062 +274.07000732421875 +207.71800231933594 +189.10000610351562 +273.7900085449219 +206.99000549316406 +188.61000061035156 +277.05010986328125 +204.96189880371094 +188.9199981689453 +278.19000244140625 +204.3800048828125 +191.289794921875 +279.94500732421875 +203.4492950439453 +191.98500061035156 +278.9599914550781 +204.27890014648438 +191.43099975585938 +279.5799865722656 +205.11500549316406 +192.0449981689453 +276.04998779296875 +203.88499450683594 +191.05999755859375 +275.5400085449219 +204.00999450683594 +190.02999877929688 +271.25 +202.31500244140625 +191.69000244140625 +266.1700134277344 +197.77000427246094 +187.30499267578125 +264.6000061035156 +199.5 +189.5749969482422 +262.3299865722656 +199.3350067138672 +189.25 +261.7799987792969 +199.1199951171875 +189.0500030517578 +261.489990234375 +198.375 +187.60000610351562 +261.5899963378906 +199.4499969482422 +186.91000366210938 diff --git a/messaging/clients/kaf/producers/send_portfolio_update.sh b/messaging/clients/kaf/producers/send_portfolio_update.sh new file mode 100755 index 0000000..a3c8e8a --- /dev/null +++ b/messaging/clients/kaf/producers/send_portfolio_update.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +kaf produce \ + portfolioupdates \ + --config ./kaf_ssl_conf.yaml \ + --cluster seckafkabroker \ + -H Content-Type:application/json \ + -k $(date +%Y%m%d_%H%M%S) \ + -v \ + --input-mode full < kaf_payload.json diff --git a/messaging/config/.gitignore b/messaging/config/.gitignore new file mode 100644 index 0000000..0d4fe25 --- /dev/null +++ b/messaging/config/.gitignore @@ -0,0 +1,5 @@ +ca/ca_database_index.txt +ca/ca_serial.txt +ca/cacert.pem +ca/cakey.pem +certs diff --git a/messaging/config/README.md b/messaging/config/README.md new file mode 100644 index 0000000..bb4c01f --- /dev/null +++ b/messaging/config/README.md @@ -0,0 +1,9 @@ +# Generate CA and certificates + +To generate the example just run `bash ./setup.sh`, and fill the missing +fields for certificates (and accept signing and adding the certificates +to the keystore). + +You can edit the `env.sh` file to change settins if you want, however, +the only interesting variable to look at is the keystore password +(that is set to `ksp4ssword`). diff --git a/messaging/config/ca/openssl-ca.cnf b/messaging/config/ca/openssl-ca.cnf new file mode 100644 index 0000000..dbb7349 --- /dev/null +++ b/messaging/config/ca/openssl-ca.cnf @@ -0,0 +1,83 @@ +HOME = . +RANDFILE = $ENV::HOME/.rnd + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +[ CA_default ] + +base_dir = . +certificate = $base_dir/cacert.pem # The CA certificate +private_key = $base_dir/cakey.pem # The CA private key +new_certs_dir = $base_dir # Location for new certs after signing +database = $base_dir/ca_database_index.txt # Database index file +serial = $base_dir/ca_serial.txt # The current serial number + +default_days = 36500 # How long to certify for +default_crl_days = 30 # How long before next CRL +default_md = sha256 # Use public key default MD +preserve = no # Keep passed DN ordering + +x509_extensions = ca_extensions # The extensions to add to the cert + +email_in_dn = no # Don't concat the email in the DN +copy_extensions = copy # Required to copy SANs from CSR to cert + +#################################################################### +[ req ] +default_bits = 4096 +default_keyfile = cakey.pem +distinguished_name = ca_distinguished_name +x509_extensions = ca_extensions +string_mask = utf8only + +#################################################################### +[ ca_distinguished_name ] +countryName = Country Name (2 letter code) +countryName_default = ES + +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = Barcelona + +localityName = Locality Name (eg, city) +localityName_default = Vic + +organizationName = Organization Name (eg, company) +organizationName_default = DevCertiKrakenD + +organizationalUnitName = Organizational Unit (eg, division) +organizationalUnitName_default = DevSelfSignKrakenD + +commonName = Common Name (e.g. server FQDN or YOUR name) +commonName_default = certikrakend.dev + +emailAddress = Email Address +emailAddress_default = admin@certikrakend.dev + +#################################################################### +[ ca_extensions ] + +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always, issuer:always +basicConstraints = critical, CA:true +keyUsage = keyCertSign, cRLSign + +#################################################################### +[ signing_policy ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ signing_req ] +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer:always +basicConstraints = CA:FALSE +keyUsage = digitalSignature, keyEncipherment, dataEncipherment, nonRepudiation, keyCertSign, keyAgreement +subjectAltName = DNS:localhost, DNS:seckafkabroker +issuerAltName = issuer:copy diff --git a/messaging/config/ca/san.cnf b/messaging/config/ca/san.cnf new file mode 100644 index 0000000..a081393 --- /dev/null +++ b/messaging/config/ca/san.cnf @@ -0,0 +1,16 @@ +[ req ] +default_bits = 2048 +distinguished_name = req_distinguished_name +req_extensions = req_ext +prompt = no # <--- This is required to fix OpenSSL output bug +[ req_distinguished_name ] +countryName = ES +stateOrProvinceName = CA +localityName = Girona +organizationName = ExamplesKrakend +commonName = seckafkabroker +[ req_ext ] +subjectAltName = @alt_names +[alt_names] +DNS.1 = localhost +DNS.2 = seckafkabroker diff --git a/messaging/config/cleanup.sh b/messaging/config/cleanup.sh new file mode 100644 index 0000000..779d3f4 --- /dev/null +++ b/messaging/config/cleanup.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +rm ./ca/*.pem +rm ./ca/ca_database* +rm ./ca/ca_serial* +rm -rf ./certs diff --git a/messaging/config/env.sh b/messaging/config/env.sh new file mode 100644 index 0000000..e7af280 --- /dev/null +++ b/messaging/config/env.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +export SERVER_CERT_SIGN_REQUEST=${PWD}/certs/server/localhost.csr +export SERVER_SIGNED_CERT=${PWD}/certs/server/localhost.signed.pem +export SERVER_FQDN=localhost +export SERVER_IPADDRESS=127.0.0.1 + +export CLIENT_CERT_KEYPAIR=${PWD}/certs/client/client.key +export CLIENT_CERT_SIGN_REQUEST=${PWD}/certs/client/client.csr +export CLIENT_SIGNED_CERT=${PWD}/certs/client/client.signed.pem + +export KEYSTORE_FILE=${PWD}/certs/keystore.jks +export KEYSTORE_PASS='ksp4ssword' +export VALIDITY=3650 + diff --git a/messaging/config/krakend.json b/messaging/config/krakend.json new file mode 100644 index 0000000..8231954 --- /dev/null +++ b/messaging/config/krakend.json @@ -0,0 +1,258 @@ +{ + "version": 3, + "debug_endpoint": true, + "host": ["http://localhost:8080"], + "async_agent": [ + { + "name": "stocksconsumer", + "extra_config": { + "async/kafka": { + "cluster": { + "brokers": [ + "localhost:9092" + ], + "client_id": "cid_stocksconsumer", + "metadata_retry_max": 999999, + "metadata_retry_backoff": "1s" + }, + "group": { + "id": "my_group_id" + } + } + }, + "connection": { + "max_retries": -1, + "backoff_strategy": "linear", + "health_interval": "30s" + }, + "consumer": { + "topic": "stockprice", + "workers": 1, + "timeout": "1s" + }, + "backend": [ + { + "url_pattern": "/__debug/stocksconsumer/received" + } + ] + }, + { + "name": "portfolioupdatesconsumer", + "extra_config": { + "async/kafka": { + "cluster": { + "brokers": [ + "localhost:49092" + ], + "client_id": "cid_portfolioupdateconsumer", + "metadata_retry_max": 999999, + "metadata_retry_backoff": "1s", + "client_tls": { + "allow_insecure_connections": false, + "ca_certs": [ + "./config/ca/cacert.pem" + ], + "client_certs": [ + { + "certificate": "./config/certs/client/client.signed.pem", + "private_key": "./config/certs/client/client.key" + } + ] + } + }, + "group": { + "id": "k_async_updates" + } + } + }, + "connection": { + "max_retries": 2, + "backoff_strategy": "linear", + "health_interval": "30s" + }, + "consumer": { + "topic": "portfolioupdates", + "workers": 1, + "timeout": "1s" + }, + "backend": [ + { + "url_pattern": "/__debug/portfolioupdates/received" + } + ] + } + ], + "endpoints": [ + { + "endpoint": "/portfolio/order", + "method": "POST", + "input_headers": [ + "X-Idempotency-Key", + "Some-Meta" + ], + "backend": [ + { + "url_pattern": "/_publisher/", + "extra_config": { + "backend/pubsub/publisher/kafka": { + "success_status_code": 201, + "writer": { + "topic": "orderplacement", + "key_meta": "X-Idempotency-Key", + "cluster": { + "brokers": [ + "localhost:49092" + ], + "metadata_retry_max": 999999, + "metadata_retry_backoff": "1s", + "client_id": "krakend_async_agent", + "client_tls": { + "allow_insecure_connections": false, + "ca_certs": [ + "./config/ca/cacert.pem" + ], + "client_certs": [ + { + "certificate": "./config/certs/client/client.signed.pem", + "private_key": "./config/certs/client/client.key" + } + ] + } + }, + "producer": { + "idempotent": true + } + } + } + } + } + ] + }, + { + "endpoint": "/portfolio/order", + "method": "GET", + "backend": [ + { + "url_pattern": "/_consumer/", + "extra_config": { + "backend/pubsub/subscriber/kafka": { + "reader": { + "topics": ["orderplacement"], + "key_meta": "X-Idempotency-Key", + "cluster": { + "brokers": [ + "localhost:49092" + ], + "metadata_retry_max": 999999, + "metadata_retry_backoff": "1s", + "client_id": "krakend_async_agent", + "client_tls": { + "allow_insecure_connections": false, + "ca_certs": [ + "./config/ca/cacert.pem" + ], + "client_certs": [ + { + "certificate": "./config/certs/client/client.signed.pem", + "private_key": "./config/certs/client/client.key" + } + ] + } + }, + "group": { + "id": "k_endpoint_read", + "isolation_level": "read_commited" + } + } + } + } + } + ] + }, + { + "endpoint": "/ticker/publish", + "method": "POST", + "input_headers": [ "X-Ticker", "X-Time" ], + "backend": [ + { + "url_pattern": "/_publish/stock/prices", + "extra_config": { + "backend/pubsub/publisher/kafka": { + "success_status_code": 201, + "writer": { + "topic": "stockprice", + "key_meta": "X-Ticker", + "cluster": { + "brokers": [ + "localhost:9092" + ], + "metadata_retry_max": 999999, + "metadata_retry_backoff": "1s", + "client_id": "krakend_ticker_generator" + }, + "producer": { + "idempotent": true + } + } + } + } + } + ] + } + ], + "extra_config": { + "telemetry/opentelemetry": { + "service_name": "krakend_promie", + "metric_reporting_period": 1, + "trace_sample_rate": 1, + "exporters": { + "otlp": [ + { + "disable_metrics": true, + "disable_traces": false, + "host": "localhost", + "name": "tempo", + "port": 54317, + "use_http": false + } + ], + "prometheus": [ + { + "name": "local_prometheus", + "port": 9099, + "process_metrics": true, + "go_metrics": true + } + ] + }, + "layers": { + "global": { + "disable_metrics": false, + "disable_propagation": false, + "disable_traces": false, + "report_headers": true + }, + "proxy": { + "disable_metrics": false, + "disable_traces": true, + "report_headers": true + }, + "backend": { + "metrics": { + "detailed_connection": true, + "disable_stage": false, + "read_payload": false, + "round_trip": false + }, + "traces": { + "detailed_connection": false, + "disable_stage": false, + "read_payload": false, + "report_headers": false, + "round_trip": false + } + } + } + } + } +} diff --git a/messaging/config/setup.sh b/messaging/config/setup.sh new file mode 100644 index 0000000..1f0f93d --- /dev/null +++ b/messaging/config/setup.sh @@ -0,0 +1,120 @@ +#!/bin/bash + +mkdir -p ./certs/server +mkdir -p ./certs/client + +. env.sh + +echo ${KEYSTORE_PASS} > ./certs/keystore.credentials.txt + +cd ca +echo " " +echo "--------------" +echo " Creating CA Cert:" +echo "--------------" +openssl \ + req -x509 \ + -config openssl-ca.cnf \ + -newkey rsa:4096 \ + -sha256 \ + -nodes \ + -out cacert.pem \ + -outform PEM + +# . ./01_gen_ca.sh +# . ./02_add_ca_to_keystore.sh +echo " " +echo "--------------" +echo " Importing CA Cert to Keystore file:" +echo " ${KEYSTORE_FILE}" +echo "--------------" +keytool \ + -keystore ${KEYSTORE_FILE} \ + -storepass ${KEYSTORE_PASS} \ + -alias KrakenDCARoot \ + -import \ + -file cacert.pem + +echo " " +echo "--------------" +echo " Generating Secure Kafka Server Key: " +echo "--------------" +keytool \ + -keystore ${KEYSTORE_FILE} \ + -storepass ${KEYSTORE_PASS} \ + -alias localhost \ + -validity ${VALIDITY} \ + -genkey \ + -keyalg RSA \ + -storetype pkcs12 + +echo " " +echo "--------------" +echo " Generating Secure Kafka Server SIGNING REQUEST: " +echo "--------------" +keytool \ + -keystore ${KEYSTORE_FILE} \ + -storepass ${KEYSTORE_PASS} \ + -certreq \ + -alias localhost \ + -keyalg RSA \ + -storetype pkcs12 \ + -file ${SERVER_CERT_SIGN_REQUEST} \ + -ext SAN=DNS:${SERVER_FQDN},IP:${SERVER_IPADDRESS} + +echo " " +echo "--------------" +echo " Generating Client Key Pair and SIGNING REQUEST: " +echo "--------------" +openssl \ + req -newkey rsa:2048 \ + -subj '/CN=localhost/OU=TEST/O=KrakenD/L=Girona/ST=Girona/C=ES' \ + -config ./san.cnf \ + -nodes \ + -keyout ${CLIENT_CERT_KEYPAIR} \ + -out ${CLIENT_CERT_SIGN_REQUEST} + + +echo " " +echo "--------------" +echo " Checking CA DB exists: " +echo "--------------" +if [ ! -f "ca_database_index.txt" ]; then + touch ca_database_index.txt + echo "0001" > ca_serial.txt +fi + +echo " " +echo "--------------" +echo " Signing Server CERT: " +echo "--------------" +openssl \ + ca -config openssl-ca.cnf \ + -policy signing_policy \ + -extensions signing_req \ + -out ${SERVER_SIGNED_CERT} \ + -infiles ${SERVER_CERT_SIGN_REQUEST} + +echo " " +echo "--------------" +echo " Import Server CERT into keystore:" +echo "--------------" +keytool \ + -importcert \ + -keystore ${KEYSTORE_FILE} \ + -storepass ${KEYSTORE_PASS} \ + -alias localhost \ + -file ${SERVER_SIGNED_CERT} + +echo " " +echo "--------------" +echo " Signing Client CERT: " +echo "--------------" +openssl \ + ca -config openssl-ca.cnf \ + -policy signing_policy \ + -extensions signing_req \ + -out ${CLIENT_SIGNED_CERT} \ + -infiles ${CLIENT_CERT_SIGN_REQUEST} + +cd .. diff --git a/messaging/config/telemetry-dashboards/grafana/dashboards/all.yml b/messaging/config/telemetry-dashboards/grafana/dashboards/all.yml new file mode 100644 index 0000000..79b1687 --- /dev/null +++ b/messaging/config/telemetry-dashboards/grafana/dashboards/all.yml @@ -0,0 +1,11 @@ +apiVersion: 1 + +providers: +- name: 'default' + orgId: 1 + folder: '' + type: file + disableDeletion: false + updateIntervalSeconds: 60 + options: + path: /var/lib/grafana/dashboards/krakend diff --git a/messaging/config/telemetry-dashboards/grafana/datasources/prometheus-tempo.yml b/messaging/config/telemetry-dashboards/grafana/datasources/prometheus-tempo.yml new file mode 100644 index 0000000..88d996e --- /dev/null +++ b/messaging/config/telemetry-dashboards/grafana/datasources/prometheus-tempo.yml @@ -0,0 +1,20 @@ +apiVersion: 1 + +datasources: +- access: proxy + id: 1 + orgId: 1 + name: Prometheus + type: prometheus + typeName: Prometheus + url: http://prometheus:9090 + user: "" + database: "" + basicAuth: false + isDefault: true + jsonData: + httpMethod: POST + readOnly: false + editable: true + # This UID matches the one used in the dashboard settings file + uid: krakend_prometheus_datasource diff --git a/messaging/config/telemetry-dashboards/grafana/krakend/for-prometheus.json b/messaging/config/telemetry-dashboards/grafana/krakend/for-prometheus.json new file mode 100644 index 0000000..2b80913 --- /dev/null +++ b/messaging/config/telemetry-dashboards/grafana/krakend/for-prometheus.json @@ -0,0 +1,8632 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "KrakenD dashboard based on Prometheus integration via OpenTelemetry", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 20651, + "graphTooltip": 0, + "id": 1, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 8, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Total incoming HTTP Requests in the selected period", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "transparent", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 28, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "sum(delta(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__range]))\n", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "useBackend": false + } + ], + "title": "Total HTTP Requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Average requests per second over the selected period", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 39, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "sum(max_over_time(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__range])-min_over_time(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__range]))/ $__range_s", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg Throughput", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The Average Response Time in the selected period", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 31, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(http_server_duration_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__range])) / (sum(rate(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__range]))+0.0001)", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg Response Time", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Total number of proxy requests", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "transparent", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 29, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "sum(delta(krakend_proxy_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__range]))\n", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "useBackend": false + } + ], + "title": "Total Proxy Requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Total number of attempted connections to backends (failed or not)", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "transparent", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 30, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "sum(delta(krakend_backend_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__range]))\n", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "useBackend": false + } + ], + "title": "Total Backend Requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Average allocated memory per instance", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 77, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(avg_over_time(go_memstats_alloc_bytes{app=~\"$app\", instance=~\"$instance\"}[$__range]))/count(max_over_time(go_memstats_alloc_bytes{app=~\"$app\", instance=~\"$instance\"}[$__range]))", + "hide": false, + "range": true, + "refId": "A" + } + ], + "title": "Avg memory in use", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "An average of the total memory reserved per instance in the period", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 18, + "y": 1 + }, + "id": 80, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(avg_over_time(go_memstats_sys_bytes{app=~\"$app\", instance=~\"$instance\"}[$__range]))/count(max_over_time(go_memstats_sys_bytes{app=~\"$app\", instance=~\"$instance\"}[$__range]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Reserved memory", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Total number of Go routines (internal threads) running in the gateway per instance. Go routines manage the incoming traffic, background operations and other maintenance tasks.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 21, + "y": 1 + }, + "id": 78, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(avg_over_time(go_goroutines{app=~\"$app\", instance=~\"$instance\"}[$__range]))/count(max_over_time(go_goroutines{app=~\"$app\", instance=~\"$instance\"}[$__range]))", + "hide": false, + "range": true, + "refId": "A" + } + ], + "title": "Go Routines", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The worst latency seen during the selected time", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 6 + }, + "id": 79, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(1, sum by(le) (rate(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\",http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Worst latency", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 99 tells you that 99% of HTTP server requests have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 6 + }, + "id": 59, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum by(le) (rate(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\",http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Latency p99", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 95 tells you that 95% of HTTP server requests have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 6 + }, + "id": 60, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le) (rate(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\",http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Latency p95", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 90 tells you that 90% of HTTP server requests have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 6 + }, + "id": 61, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.90, sum by(le) (rate(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\",http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Latency p90", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 75 tells you that 75% of HTTP server requests have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 12, + "y": 6 + }, + "id": 62, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.75, sum by(le) (rate(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\",http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Latency p75", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 50 tells you that 50% of HTTP server requests have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 15, + "y": 6 + }, + "id": 63, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.5, sum by(le) (rate(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\",http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Latency p50", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Average response size of data payloads per second in the selected period", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 18, + "y": 6 + }, + "id": 110, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(http_server_response_size_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg data throughput", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Pie chart of status codes.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [], + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 3, + "x": 21, + "y": 6 + }, + "id": 27, + "interval": "$interval", + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(http_response_status_code) (delta(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__range]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Response Status Codes Distribution", + "type": "piechart" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Numer of request per second received", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 21, + "x": 0, + "y": 11 + }, + "id": 64, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Throughput (RPS)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Average response latency", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 18 + }, + "id": 98, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(http_server_duration_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]))/count(max_over_time(http_server_duration_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg Latency", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentiles tell you the percentage of requests that responded within a time.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 18 + }, + "id": 65, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum by(le) (delta(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "p99", + "range": true, + "refId": "A", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le) (delta(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])))", + "hide": false, + "instant": false, + "legendFormat": "p95", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.9, sum by(le) (delta(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])))", + "hide": false, + "instant": false, + "legendFormat": "p90", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.75, sum by(le) (delta(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])))", + "hide": false, + "instant": false, + "legendFormat": "p75", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.5, sum by(le) (delta(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])))", + "hide": false, + "instant": false, + "legendFormat": "p50", + "range": true, + "refId": "E" + } + ], + "title": "Latencies (Percentile)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Bytes sent in body responses during the selected period. Headers excluded.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 66, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(http_server_response_size_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Response data size (payloads)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Average response size of data payloads in the selected period", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 26 + }, + "id": 67, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(http_server_response_size_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]) / (1 +rate(http_server_response_size_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg reponse data size (payloads)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The worst proxy execution has a latency matching this number", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 35 + }, + "id": 11, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(1, sum by(le) (rate(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Worst proxy latency", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 99 tells you that 99% of the proxy executions have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 35 + }, + "id": 81, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum by(le) (rate(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Proxy latency 99p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 95 tells you that 95% of the proxy executions have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 35 + }, + "id": 69, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le) (rate(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Proxy latency 95p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 90 tells you that 90% of the proxy executions have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 35 + }, + "id": 70, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.90, sum by(le) (rate(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Proxy latency 90p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 75 tells you that 75% of the proxy executions have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 12, + "y": 35 + }, + "id": 71, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.75, sum by(le) (rate(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Proxy latency 75p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 50 tells you that 50% of the proxy executions have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 15, + "y": 35 + }, + "id": 72, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.5, sum by(le) (rate(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Proxy latency 50p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of incomplete responses returned to the user on aggregation (matches X-KrakenD-Complete header)", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 18, + "y": 35 + }, + "id": 85, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(krakend_proxy_duration_count{complete=\"false\",app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Incomplete responses per second", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of proxy errors per second seen in the selected period", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "dark-red", + "mode": "thresholds" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 21, + "y": 35 + }, + "id": 83, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(krakend_proxy_duration_count{error=\"true\",app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Proxy errors per second", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The worst backend connection has a latency matching this number", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 40 + }, + "id": 12, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum by(le) (rate(krakend_backend_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Worst backend latency", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 99 tells you that 99% of the backend connections have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 40 + }, + "id": 82, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum by(le) (rate(krakend_backend_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Backend latency 99p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 95 tells you that 95% of the backend connections have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 40 + }, + "id": 73, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le) (rate(krakend_backend_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Backend latency 95p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 90 tells you that 90% of the backend connections have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 40 + }, + "id": 74, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.9, sum by(le) (rate(krakend_backend_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Backend latency 90p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 75 tells you that 75% of the backend connections have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 12, + "y": 40 + }, + "id": 75, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.75, sum by(le) (rate(krakend_backend_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Backend latency 75p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The percentile 50 tells you that 50% of the backend connections have a latency below this number.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 15, + "y": 40 + }, + "id": 76, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.5, sum by(le) (rate(krakend_backend_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Backend latency 50p", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The average response size of backends within a second", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 18, + "y": 40 + }, + "id": 87, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(http_client_response_size_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\", http_response_status_code=~\"[24]\\\\d{2}\"}[$__rate_interval])/rate(http_client_response_size_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\", http_response_status_code=~\"[24]\\\\d{2}\"}[$__rate_interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg backend traffic", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of backend errors per second seen in the selected period", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "dark-red", + "mode": "thresholds" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 21, + "y": 40 + }, + "id": 86, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(krakend_backend_duration_count{error=\"true\",app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Backend errors per second", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 45 + }, + "id": 4, + "panels": [], + "title": "Global", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Numer of request per second received", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 46 + }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Throughput (RPS)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Average response latency", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "-", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 54 + }, + "id": 101, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by (http_request_method, http_route) (rate(http_server_duration_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]))/sum by (http_request_method, http_route) (rate(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg Latency", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The 95 percentile tells you that 95% of the requests responded within this time.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 54 + }, + "id": 33, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le, http_route, http_request_method) (rate(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95p Endpoint Latencies", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Bytes sent in body responses during the selected period. Headers excluded.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 62 + }, + "id": 100, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(http_server_response_size_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg response size per endpoint", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Average bytes sent in body responses for each endpoint during the selected period. Headers excluded.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 16, + "w": 12, + "x": 12, + "y": 62 + }, + "id": 35, + "options": { + "displayMode": "gradient", + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "valueMode": "color" + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "rate(http_server_response_size_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]) / rate(http_server_response_size_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "interval": "", + "legendFormat": "{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Average response size per endpoint", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Bytes sent in body responses during the selected period. Headers excluded.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "gauge" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + }, + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "http_route" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 70 + }, + "id": 68, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": [ + "Value" + ], + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": false, + "displayName": "Value" + } + ] + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "topk($max_list, histogram_quantile(0.95, sum by (le, http_route) (rate(http_server_response_size_bucket{app=~\"$app\", instance=~\"$instance\"}[$__range])))) >= 0", + "format": "table", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{http_route}}", + "range": false, + "refId": "A", + "useBackend": false + } + ], + "title": "Total response size per endpoint (top $max_list)", + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Fastest endpoints to respond", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "gauge" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + }, + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "http_route" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 78 + }, + "id": 26, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": [ + "Value" + ], + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "bottomk($max_list, histogram_quantile(0.95, sum by (le, http_route) (rate(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route!=\"\"}[$__range])))) >= 0", + "format": "table", + "instant": true, + "legendFormat": "{{http_route}}", + "range": false, + "refId": "A" + } + ], + "title": "Fastest p95 endpoints (top $max_list)", + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Slowest endpoints to respond", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "gauge" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + }, + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "http_route" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 78 + }, + "id": 88, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": [ + "Value" + ], + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk($max_list, histogram_quantile(0.95, sum by (le, http_route) (rate(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route!=\"\"}[$__range])))) >= 0", + "format": "table", + "instant": true, + "legendFormat": "{{http_route}}", + "range": false, + "refId": "A" + } + ], + "title": "Slowest p95 endpoints (top $max_list)", + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Count of HTTP response status codes over time", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 86 + }, + "id": 21, + "interval": "$interval", + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(http_response_status_code) (delta(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Response Status Codes", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Distribution of status codes over time", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 86 + }, + "id": 24, + "interval": "$interval", + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(http_response_status_code) (delta(http_server_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Response Status Codes", + "type": "timeseries" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateOranges", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "timeseries", + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Histogram showing the latency of responses over time.", + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 94 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 36, + "interval": "$interval", + "legend": { + "show": false + }, + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Oranges", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true, + "showLegend": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false, + "unit": "s" + } + }, + "pluginVersion": "10.4.0", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(increase(http_server_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__interval])) by (le)\n", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Latency Heat Map", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "format": "short", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateOranges", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "timeseries", + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Histogram showing the size of payloads of responses over time.", + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 94 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 38, + "interval": "$interval", + "legend": { + "show": false + }, + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Oranges", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true, + "showLegend": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false, + "unit": "bytes" + } + }, + "pluginVersion": "10.4.0", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(increase(http_server_response_size_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__interval])) by (le)\n", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Response Size Heat Map", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "format": "short", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 106 + }, + "id": 3, + "panels": [], + "title": "Proxy", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Numer of request per second received", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 107 + }, + "id": 40, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(krakend_proxy_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Throughput (RPS)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The Endpoints Average Latency", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 115 + }, + "id": 41, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by (http_request_method, http_route) (rate(krakend_proxy_duration_sum{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]))/sum by (http_request_method, http_route) (rate(krakend_proxy_duration_count{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg Endpoint Latencies", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The Endpoint p95 Latencies", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 115 + }, + "id": 99, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le, http_route, http_request_method) (rate(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95p Endpoint Latencies", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Fastest endpoints by looking at the percentile 95", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "gauge" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + }, + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "http_route" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 123 + }, + "id": 42, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": [ + "Value" + ], + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "bottomk($max_list, histogram_quantile(0.95, sum by (le, http_route) (rate(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\"}[$__range])))) >= 0", + "format": "table", + "instant": true, + "legendFormat": "{{url_path}}", + "range": false, + "refId": "A" + } + ], + "title": "Fastest endpoints (p95 - top $max_list)", + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Slowest endpoints by looking at the percentile 95", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "gauge" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + }, + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "http_route" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 123 + }, + "id": 89, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": [ + "Value" + ], + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk($max_list, histogram_quantile(0.95, sum by (le, http_route) (rate(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route!=\"\"}[$__range])))) >= 0", + "format": "table", + "instant": true, + "legendFormat": "{{url_path}}", + "range": false, + "refId": "A" + } + ], + "title": "Slowest endpoints (p95 - top $max_list)", + "type": "table" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateOranges", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "timeseries", + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The latency heatmap", + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 24, + "x": 0, + "y": 131 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 44, + "interval": "$interval", + "legend": { + "show": false + }, + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Oranges", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true, + "showLegend": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false, + "unit": "s" + } + }, + "pluginVersion": "10.4.0", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(increase(krakend_proxy_duration_bucket{app=~\"$app\", instance=~\"$instance\", http_route=~\"$endpoint\"}[$__interval])) by (le)\n", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Latency Heat Map", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "format": "short", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 144 + }, + "id": 2, + "panels": [], + "title": "Backends", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of BACKEND request per second executed", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 145 + }, + "id": 45, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(http_client_duration_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Throughput (RPS)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 156 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(http_request_method, http_route, server_address) (rate(http_client_duration_sum{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))/sum by(http_request_method, http_route, server_address) (rate(http_client_duration_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg requests latency", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The time it takes for a request to have the first byte of the response body ready to be read.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 156 + }, + "id": 46, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le, http_route, http_request_method, server_address) (rate(http_client_duration_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95p Backend Request Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of bytes reported by consumed responses Content-Length values. In case of chunked responses, the metrics are not displayed here.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 0, + "y": 167 + }, + "id": 47, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(http_client_response_size_sum{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Received Content Length", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Backends that did not report a Content-Length header", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 8, + "y": 167 + }, + "id": 55, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(http_client_response_no_content_length_total{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "No Content Length Count", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Average response content-lenght. Chunked responses are not taken into account.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 16, + "y": 167 + }, + "id": 48, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(http_client_response_size_sum{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$interval]) / rate(http_client_response_size_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Average Content Length", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of bytes readed from the body. In case a cancel, or a closed connection, the read bytes might not match those of content-lenght. This metric includes chunked responses that do not come with the Content-Length header set.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 179 + }, + "id": 56, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(http_client_request_read_size_hist_sum{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Read Content Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Average Number of bytes readed from the body. In case a cancel, or a closed connection, the read bytes might not match those of content-lenght. This metric includes chunked responses that do not come with the Content-Length header set.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 179 + }, + "id": 57, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "rate(http_client_request_read_size_hist_sum{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$interval]) / rate(http_client_request_read_size_hist_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg Read Content Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Fastest backend response times p95", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "gauge" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + }, + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "http_route" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "http_request_method" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "server_address" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 191 + }, + "id": 49, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": [ + "Value" + ], + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "bottomk($max_list, histogram_quantile(0.95, sum by (le, http_route, http_request_method, server_address) (rate(http_client_duration_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\", http_route!=\"\"}[$__range])))) >= 0", + "format": "table", + "instant": true, + "legendFormat": "{{http_route}}", + "range": false, + "refId": "A" + } + ], + "title": "Fastest p95 endpoints (top $max_list)", + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Slowest backend tesponse times p95", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "gauge" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + }, + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "http_route" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "http_request_method" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "server_address" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 191 + }, + "id": 90, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": [ + "Value" + ], + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk($max_list, histogram_quantile(0.95, sum by (le, http_route, server_address, http_request_method) (rate(http_client_duration_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\", http_route!=\"\"}[$__range])))) >= 0", + "format": "table", + "instant": true, + "legendFormat": "{{http_route}}", + "range": false, + "refId": "A" + } + ], + "title": "Slowest p95 endpoints (top $max_list)", + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "noValue": "No Response", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 199 + }, + "id": 51, + "interval": "$interval", + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(http_response_status_code) (delta(http_client_duration_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Response Status Codes Count", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 199 + }, + "id": 52, + "interval": "$interval", + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(http_response_status_code) (delta(http_client_duration_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Response Status Codes Distribution", + "type": "timeseries" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateOranges", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "timeseries", + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The BACKEND requests latency heatmap", + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 0, + "y": 208 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 53, + "interval": "$interval", + "legend": { + "show": false + }, + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Oranges", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true, + "showLegend": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false, + "unit": "s" + } + }, + "pluginVersion": "10.4.0", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(increase(http_client_duration_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__interval])) by (le)\n", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Latency Heat Map", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "format": "short", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateOranges", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "timeseries", + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "The Response Size Heatmap", + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 208 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 54, + "interval": "$interval", + "legend": { + "show": false + }, + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Oranges", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true, + "showLegend": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false, + "unit": "bytes" + } + }, + "pluginVersion": "10.4.0", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(increase(http_client_response_size_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__interval])) by (le)\n", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Response Size Heat Map", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "format": "short", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Failed and timed out requests.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 221 + }, + "id": 16, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "10.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(http_client_request_failed_count_total{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Failed", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(http_client_request_timedout_count_total{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Timed out", + "range": true, + "refId": "C" + } + ], + "title": "Failed and Timed out", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Requests started vs canceled.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 221 + }, + "id": 17, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "10.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(http_client_request_started_count_total{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Started", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(http_client_request_canceled_count_total{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "Cancelled", + "range": true, + "refId": "C" + } + ], + "title": "Started vs Canceled", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 230 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le) (rate(http_client_request_get_conn_duration_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval])))", + "instant": false, + "legendFormat": "Get Conn", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le) (rate(http_client_request_dns_duration_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "DNS", + "range": true, + "refId": "B", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le) (rate(http_client_request_tls_duration_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval])))", + "hide": false, + "instant": false, + "legendFormat": "TLS", + "range": true, + "refId": "C" + } + ], + "title": "Requests Details p95", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 230 + }, + "id": 102, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(http_client_request_get_conn_duration_sum{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))/sum(rate(http_client_request_get_conn_duration_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Get Conn", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(http_client_request_dns_duration_sum{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))/sum(rate(http_client_request_dns_duration_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "DNS", + "range": true, + "refId": "B", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(http_client_request_tls_duration_sum{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))/sum(rate(http_client_request_tls_duration_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "TLS", + "range": true, + "refId": "C" + } + ], + "title": "Avg Request Times", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 241 + }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(http_route, http_request_method, server_address) (rate(krakend_backend_duration_sum{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))/sum by(http_route, http_request_method, server_address) (rate(krakend_backend_duration_count{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Avg backend duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Percentile 95 of backend duration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 241 + }, + "id": 103, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le, http_route, http_request_method, server_address) (rate(krakend_backend_duration_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{http_request_method}} {{server_address}}{{http_route}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "p95 backend duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of requests initiated", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 252 + }, + "id": 15, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": " sum by (http_request_method, krakend_endpoint_route, server_address, http_route) (rate(http_client_request_started_count_total{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[1m]))", + "instant": false, + "legendFormat": "{{http_request_method}} {{http_route}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests Started Count", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 24, + "x": 0, + "y": 263 + }, + "id": 19, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum by(le) (rate(http_client_response_size_bucket{app=~\"$app\", instance=~\"$instance\", krakend_endpoint_route=~\"$endpoint\"}[$__rate_interval])))", + "instant": false, + "legendFormat": "Response Size", + "range": true, + "refId": "A" + } + ], + "title": "Response Size p95", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 269 + }, + "id": 91, + "panels": [], + "title": "Application", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Time spent on garbage collection", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 270 + }, + "id": 92, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "rate(go_gc_duration_seconds_sum{instance=~\"$instance\",app=~\"$app\"}[$__interval])", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "GC Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Counts of garbage collection operations per second", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 270 + }, + "id": 93, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "rate(go_gc_duration_seconds_count{instance=~\"$instance\",app=~\"$app\"}[$__interval])", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "GC Per Second", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Garbage collector duration quantiles", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 278 + }, + "id": 94, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum by (quantile) (rate(go_gc_duration_seconds{app=~\"$app\", instance=~\"$instance\"}[$__interval]))", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "GC Quantiles", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Memory in use by the application over time", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 286 + }, + "id": 96, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "rate(go_memstats_alloc_bytes{app=~\"$app\", instance=~\"$instance\"}[$__interval])", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Used Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Total number of bytes allocated, even if freed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 286 + }, + "id": 95, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "rate(go_memstats_alloc_bytes_total{app=~\"$app\", instance=~\"$instance\"}[$__interval])", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Allocated Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Total number of frees.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 294 + }, + "id": 97, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "rate(go_memstats_frees_total{app=~\"$app\", instance=~\"$instance\"}[$__interval])", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Frees", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of allocated objects.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 294 + }, + "id": 104, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "rate(go_memstats_heap_objects{app=~\"$app\", instance=~\"$instance\"}[$__interval])", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Allocated objects", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of heap bytes released to OS.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 302 + }, + "id": 105, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "rate(go_memstats_heap_released_bytes{app=~\"$app\", instance=~\"$instance\"}[$__interval])", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Released memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Idle vs In Use heap memory", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 310 + }, + "id": 106, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(go_memstats_heap_inuse_bytes{app=~\"$app\", instance=~\"$instance\"}[$__interval]))", + "hide": false, + "instant": false, + "legendFormat": "in use", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(go_memstats_heap_idle_bytes{app=~\"$app\", instance=~\"$instance\"}[$__interval]))", + "instant": false, + "legendFormat": "idle", + "range": true, + "refId": "A" + } + ], + "title": "Heap memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Obtained vs in use stack memory.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 318 + }, + "id": 107, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(go_memstats_stack_inuse_bytes{app=~\"$app\", instance=~\"$instance\"}[$__interval]))", + "instant": false, + "legendFormat": "in use", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "sum(rate(go_memstats_stack_sys_bytes{app=~\"$app\", instance=~\"$instance\"}[$__interval]))", + "hide": false, + "instant": false, + "legendFormat": "obtained", + "range": true, + "refId": "B" + } + ], + "title": "Stack memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of OS threads created.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 326 + }, + "id": 108, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "avg_over_time(go_threads{app=~\"$app\", instance=~\"$instance\"}[$interval])", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "OS Threads", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "description": "Number of live go routines.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 326 + }, + "id": 109, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "editorMode": "code", + "expr": "avg_over_time(go_goroutines{app=~\"$app\", instance=~\"$instance\"}[$interval])", + "instant": false, + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Goroutines", + "type": "timeseries" + } + ], + "refresh": "30s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "allValue": ".*", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "definition": "label_values(app)", + "description": "Filter by reporting application", + "hide": 0, + "includeAll": true, + "label": "Application", + "multi": true, + "name": "app", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(app)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "definition": "label_values(instance)", + "description": "The Instance that we want to monitor", + "hide": 0, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(instance)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "krakend_prometheus_datasource" + }, + "definition": "label_values(krakend_proxy_duration_bucket,http_route)", + "description": "KrakenD exposed endpoint", + "hide": 0, + "includeAll": true, + "label": "Endpoint", + "multi": true, + "name": "endpoint", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(krakend_proxy_duration_bucket,http_route)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "5m", + "value": "5m" + }, + "description": "The granularity of the time interval", + "hide": 0, + "includeAll": false, + "label": "Interval", + "multi": false, + "name": "interval", + "options": [ + { + "selected": false, + "text": "1m", + "value": "1m" + }, + { + "selected": true, + "text": "5m", + "value": "5m" + }, + { + "selected": false, + "text": "15m", + "value": "15m" + }, + { + "selected": false, + "text": "30m", + "value": "30m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + }, + { + "selected": false, + "text": "2h", + "value": "2h" + }, + { + "selected": false, + "text": "1d", + "value": "1d" + } + ], + "query": "1m,5m,15m,30m,1h,2h,1d", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "15", + "value": "15" + }, + "description": "Number of elements to display in lists, like top N, or bottom N", + "hide": 0, + "includeAll": false, + "label": "Max items", + "multi": false, + "name": "max_list", + "options": [ + { + "selected": false, + "text": "3", + "value": "3" + }, + { + "selected": false, + "text": "5", + "value": "5" + }, + { + "selected": false, + "text": "10", + "value": "10" + }, + { + "selected": true, + "text": "15", + "value": "15" + }, + { + "selected": false, + "text": "20", + "value": "20" + } + ], + "query": "3,5,10,15,20", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "KrakenD - OpenTelemetry + Prometheus", + "uid": "d7e631a4-afbc-4267-91e8-b9492bcd801b", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/messaging/config/telemetry-dashboards/kibana/dashboard.ndjson b/messaging/config/telemetry-dashboards/kibana/dashboard.ndjson new file mode 100644 index 0000000..f561882 --- /dev/null +++ b/messaging/config/telemetry-dashboards/kibana/dashboard.ndjson @@ -0,0 +1,4 @@ +{"attributes":{"allowNoIndex":true,"fieldAttrs":"{}","fields":"[]","name":".alerts-security.alerts-default,apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-*","runtimeFieldMap":"{}","sourceFilters":"[]","timeFieldName":"@timestamp","title":".alerts-security.alerts-default,apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-*","typeMeta":"{}"},"coreMigrationVersion":"8.4.1","id":"security-solution-default","migrationVersion":{"index-pattern":"8.0.0"},"references":[],"type":"index-pattern","updated_at":"2022-09-13T08:12:52.146Z","version":"WzI5LDFd"} +{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":0,\"w\":21,\"h\":13,\"i\":\"61c51800-6120-40bb-9e79-0c2cb3a865ad\"},\"panelIndex\":\"61c51800-6120-40bb-9e79-0c2cb3a865ad\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-62c0589c-3e4c-40b4-82cb-d9cd9aad3c45\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"62c0589c-3e4c-40b4-82cb-d9cd9aad3c45\",\"accessors\":[\"92025141-7aec-4950-96d5-a56b72dab244\"],\"position\":\"top\",\"seriesType\":\"bar_stacked\",\"showGridlines\":false,\"layerType\":\"data\",\"splitAccessor\":\"ada320d9-0ce1-4277-8926-89d31ad1a1d9\",\"xAccessor\":\"46e5208d-c668-4434-badb-ce3c92969db6\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"62c0589c-3e4c-40b4-82cb-d9cd9aad3c45\":{\"columns\":{\"46e5208d-c668-4434-badb-ce3c92969db6\":{\"label\":\"Top 10 messages\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"msg\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"92025141-7aec-4950-96d5-a56b72dab244\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}},\"customLabel\":true},\"92025141-7aec-4950-96d5-a56b72dab244\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}},\"ada320d9-0ce1-4277-8926-89d31ad1a1d9\":{\"label\":\"SCOPE\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"scope\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"92025141-7aec-4950-96d5-a56b72dab244\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}},\"customLabel\":true}},\"columnOrder\":[\"46e5208d-c668-4434-badb-ce3c92969db6\",\"ada320d9-0ce1-4277-8926-89d31ad1a1d9\",\"92025141-7aec-4950-96d5-a56b72dab244\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Top 10 messages\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":21,\"y\":0,\"w\":21,\"h\":13,\"i\":\"14d142f6-9a47-47fe-912a-5a48d4212bcc\"},\"panelIndex\":\"14d142f6-9a47-47fe-912a-5a48d4212bcc\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-7d16ac75-e86f-47ff-a746-2bf0b9ea6a0f\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"7d16ac75-e86f-47ff-a746-2bf0b9ea6a0f\",\"seriesType\":\"bar_stacked\",\"accessors\":[\"d16b154c-351e-42d6-8718-60088e778242\"],\"layerType\":\"data\",\"splitAccessor\":\"01e38aaa-3961-463c-b5d0-7b84ab645125\",\"xAccessor\":\"3fdc7688-5b9e-4ba3-9bc8-c7e8aa392613\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"7d16ac75-e86f-47ff-a746-2bf0b9ea6a0f\":{\"columns\":{\"3fdc7688-5b9e-4ba3-9bc8-c7e8aa392613\":{\"label\":\"Filters\",\"dataType\":\"string\",\"operationType\":\"filters\",\"scale\":\"ordinal\",\"isBucketed\":true,\"params\":{\"filters\":[{\"label\":\"\",\"input\":{\"query\":\"scope : SERVICE\",\"language\":\"kuery\"}}]}},\"d16b154c-351e-42d6-8718-60088e778242\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}},\"01e38aaa-3961-463c-b5d0-7b84ab645125\":{\"label\":\"Top 20 values of context\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"context\",\"isBucketed\":true,\"params\":{\"size\":20,\"orderBy\":{\"type\":\"column\",\"columnId\":\"d16b154c-351e-42d6-8718-60088e778242\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}}},\"columnOrder\":[\"3fdc7688-5b9e-4ba3-9bc8-c7e8aa392613\",\"01e38aaa-3961-463c-b5d0-7b84ab645125\",\"d16b154c-351e-42d6-8718-60088e778242\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Top SERVICE messages\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":42,\"y\":0,\"w\":6,\"h\":6,\"i\":\"a5aaa0eb-0580-4970-a92f-f057b57c17aa\"},\"panelIndex\":\"a5aaa0eb-0580-4970-a92f-f057b57c17aa\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsPie\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-5c308554-7dc3-4986-b31e-232c976657a2\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"shape\":\"donut\",\"layers\":[{\"layerId\":\"5c308554-7dc3-4986-b31e-232c976657a2\",\"groups\":[\"aa02addb-82df-4a3c-a052-b6564797c7ad\"],\"metric\":\"1327f462-8a28-4421-9b42-7a25f2cbf07e\",\"numberDisplay\":\"percent\",\"categoryDisplay\":\"default\",\"legendDisplay\":\"default\",\"nestedLegend\":false,\"layerType\":\"data\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"5c308554-7dc3-4986-b31e-232c976657a2\":{\"columns\":{\"aa02addb-82df-4a3c-a052-b6564797c7ad\":{\"label\":\"Top 10 values of statusCode\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"statusCode\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"1327f462-8a28-4421-9b42-7a25f2cbf07e\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"1327f462-8a28-4421-9b42-7a25f2cbf07e\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"aa02addb-82df-4a3c-a052-b6564797c7ad\",\"1327f462-8a28-4421-9b42-7a25f2cbf07e\"],\"incompleteColumns\":{}}}}}}},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"% of Status Codes\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":42,\"y\":6,\"w\":6,\"h\":7,\"i\":\"7bbec2fb-0ab6-4f6a-8259-cc46f91d5a9b\"},\"panelIndex\":\"7bbec2fb-0ab6-4f6a-8259-cc46f91d5a9b\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsPie\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-73d168b7-3b62-4c83-9f8f-d59ccb1ceea6\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"shape\":\"donut\",\"layers\":[{\"layerId\":\"73d168b7-3b62-4c83-9f8f-d59ccb1ceea6\",\"groups\":[\"d74c9301-1bce-472c-bcf5-3d4f3d69e6ab\"],\"metric\":\"72b1102a-e79c-4240-b82e-d96f2b5312d5\",\"numberDisplay\":\"percent\",\"categoryDisplay\":\"default\",\"legendDisplay\":\"default\",\"nestedLegend\":false,\"layerType\":\"data\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"73d168b7-3b62-4c83-9f8f-d59ccb1ceea6\":{\"columns\":{\"d74c9301-1bce-472c-bcf5-3d4f3d69e6ab\":{\"label\":\"Top 5 values of ip\",\"dataType\":\"ip\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"ip\",\"isBucketed\":true,\"params\":{\"size\":5,\"orderBy\":{\"type\":\"column\",\"columnId\":\"72b1102a-e79c-4240-b82e-d96f2b5312d5\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"72b1102a-e79c-4240-b82e-d96f2b5312d5\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"d74c9301-1bce-472c-bcf5-3d4f3d69e6ab\",\"72b1102a-e79c-4240-b82e-d96f2b5312d5\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Top 5 IPs\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":13,\"w\":21,\"h\":10,\"i\":\"87bdb6b4-2c78-4491-b812-8a05061da493\"},\"panelIndex\":\"87bdb6b4-2c78-4491-b812-8a05061da493\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-310c919e-6479-4a10-b8b9-f0c8feb69262\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"310c919e-6479-4a10-b8b9-f0c8feb69262\",\"accessors\":[\"dd7f7b4a-c732-41f8-ab18-520a7b5f7b1a\"],\"position\":\"top\",\"seriesType\":\"bar_stacked\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"a2df1297-1f82-4bc1-a9e5-3657716c8bfe\",\"splitAccessor\":\"c539ed4f-b906-42a1-9036-a401b29ba1c5\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"310c919e-6479-4a10-b8b9-f0c8feb69262\":{\"columns\":{\"a2df1297-1f82-4bc1-a9e5-3657716c8bfe\":{\"label\":\"Filters\",\"dataType\":\"string\",\"operationType\":\"filters\",\"scale\":\"ordinal\",\"isBucketed\":true,\"params\":{\"filters\":[{\"label\":\"\",\"input\":{\"query\":\"scope : ENDPOINT\",\"language\":\"kuery\"}}]}},\"dd7f7b4a-c732-41f8-ab18-520a7b5f7b1a\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}},\"c539ed4f-b906-42a1-9036-a401b29ba1c5\":{\"label\":\"Top 15 values of msg\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"msg\",\"isBucketed\":true,\"params\":{\"size\":15,\"orderBy\":{\"type\":\"column\",\"columnId\":\"dd7f7b4a-c732-41f8-ab18-520a7b5f7b1a\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}}},\"columnOrder\":[\"a2df1297-1f82-4bc1-a9e5-3657716c8bfe\",\"c539ed4f-b906-42a1-9036-a401b29ba1c5\",\"dd7f7b4a-c732-41f8-ab18-520a7b5f7b1a\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Top Endpoint messages\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":21,\"y\":13,\"w\":21,\"h\":10,\"i\":\"3adf3d59-f407-49f8-866d-01868cd2b422\"},\"panelIndex\":\"3adf3d59-f407-49f8-866d-01868cd2b422\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsDatatable\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-6bb18b1d-e479-4493-84d0-3e03ae5680af\"}],\"state\":{\"visualization\":{\"layerId\":\"6bb18b1d-e479-4493-84d0-3e03ae5680af\",\"layerType\":\"data\",\"columns\":[{\"isTransposed\":false,\"columnId\":\"afd3e931-1327-4fba-9578-2ec874d60746\",\"width\":169.5},{\"isTransposed\":false,\"columnId\":\"6de0fe8f-c00e-4131-b503-56ab6748c258\",\"width\":316.3333333333333},{\"isTransposed\":false,\"columnId\":\"0f3195ad-4a49-4c86-bd53-f959e375fb47\",\"width\":201.83333333333334},{\"columnId\":\"866cd177-31d6-467a-a54e-1dbe2cddc4d9\",\"isTransposed\":false}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"6bb18b1d-e479-4493-84d0-3e03ae5680af\":{\"columns\":{\"afd3e931-1327-4fba-9578-2ec874d60746\":{\"label\":\"Top 5 values of scope\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"scope\",\"isBucketed\":true,\"params\":{\"size\":5,\"orderBy\":{\"type\":\"column\",\"columnId\":\"866cd177-31d6-467a-a54e-1dbe2cddc4d9\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"6de0fe8f-c00e-4131-b503-56ab6748c258\":{\"label\":\"Top 100 values of msg\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"msg\",\"isBucketed\":true,\"params\":{\"size\":100,\"orderBy\":{\"type\":\"column\",\"columnId\":\"866cd177-31d6-467a-a54e-1dbe2cddc4d9\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"0f3195ad-4a49-4c86-bd53-f959e375fb47\":{\"label\":\"Top 10 values of context\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"context\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"866cd177-31d6-467a-a54e-1dbe2cddc4d9\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"866cd177-31d6-467a-a54e-1dbe2cddc4d9\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"afd3e931-1327-4fba-9578-2ec874d60746\",\"0f3195ad-4a49-4c86-bd53-f959e375fb47\",\"6de0fe8f-c00e-4131-b503-56ab6748c258\",\"866cd177-31d6-467a-a54e-1dbe2cddc4d9\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Top 100 log messages\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":42,\"y\":13,\"w\":5,\"h\":10,\"i\":\"f69f88a6-ecca-4d78-955b-73c919f93368\"},\"panelIndex\":\"f69f88a6-ecca-4d78-955b-73c919f93368\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsMetric\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-23379a89-f323-4aed-9a31-697065d9d765\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"layerId\":\"23379a89-f323-4aed-9a31-697065d9d765\",\"accessor\":\"4a7fa1f5-f9b9-4a4d-bf04-156305695c13\",\"layerType\":\"data\",\"colorMode\":\"None\"},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"23379a89-f323-4aed-9a31-697065d9d765\":{\"columns\":{\"4a7fa1f5-f9b9-4a4d-bf04-156305695c13\":{\"label\":\"Average response time\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"duration\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true},\"customLabel\":true}},\"columnOrder\":[\"4a7fa1f5-f9b9-4a4d-bf04-156305695c13\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Current response time\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":23,\"w\":24,\"h\":10,\"i\":\"fd9092c9-08bd-4e55-b7ac-489f201212e6\"},\"panelIndex\":\"fd9092c9-08bd-4e55-b7ac-489f201212e6\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-c7d7d3a0-dcbd-4ddb-b949-50b2c2ebb9f7\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"area\",\"layers\":[{\"layerId\":\"c7d7d3a0-dcbd-4ddb-b949-50b2c2ebb9f7\",\"seriesType\":\"area\",\"xAccessor\":\"2310c8c9-6cfb-467b-9774-f30727e17502\",\"splitAccessor\":\"fca1c672-0435-40cb-9470-d2436aa29e2b\",\"accessors\":[\"8f66020e-98a4-40a1-8c3f-98aac6aa3b3a\"],\"layerType\":\"data\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c7d7d3a0-dcbd-4ddb-b949-50b2c2ebb9f7\":{\"columns\":{\"fca1c672-0435-40cb-9470-d2436aa29e2b\":{\"label\":\"Top 3 values of url\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"url\",\"isBucketed\":true,\"params\":{\"size\":3,\"orderBy\":{\"type\":\"column\",\"columnId\":\"8f66020e-98a4-40a1-8c3f-98aac6aa3b3a\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"2310c8c9-6cfb-467b-9774-f30727e17502\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"8f66020e-98a4-40a1-8c3f-98aac6aa3b3a\":{\"label\":\"Average of duration\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"duration\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"fca1c672-0435-40cb-9470-d2436aa29e2b\",\"2310c8c9-6cfb-467b-9774-f30727e17502\",\"8f66020e-98a4-40a1-8c3f-98aac6aa3b3a\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Response time (average)\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":24,\"y\":23,\"w\":22,\"h\":22,\"i\":\"ce03539a-a246-442b-b6ff-6f0ba127100a\"},\"panelIndex\":\"ce03539a-a246-442b-b6ff-6f0ba127100a\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsDatatable\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-312ab185-e6dc-4954-b768-b4a32c4b98ba\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"layerId\":\"312ab185-e6dc-4954-b768-b4a32c4b98ba\",\"layerType\":\"data\",\"columns\":[{\"isTransposed\":false,\"columnId\":\"af6e980a-feb3-441f-bf4d-a220d5868339\"},{\"isTransposed\":false,\"columnId\":\"9f597c76-47cd-4080-9bbd-9e3d94f6c5ae\"},{\"isTransposed\":false,\"columnId\":\"20e57cae-8a85-4c97-bf10-1d009b294264\",\"hidden\":false},{\"columnId\":\"05804846-0833-4aa1-acf5-5a3d7df9573b\",\"isTransposed\":false}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"312ab185-e6dc-4954-b768-b4a32c4b98ba\":{\"columns\":{\"af6e980a-feb3-441f-bf4d-a220d5868339\":{\"label\":\"Top 50 values of url\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"url\",\"isBucketed\":true,\"params\":{\"size\":50,\"orderBy\":{\"type\":\"column\",\"columnId\":\"9f597c76-47cd-4080-9bbd-9e3d94f6c5ae\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"9f597c76-47cd-4080-9bbd-9e3d94f6c5ae\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}},\"20e57cae-8a85-4c97-bf10-1d009b294264\":{\"label\":\"Percentile of 200 codes\",\"dataType\":\"number\",\"operationType\":\"percentile_rank\",\"sourceField\":\"statusCode\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"value\":200},\"customLabel\":true},\"05804846-0833-4aa1-acf5-5a3d7df9573b\":{\"label\":\"Average of duration\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"duration\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"af6e980a-feb3-441f-bf4d-a220d5868339\",\"9f597c76-47cd-4080-9bbd-9e3d94f6c5ae\",\"20e57cae-8a85-4c97-bf10-1d009b294264\",\"05804846-0833-4aa1-acf5-5a3d7df9573b\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"API hits by endpoint\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":33,\"w\":24,\"h\":12,\"i\":\"6f0757c3-f695-41b3-a455-bcf86da79406\"},\"panelIndex\":\"6f0757c3-f695-41b3-a455-bcf86da79406\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-248cdf95-161c-4de1-84a1-170fcbae975d\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"248cdf95-161c-4de1-84a1-170fcbae975d\",\"accessors\":[\"aa2e565f-9c9b-4448-a818-94dcc24a7e47\"],\"position\":\"top\",\"seriesType\":\"bar_stacked\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"7ec17b55-e226-4971-bfd9-72b4505d7b8f\",\"splitAccessor\":\"be435127-fcaf-4a6d-a2dc-b175ff4a236c\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"248cdf95-161c-4de1-84a1-170fcbae975d\":{\"columns\":{\"7ec17b55-e226-4971-bfd9-72b4505d7b8f\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"aa2e565f-9c9b-4448-a818-94dcc24a7e47\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}},\"be435127-fcaf-4a6d-a2dc-b175ff4a236c\":{\"label\":\"Top 10 values of url\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"url\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"aa2e565f-9c9b-4448-a818-94dcc24a7e47\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}}},\"columnOrder\":[\"be435127-fcaf-4a6d-a2dc-b175ff4a236c\",\"7ec17b55-e226-4971-bfd9-72b4505d7b8f\",\"aa2e565f-9c9b-4448-a818-94dcc24a7e47\"],\"incompleteColumns\":{}}}}}}},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Top 10 requests over time\"}]","timeRestore":false,"title":"KrakenD Application Log","version":1},"coreMigrationVersion":"8.4.1","id":"7b3ca1f0-3343-11ed-b2ac-1b9e6ebd5701","migrationVersion":{"dashboard":"8.4.0"},"references":[{"id":"security-solution-default","name":"61c51800-6120-40bb-9e79-0c2cb3a865ad:indexpattern-datasource-layer-62c0589c-3e4c-40b4-82cb-d9cd9aad3c45","type":"index-pattern"},{"id":"security-solution-default","name":"14d142f6-9a47-47fe-912a-5a48d4212bcc:indexpattern-datasource-layer-7d16ac75-e86f-47ff-a746-2bf0b9ea6a0f","type":"index-pattern"},{"id":"security-solution-default","name":"a5aaa0eb-0580-4970-a92f-f057b57c17aa:indexpattern-datasource-layer-5c308554-7dc3-4986-b31e-232c976657a2","type":"index-pattern"},{"id":"security-solution-default","name":"7bbec2fb-0ab6-4f6a-8259-cc46f91d5a9b:indexpattern-datasource-layer-73d168b7-3b62-4c83-9f8f-d59ccb1ceea6","type":"index-pattern"},{"id":"security-solution-default","name":"87bdb6b4-2c78-4491-b812-8a05061da493:indexpattern-datasource-layer-310c919e-6479-4a10-b8b9-f0c8feb69262","type":"index-pattern"},{"id":"security-solution-default","name":"3adf3d59-f407-49f8-866d-01868cd2b422:indexpattern-datasource-layer-6bb18b1d-e479-4493-84d0-3e03ae5680af","type":"index-pattern"},{"id":"security-solution-default","name":"f69f88a6-ecca-4d78-955b-73c919f93368:indexpattern-datasource-layer-23379a89-f323-4aed-9a31-697065d9d765","type":"index-pattern"},{"id":"security-solution-default","name":"fd9092c9-08bd-4e55-b7ac-489f201212e6:indexpattern-datasource-layer-c7d7d3a0-dcbd-4ddb-b949-50b2c2ebb9f7","type":"index-pattern"},{"id":"security-solution-default","name":"ce03539a-a246-442b-b6ff-6f0ba127100a:indexpattern-datasource-layer-312ab185-e6dc-4954-b768-b4a32c4b98ba","type":"index-pattern"},{"id":"security-solution-default","name":"6f0757c3-f695-41b3-a455-bcf86da79406:indexpattern-datasource-layer-248cdf95-161c-4de1-84a1-170fcbae975d","type":"index-pattern"}],"type":"dashboard","updated_at":"2022-09-13T09:07:24.175Z","version":"WzEyOTMsMV0="} +{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":0,\"w\":21,\"h\":13,\"i\":\"61c51800-6120-40bb-9e79-0c2cb3a865ad\"},\"panelIndex\":\"61c51800-6120-40bb-9e79-0c2cb3a865ad\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-62c0589c-3e4c-40b4-82cb-d9cd9aad3c45\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"line\",\"layers\":[{\"layerId\":\"62c0589c-3e4c-40b4-82cb-d9cd9aad3c45\",\"accessors\":[\"44dbb541-6d8b-4c4d-841c-040d2abbcaeb\"],\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"b195d83d-4051-48b3-82b5-31e22d06655e\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"62c0589c-3e4c-40b4-82cb-d9cd9aad3c45\":{\"columns\":{\"b195d83d-4051-48b3-82b5-31e22d06655e\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"44dbb541-6d8b-4c4d-841c-040d2abbcaeb\":{\"label\":\"Hits\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true},\"customLabel\":true}},\"columnOrder\":[\"b195d83d-4051-48b3-82b5-31e22d06655e\",\"44dbb541-6d8b-4c4d-841c-040d2abbcaeb\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"API hits\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":21,\"y\":0,\"w\":21,\"h\":13,\"i\":\"14d142f6-9a47-47fe-912a-5a48d4212bcc\"},\"panelIndex\":\"14d142f6-9a47-47fe-912a-5a48d4212bcc\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-7d16ac75-e86f-47ff-a746-2bf0b9ea6a0f\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"7d16ac75-e86f-47ff-a746-2bf0b9ea6a0f\",\"seriesType\":\"bar_stacked\",\"xAccessor\":\"1febc61b-de7d-4b9f-bc3e-a0f6b360b967\",\"splitAccessor\":\"eb953731-b64b-4699-9168-1bcfb7e800c3\",\"accessors\":[\"f7ae01a4-60b9-4492-b8fd-dbc3a2a13d27\"],\"layerType\":\"data\",\"palette\":{\"type\":\"palette\",\"name\":\"kibana_palette\"}}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"7d16ac75-e86f-47ff-a746-2bf0b9ea6a0f\":{\"columns\":{\"1febc61b-de7d-4b9f-bc3e-a0f6b360b967\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"f7ae01a4-60b9-4492-b8fd-dbc3a2a13d27\":{\"label\":\"Count of statusCode\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"statusCode\",\"params\":{\"emptyAsNull\":true}},\"eb953731-b64b-4699-9168-1bcfb7e800c3\":{\"label\":\"Top status codes\",\"dataType\":\"number\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"statusCode\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"f7ae01a4-60b9-4492-b8fd-dbc3a2a13d27\"},\"orderDirection\":\"asc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}},\"customLabel\":true}},\"columnOrder\":[\"1febc61b-de7d-4b9f-bc3e-a0f6b360b967\",\"eb953731-b64b-4699-9168-1bcfb7e800c3\",\"f7ae01a4-60b9-4492-b8fd-dbc3a2a13d27\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Status code distribution over time\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":42,\"y\":0,\"w\":6,\"h\":6,\"i\":\"a5aaa0eb-0580-4970-a92f-f057b57c17aa\"},\"panelIndex\":\"a5aaa0eb-0580-4970-a92f-f057b57c17aa\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsPie\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-5c308554-7dc3-4986-b31e-232c976657a2\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"shape\":\"donut\",\"layers\":[{\"layerId\":\"5c308554-7dc3-4986-b31e-232c976657a2\",\"groups\":[\"aa02addb-82df-4a3c-a052-b6564797c7ad\"],\"metric\":\"1327f462-8a28-4421-9b42-7a25f2cbf07e\",\"numberDisplay\":\"percent\",\"categoryDisplay\":\"default\",\"legendDisplay\":\"default\",\"nestedLegend\":false,\"layerType\":\"data\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"5c308554-7dc3-4986-b31e-232c976657a2\":{\"columns\":{\"aa02addb-82df-4a3c-a052-b6564797c7ad\":{\"label\":\"Top 10 values of statusCode\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"statusCode\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"1327f462-8a28-4421-9b42-7a25f2cbf07e\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"1327f462-8a28-4421-9b42-7a25f2cbf07e\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"aa02addb-82df-4a3c-a052-b6564797c7ad\",\"1327f462-8a28-4421-9b42-7a25f2cbf07e\"],\"incompleteColumns\":{}}}}}}},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"% of Status Codes\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":42,\"y\":6,\"w\":6,\"h\":7,\"i\":\"7bbec2fb-0ab6-4f6a-8259-cc46f91d5a9b\"},\"panelIndex\":\"7bbec2fb-0ab6-4f6a-8259-cc46f91d5a9b\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsPie\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-73d168b7-3b62-4c83-9f8f-d59ccb1ceea6\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"shape\":\"donut\",\"layers\":[{\"layerId\":\"73d168b7-3b62-4c83-9f8f-d59ccb1ceea6\",\"groups\":[\"d74c9301-1bce-472c-bcf5-3d4f3d69e6ab\"],\"metric\":\"72b1102a-e79c-4240-b82e-d96f2b5312d5\",\"numberDisplay\":\"percent\",\"categoryDisplay\":\"default\",\"legendDisplay\":\"default\",\"nestedLegend\":false,\"layerType\":\"data\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"73d168b7-3b62-4c83-9f8f-d59ccb1ceea6\":{\"columns\":{\"d74c9301-1bce-472c-bcf5-3d4f3d69e6ab\":{\"label\":\"Top 5 values of ip\",\"dataType\":\"ip\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"ip\",\"isBucketed\":true,\"params\":{\"size\":5,\"orderBy\":{\"type\":\"column\",\"columnId\":\"72b1102a-e79c-4240-b82e-d96f2b5312d5\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"72b1102a-e79c-4240-b82e-d96f2b5312d5\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"d74c9301-1bce-472c-bcf5-3d4f3d69e6ab\",\"72b1102a-e79c-4240-b82e-d96f2b5312d5\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Top 5 IPs\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":13,\"w\":21,\"h\":9,\"i\":\"87bdb6b4-2c78-4491-b812-8a05061da493\"},\"panelIndex\":\"87bdb6b4-2c78-4491-b812-8a05061da493\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-310c919e-6479-4a10-b8b9-f0c8feb69262\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"line\",\"layers\":[{\"layerId\":\"310c919e-6479-4a10-b8b9-f0c8feb69262\",\"accessors\":[\"96958bf4-e4ac-4a00-92a0-48b8ea3eece9\"],\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"90f99851-cd6e-44eb-9fde-8ab5ef8bc9a9\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"310c919e-6479-4a10-b8b9-f0c8feb69262\":{\"columns\":{\"90f99851-cd6e-44eb-9fde-8ab5ef8bc9a9\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"96958bf4-e4ac-4a00-92a0-48b8ea3eece9\":{\"label\":\"Average of duration\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"duration\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"90f99851-cd6e-44eb-9fde-8ab5ef8bc9a9\",\"96958bf4-e4ac-4a00-92a0-48b8ea3eece9\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Response time\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":21,\"y\":13,\"w\":21,\"h\":9,\"i\":\"3adf3d59-f407-49f8-866d-01868cd2b422\"},\"panelIndex\":\"3adf3d59-f407-49f8-866d-01868cd2b422\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsDatatable\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-6bb18b1d-e479-4493-84d0-3e03ae5680af\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"layerId\":\"6bb18b1d-e479-4493-84d0-3e03ae5680af\",\"layerType\":\"data\",\"columns\":[{\"columnId\":\"854a31ce-d958-4835-a5cc-7db421c7f84b\"},{\"columnId\":\"e419d9c5-416c-4efa-aec9-2497fe86c7b9\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"6bb18b1d-e479-4493-84d0-3e03ae5680af\":{\"columns\":{\"854a31ce-d958-4835-a5cc-7db421c7f84b\":{\"label\":\"Top 10 values of url\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"url\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"e419d9c5-416c-4efa-aec9-2497fe86c7b9\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"e419d9c5-416c-4efa-aec9-2497fe86c7b9\":{\"label\":\"Maximum of duration\",\"dataType\":\"number\",\"operationType\":\"max\",\"sourceField\":\"duration\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"854a31ce-d958-4835-a5cc-7db421c7f84b\",\"e419d9c5-416c-4efa-aec9-2497fe86c7b9\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Worst response times\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":42,\"y\":13,\"w\":6,\"h\":9,\"i\":\"f69f88a6-ecca-4d78-955b-73c919f93368\"},\"panelIndex\":\"f69f88a6-ecca-4d78-955b-73c919f93368\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsMetric\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-23379a89-f323-4aed-9a31-697065d9d765\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"layerId\":\"23379a89-f323-4aed-9a31-697065d9d765\",\"accessor\":\"4a7fa1f5-f9b9-4a4d-bf04-156305695c13\",\"layerType\":\"data\",\"colorMode\":\"None\"},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"23379a89-f323-4aed-9a31-697065d9d765\":{\"columns\":{\"4a7fa1f5-f9b9-4a4d-bf04-156305695c13\":{\"label\":\"Average response time\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"duration\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true},\"customLabel\":true}},\"columnOrder\":[\"4a7fa1f5-f9b9-4a4d-bf04-156305695c13\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Current response time\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":22,\"w\":24,\"h\":14,\"i\":\"fd9092c9-08bd-4e55-b7ac-489f201212e6\"},\"panelIndex\":\"fd9092c9-08bd-4e55-b7ac-489f201212e6\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-c7d7d3a0-dcbd-4ddb-b949-50b2c2ebb9f7\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"area\",\"layers\":[{\"layerId\":\"c7d7d3a0-dcbd-4ddb-b949-50b2c2ebb9f7\",\"seriesType\":\"area\",\"xAccessor\":\"2310c8c9-6cfb-467b-9774-f30727e17502\",\"splitAccessor\":\"fca1c672-0435-40cb-9470-d2436aa29e2b\",\"accessors\":[\"8f66020e-98a4-40a1-8c3f-98aac6aa3b3a\"],\"layerType\":\"data\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"c7d7d3a0-dcbd-4ddb-b949-50b2c2ebb9f7\":{\"columns\":{\"fca1c672-0435-40cb-9470-d2436aa29e2b\":{\"label\":\"Top 3 values of url\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"url\",\"isBucketed\":true,\"params\":{\"size\":3,\"orderBy\":{\"type\":\"column\",\"columnId\":\"8f66020e-98a4-40a1-8c3f-98aac6aa3b3a\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"2310c8c9-6cfb-467b-9774-f30727e17502\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"8f66020e-98a4-40a1-8c3f-98aac6aa3b3a\":{\"label\":\"Average of duration\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"duration\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"fca1c672-0435-40cb-9470-d2436aa29e2b\",\"2310c8c9-6cfb-467b-9774-f30727e17502\",\"8f66020e-98a4-40a1-8c3f-98aac6aa3b3a\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"Response time (average)\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":24,\"y\":22,\"w\":24,\"h\":32,\"i\":\"ce03539a-a246-442b-b6ff-6f0ba127100a\"},\"panelIndex\":\"ce03539a-a246-442b-b6ff-6f0ba127100a\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsDatatable\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-312ab185-e6dc-4954-b768-b4a32c4b98ba\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"layerId\":\"312ab185-e6dc-4954-b768-b4a32c4b98ba\",\"layerType\":\"data\",\"columns\":[{\"isTransposed\":false,\"columnId\":\"af6e980a-feb3-441f-bf4d-a220d5868339\"},{\"isTransposed\":false,\"columnId\":\"9f597c76-47cd-4080-9bbd-9e3d94f6c5ae\"},{\"isTransposed\":false,\"columnId\":\"20e57cae-8a85-4c97-bf10-1d009b294264\",\"hidden\":false},{\"columnId\":\"05804846-0833-4aa1-acf5-5a3d7df9573b\",\"isTransposed\":false}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"312ab185-e6dc-4954-b768-b4a32c4b98ba\":{\"columns\":{\"af6e980a-feb3-441f-bf4d-a220d5868339\":{\"label\":\"Top 50 values of url\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"url\",\"isBucketed\":true,\"params\":{\"size\":50,\"orderBy\":{\"type\":\"column\",\"columnId\":\"9f597c76-47cd-4080-9bbd-9e3d94f6c5ae\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}},\"9f597c76-47cd-4080-9bbd-9e3d94f6c5ae\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}},\"20e57cae-8a85-4c97-bf10-1d009b294264\":{\"label\":\"Percentile of 200 codes\",\"dataType\":\"number\",\"operationType\":\"percentile_rank\",\"sourceField\":\"statusCode\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"value\":200},\"customLabel\":true},\"05804846-0833-4aa1-acf5-5a3d7df9573b\":{\"label\":\"Average of duration\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"duration\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"af6e980a-feb3-441f-bf4d-a220d5868339\",\"9f597c76-47cd-4080-9bbd-9e3d94f6c5ae\",\"20e57cae-8a85-4c97-bf10-1d009b294264\",\"05804846-0833-4aa1-acf5-5a3d7df9573b\"],\"incompleteColumns\":{}}}}}}},\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"API hits by endpoint\"},{\"version\":\"8.4.1\",\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":36,\"w\":24,\"h\":18,\"i\":\"6f0757c3-f695-41b3-a455-bcf86da79406\"},\"panelIndex\":\"6f0757c3-f695-41b3-a455-bcf86da79406\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"id\":\"security-solution-default\",\"name\":\"indexpattern-datasource-layer-248cdf95-161c-4de1-84a1-170fcbae975d\",\"type\":\"index-pattern\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\"},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"248cdf95-161c-4de1-84a1-170fcbae975d\",\"accessors\":[\"aa2e565f-9c9b-4448-a818-94dcc24a7e47\"],\"position\":\"top\",\"seriesType\":\"bar_stacked\",\"showGridlines\":false,\"layerType\":\"data\",\"xAccessor\":\"7ec17b55-e226-4971-bfd9-72b4505d7b8f\",\"splitAccessor\":\"be435127-fcaf-4a6d-a2dc-b175ff4a236c\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"indexpattern\":{\"layers\":{\"248cdf95-161c-4de1-84a1-170fcbae975d\":{\"columns\":{\"7ec17b55-e226-4971-bfd9-72b4505d7b8f\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"aa2e565f-9c9b-4448-a818-94dcc24a7e47\":{\"label\":\"Count of records\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true}},\"be435127-fcaf-4a6d-a2dc-b175ff4a236c\":{\"label\":\"Top 10 values of url\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"url\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"aa2e565f-9c9b-4448-a818-94dcc24a7e47\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"}}}},\"columnOrder\":[\"be435127-fcaf-4a6d-a2dc-b175ff4a236c\",\"7ec17b55-e226-4971-bfd9-72b4505d7b8f\",\"aa2e565f-9c9b-4448-a818-94dcc24a7e47\"],\"incompleteColumns\":{}}}}}}},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"Top 10 requests over time\"}]","timeRestore":false,"title":"KrakenD Access Log","version":1},"coreMigrationVersion":"8.4.1","id":"0fced160-333c-11ed-b2ac-1b9e6ebd5701","migrationVersion":{"dashboard":"8.4.0"},"references":[{"id":"security-solution-default","name":"61c51800-6120-40bb-9e79-0c2cb3a865ad:indexpattern-datasource-layer-62c0589c-3e4c-40b4-82cb-d9cd9aad3c45","type":"index-pattern"},{"id":"security-solution-default","name":"14d142f6-9a47-47fe-912a-5a48d4212bcc:indexpattern-datasource-layer-7d16ac75-e86f-47ff-a746-2bf0b9ea6a0f","type":"index-pattern"},{"id":"security-solution-default","name":"a5aaa0eb-0580-4970-a92f-f057b57c17aa:indexpattern-datasource-layer-5c308554-7dc3-4986-b31e-232c976657a2","type":"index-pattern"},{"id":"security-solution-default","name":"7bbec2fb-0ab6-4f6a-8259-cc46f91d5a9b:indexpattern-datasource-layer-73d168b7-3b62-4c83-9f8f-d59ccb1ceea6","type":"index-pattern"},{"id":"security-solution-default","name":"87bdb6b4-2c78-4491-b812-8a05061da493:indexpattern-datasource-layer-310c919e-6479-4a10-b8b9-f0c8feb69262","type":"index-pattern"},{"id":"security-solution-default","name":"3adf3d59-f407-49f8-866d-01868cd2b422:indexpattern-datasource-layer-6bb18b1d-e479-4493-84d0-3e03ae5680af","type":"index-pattern"},{"id":"security-solution-default","name":"f69f88a6-ecca-4d78-955b-73c919f93368:indexpattern-datasource-layer-23379a89-f323-4aed-9a31-697065d9d765","type":"index-pattern"},{"id":"security-solution-default","name":"fd9092c9-08bd-4e55-b7ac-489f201212e6:indexpattern-datasource-layer-c7d7d3a0-dcbd-4ddb-b949-50b2c2ebb9f7","type":"index-pattern"},{"id":"security-solution-default","name":"ce03539a-a246-442b-b6ff-6f0ba127100a:indexpattern-datasource-layer-312ab185-e6dc-4954-b768-b4a32c4b98ba","type":"index-pattern"},{"id":"security-solution-default","name":"6f0757c3-f695-41b3-a455-bcf86da79406:indexpattern-datasource-layer-248cdf95-161c-4de1-84a1-170fcbae975d","type":"index-pattern"}],"type":"dashboard","updated_at":"2022-09-13T08:14:17.462Z","version":"WzY5LDFd"} +{"excludedObjects":[],"excludedObjectsCount":0,"exportedCount":3,"missingRefCount":0,"missingReferences":[]} \ No newline at end of file diff --git a/messaging/config/telemetry-dashboards/logstash/logstash.conf b/messaging/config/telemetry-dashboards/logstash/logstash.conf new file mode 100644 index 0000000..c49ece5 --- /dev/null +++ b/messaging/config/telemetry-dashboards/logstash/logstash.conf @@ -0,0 +1,36 @@ +input { + gelf { + port => 12201 + } +} + +filter { + # Grok expression matches several formats (EE and CE): + #[GIN] 2022/09/09 - 08:33:51 | 200 | 732.753µs | 172.20.0.1 | GET "/sequential" + #[KRAKEND] 2022/09/09 - 08:35:25.813 [AccessLog] | 200 | 92.944122ms | 172.20.0.1 | GET /market/simple + #[KRAKEND][SERVICE: AsyncAgent][AMQP][async-agent-demo] Starting the consumer + grok { + match => { "message" => '(\[%{WORD}\] %{DATA}%{SPACE}-%{SPACE}%{DATA}%{SPACE}(\[AccessLog\]%{SPACE})?\| %{NUMBER:statusCode} \|%{SPACE}%{NUMBER:duration}(m|µ|n|u)?s%{SPACE}\|%{SPACE}%{DATA:ip}%{SPACE}\|%{SPACE}%{WORD:verb}%{SPACE}"?(?[^"]+)"?)?((\[KRAKEND\])?\[%{WORD:scope}(: (?[^\]]+)(\]\[%{DATA:sublevel1})?(\]\[%{DATA:sublevel2})?)?\] %{GREEDYDATA:msg})?'} + } + + if [host] and ![host][name] { + mutate { + rename => { "[host]" => "[host][name]" } + } + } + mutate { + convert => { + "statusCode" => "integer" + "duration" => "float" + } +} +} + +output { + elasticsearch { + hosts => ["http://elasticsearch:9200"] + } + stdout { + codec => rubydebug + } +} diff --git a/messaging/config/telemetry-dashboards/prometheus/prometheus.yml b/messaging/config/telemetry-dashboards/prometheus/prometheus.yml new file mode 100644 index 0000000..1c8a0be --- /dev/null +++ b/messaging/config/telemetry-dashboards/prometheus/prometheus.yml @@ -0,0 +1,18 @@ +global: + scrape_interval: 15s + external_labels: + monitor: krakend_monitor + +scrape_configs: + - job_name: krakend_scrapper + scrape_interval: 5s + metrics_path: '/metrics' + static_configs: + - targets: + - 'krakend_ee:9090' + labels: + app: krakend + - targets: + - '192.168.1.22:9099' + labels: + app: local_krakend diff --git a/messaging/docker-compose.yaml b/messaging/docker-compose.yaml new file mode 100644 index 0000000..62f99d5 --- /dev/null +++ b/messaging/docker-compose.yaml @@ -0,0 +1,81 @@ +services: + kafkabroker: + image: apache/kafka:latest + hostname: kafkabroker + container_name: messaging-kafkabroker + ports: + - 9092:9092 + - 29092:29092 + environment: + KAFKA_BROKER_ID: 1 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT,CONTROLLER:PLAINTEXT + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafkabroker:29092,PLAINTEXT_HOST://localhost:9092 + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 + KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 + KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 + KAFKA_PROCESS_ROLES: broker,controller + KAFKA_NODE_ID: 1 + KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafkabroker:29093 + KAFKA_LISTENERS: PLAINTEXT://kafkabroker:29092,CONTROLLER://kafkabroker:29093,PLAINTEXT_HOST://0.0.0.0:9092 + KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT + KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER + KAFKA_LOG_DIRS: /tmp/kraft-combined-logs + CLUSTER_ID: KRAKENDKAFKACLUSTERID + seckafkabroker: + image: apache/kafka:latest + hostname: seckafkabroker + container_name: messaging-seckafkabroker + volumes: + - ./config/certs:/etc/kafka/secrets + ports: + - 49092:49092 + environment: + KAFKA_SSL_KEYSTORE_FILENAME: keystore.jks + KAFKA_SSL_KEYSTORE_CREDENTIALS: keystore.credentials.txt + KAFKA_SSL_KEY_CREDENTIALS: keystore.credentials.txt + KAFKA_SSL_TRUSTSTORE_FILENAME: keystore.jks + KAFKA_SSL_TRUSTSTORE_CREDENTIALS: keystore.credentials.txt + KAFKA_SSL_CLIENT_AUTH: required + KAFKA_BROKER_ID: 1 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: SSL:SSL,SSL-INTERNAL:SSL,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT,CONTROLLER:PLAINTEXT + KAFKA_ADVERTISED_LISTENERS: SSL://localhost:49092,SSL-INTERNAL://localhost:59092,PLAINTEXT://seckafkabroker:29092,PLAINTEXT_HOST://localhost:9092 + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 + KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 + KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 + KAFKA_PROCESS_ROLES: broker,controller + KAFKA_NODE_ID: 1 + KAFKA_CONTROLLER_QUORUM_VOTERS: 1@seckafkabroker:29093 + KAFKA_LISTENERS: SSL://0.0.0.0:49092,SSL-INTERNAL://localhost:59092,PLAINTEXT://seckafkabroker:29092,CONTROLLER://seckafkabroker:29093,PLAINTEXT_HOST://0.0.0.0:9092 + KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT + KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER + KAFKA_LOG_DIRS: /tmp/kraft-combined-logs + CLUSTER_ID: KRAKENDSECKAFKACLUSTERID + grafana: + image: grafana/grafana:latest + container_name: messaging-grafana + ports: + - "4000:3000" + volumes: + - "./config/telemetry-dashboards/grafana/datasources/prometheus-tempo.yml:/etc/grafana/provisioning/datasources/prometheus-tempo.yml" + - "./config/telemetry-dashboards/grafana/krakend/for-prometheus.json:/var/lib/grafana/dashboards/krakend/for-prometheus.json" + - "./config/telemetry-dashboards/grafana/dashboards/all.yml:/etc/grafana/provisioning/dashboards/all.yml" + environment: + - GF_SECURITY_ADMIN_USER=krakend + - GF_SECURITY_ADMIN_PASSWORD=krakend + prometheus: + image: prom/prometheus:latest + ports: + - "9090:9090" + volumes: + - "./config/telemetry-dashboards/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml" + jaeger: + image: jaegertracing/all-in-one:1 + environment: + - "COLLECTOR_OTLP_ENABLED=true" + ports: + - "16686:16686" # web interface + - "14268:14268" + - "54317:4317" # otlp grpc + - "54318:4318" # otlp http diff --git a/messaging/startup.sh b/messaging/startup.sh new file mode 100755 index 0000000..18dec1d --- /dev/null +++ b/messaging/startup.sh @@ -0,0 +1,40 @@ +#!/bin/sh + +docker compose up -d +echo "waiting for startup ..." +echo "5" +sleep 1 +echo "4" +sleep 1 +echo "3" +sleep 1 +echo "2" +sleep 1 +echo "1" +sleep 1 + +echo "creating topics:" + +echo "creating 'stockprice' topic" +docker exec messaging-kafkabroker \ + /opt/kafka/bin/kafka-topics.sh \ + --bootstrap-server localhost:9092 \ + --create \ + --topic stockprice \ + --partitions 3 + +echo "creating 'orderplacement' topic\n" +docker exec messaging-seckafkabroker \ + /opt/kafka/bin/kafka-topics.sh \ + --bootstrap-server localhost:9092 \ + --create \ + --topic orderplacement \ + --partitions 3 + +echo "creating 'portfolioupdates' topic\n" +docker exec messaging-seckafkabroker \ + /opt/kafka/bin/kafka-topics.sh \ + --bootstrap-server localhost:9092 \ + --create \ + --topic portfolioupdates \ + --partitions 3