zabbix_export:
  version: '7.0'
  template_groups:
    - uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6
      name: Templates/Applications
  templates:
    - uuid: 08ef3d687d754b0aba17e1dcbd77d4bd
      template: 'Cloudflare by HTTP'
      name: 'Cloudflare by HTTP'
      description: |
        The template to monitor Cloudflare to see your web traffic and DNS metrics.
        It works without any external scripts and uses Script item.
        
        Generated by official Zabbix template tool "Templator"
      vendor:
        name: Zabbix
        version: 7.0-0
      groups:
        - name: Templates/Applications
      items:
        - uuid: 2be79391779a4cd395723e62694262e8
          name: 'Total bandwidth'
          type: DEPENDENT
          key: cloudflare.bandwidth.all
          units: B
          description: 'The volume of all data.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.bandwidth.all
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: bandwidth
        - uuid: 7f5900d6c707405789624f84f502b042
          name: 'Cached bandwidth'
          type: DEPENDENT
          key: cloudflare.bandwidth.cached
          units: B
          description: 'The volume of cached data.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.bandwidth.cached
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: bandwidth
        - uuid: c5ab8cc281ff4f75bd4ada79d2c0d1e8
          name: 'Cache hit ratio of bandwidth'
          type: DEPENDENT
          key: cloudflare.bandwidth.cache_hit_ratio
          value_type: FLOAT
          units: '%'
          description: 'The ratio of the amount cached bandwidth to the bandwidth in percentage.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.bandwidth.cache_hit_ratio
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: bandwidth
          triggers:
            - uuid: acf573785c394924aae8ef74b2683fd1
              expression: 'max(/Cloudflare by HTTP/cloudflare.bandwidth.cache_hit_ratio,#3) < {$CLOUDFLARE.CACHED_BANDWIDTH.MIN.WARN}'
              name: 'Cached bandwidth is too low'
              event_name: 'Cached bandwidth is too low (less than {$CLOUDFLARE.CACHED_BANDWIDTH.MIN.WARN}% for 3 last measurements)'
              opdata: 'Current value: {ITEM.LASTVALUE1}'
              priority: WARNING
              tags:
                - tag: scope
                  value: performance
        - uuid: 901db6b121c7473485c91b0f27e7cf50
          name: 'SSL encrypted bandwidth'
          type: DEPENDENT
          key: cloudflare.bandwidth.ssl.encrypted
          units: B
          description: 'The volume of encrypted data.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.bandwidth.encrypted
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: bandwidth
        - uuid: 4637d88e62204f9d8fb9fc0f179c5319
          name: 'Unencrypted bandwidth'
          type: DEPENDENT
          key: cloudflare.bandwidth.ssl.unencrypted
          units: B
          description: 'The volume of unencrypted data.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.bandwidth.unencrypted
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: bandwidth
        - uuid: 96e88a64df014997b8c675cbc4bb97a1
          name: 'Uncached bandwidth'
          type: DEPENDENT
          key: cloudflare.bandwidth.uncached
          units: B
          description: 'The volume of uncached data.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.bandwidth.uncached
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: bandwidth
        - uuid: 6eff62f2786d42a7925bd516a1c2a958
          name: 'DNS queries'
          type: DEPENDENT
          key: cloudflare.dns.query.all
          units: conn
          description: 'The amount of all DNS queries.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.dns.query.all
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: dns
        - uuid: 4612a834ef054740ba5fea529a08e220
          name: 'Stale DNS queries'
          type: DEPENDENT
          key: cloudflare.dns.query.stale
          units: conn
          description: 'The number of stale DNS queries.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.dns.query.stale
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: dns
        - uuid: 4aeb289b631a402390a833e3c5227d38
          name: 'Uncached DNS queries'
          type: DEPENDENT
          key: cloudflare.dns.query.uncached
          units: conn
          description: 'The number of uncached DNS queries.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.dns.query.uncached
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: dns
        - uuid: 9450a68208fd4cb8bde009296d722064
          name: 'Get data'
          type: SCRIPT
          key: cloudflare.get
          delay: 0;m01
          history: '0'
          value_type: TEXT
          params: |
            var Cloudflare = {
            	params: {},
            
            	setParams: function (params) {
            		['api_endpoint', 'token', 'zone'].forEach(function (field) {
            			if (typeof params !== 'object' || typeof params[field] === 'undefined'
            					|| params[field] === '') {
            				throw 'Required param is not set: "' + field + '".';
            			}
            		});
            
            		Cloudflare.params = params;
            		if (typeof Cloudflare.params.api_endpoint === 'string') {
            			if (!Cloudflare.params.api_endpoint.endsWith('/')) {
            				Cloudflare.params.api_endpoint += '/';
            			}
            		}
            	},
            
            	request: function (method, query, data) {
            		var response,
            			request = new HttpRequest(),
            			url = Cloudflare.params.api_endpoint + query;
            
            		request.addHeader('Content-Type: application/json');
            		request.addHeader('Authorization: Bearer ' + Cloudflare.params.token);
            
            		if (typeof data !== 'undefined') {
            			data = JSON.stringify(data);
            		}
            
            		Zabbix.log(4, '[ Cloudflare ] Sending request: ' + url + ((typeof data === 'string') ? ('\n' + data) : ''));
            
            		switch (method) {
            			case 'get':
            				response = request.get(url, data);
            				break;
            
            			case 'post':
            				response = request.post(url, data);
            				break;
            
            			default:
            				throw 'Unsupported HTTP request method: ' + method;
            		}
            
            		Zabbix.log(4, '[ Cloudflare ] Received response with status code ' + request.getStatus() + ': ' + response);
            
            		if (request.getStatus() < 200 || request.getStatus() >= 300) {
            			throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
            		}
            
            		if (response !== null) {
            			try {
            				response = JSON.parse(response);
            			}
            			catch (error) {
            				throw 'Failed to parse response received from Cloudflare. Check debug log for more information.';
            			}
            		}
            
            		if (query === 'graphql/' && request.getStatus() == 200 && typeof response.errors !== 'undefined'
            				&& Array.isArray(response.errors)) {
            			throw 'Request failed with error "' + (getField(response, 'errors.0.message') || 'unknown') + '"';
            		}
            
            		return {
            			status: request.getStatus(),
            			response: response
            		};
            	}
            }
            
            function getField(object, field, def) {
            	var names = field.split('.');
            	var name = names.shift();
            
            	while (typeof name !== 'undefined') {
            		if (typeof object === undefined || typeof object[name] === 'undefined') {
            			return def;
            		}
            
            		object = object[name];
            		name = names.shift();
            	}
            
            	return object;
            }
            
            try {
            	Cloudflare.setParams(JSON.parse(value));
            
            	var datetime_end = new Date(),
            		datetime_start = new Date();
            
            	datetime_start.setTime(datetime_end.getTime() - 3600000);
            	datetime_start.setMinutes(0, 0, 0);
            	datetime_end.setTime(datetime_start.getTime());
            	datetime_end.setMinutes(59, 59, 0);
            
            	var datetime_start_str = datetime_start.toISOString(),
            		datetime_end_str = datetime_end.toISOString();
            
            	var data = {
            		"query": "{viewer {zones(filter: {zoneTag: \"" + Cloudflare.params.zone + "\"}) {\
            		httpRequests1hGroups(limit: 100 filter: {\
            			datetime_geq: \"" + datetime_start_str + "\",  datetime_leq: \"" + datetime_end_str + "\"\
            			}) {\
            				sum{\
            					requests \
            					cachedRequests \
            					encryptedRequests \
            					responseStatusMap{ requests edgeResponseStatus } \
            					bytes \
            					cachedBytes \
            					encryptedBytes \
            					threats \
            					pageViews \
            				}\
            				uniq{uniques}\
            				}\
            			}}}", "variables": {}
            	}
            	var result = Cloudflare.request('post', 'graphql/', data),
            		cloudflare = {},
            		res = getField(result.response, 'data.viewer.zones.0.httpRequests1hGroups.0.sum');
            
            	if (typeof res === 'object') {
            		cloudflare = {
            			requests: {
            				all: res.requests || 0,
            				cached: res.cachedRequests || 0,
            				encrypted: res.encryptedRequests || 0,
            				cache_hit_ratio: 0,
            				success_ratio: 0,
            				others_ratio: 0,
            				response_100: 0,
            				response_200: 0,
            				response_300: 0,
            				response_400: 0,
            				response_500: 0
            			},
            			bandwidth: {
            				all: res.bytes || 0,
            				cached: res.cachedBytes || 0,
            				cache_hit_ratio: 0,
            				encrypted: res.encryptedBytes || 0,
            			},
            			threats: {
            				all: res.threats || 0
            			},
            			pageviews: {
            				all: res.pageViews || 0
            			}
            		}
            
            		cloudflare.requests.uncached = res.requests - res.cachedRequests;
            		cloudflare.requests.unencrypted = cloudflare.requests.all - cloudflare.requests.encrypted;
            		cloudflare.bandwidth.uncached = cloudflare.bandwidth.all - cloudflare.bandwidth.cached;
            		cloudflare.bandwidth.unencrypted = cloudflare.bandwidth.all - cloudflare.bandwidth.encrypted;
            
            		if (Array.isArray(res.responseStatusMap)) {
            			res.responseStatusMap.forEach(function (element) {
            				var group = Math.floor((element.edgeResponseStatus / 100)) * 100;
            				cloudflare.requests['response_' + group] += element.requests;
            			});
            		}
            
            		if (cloudflare.requests.all > 0) {
            			cloudflare.requests.success_ratio = (cloudflare.requests.response_200
            				/ cloudflare.requests.all * 100).toFixed(2);
            			cloudflare.requests.others_ratio = ((cloudflare.requests.all - cloudflare.requests.response_200)
            				/ cloudflare.requests.all * 100).toFixed(2);
            			cloudflare.requests.cache_hit_ratio = (cloudflare.requests.cached
            				/ cloudflare.requests.all * 100).toFixed(2);
            		}
            
            		if (cloudflare.bandwidth.all > 0) {
            			cloudflare.bandwidth.cache_hit_ratio = (cloudflare.bandwidth.cached / cloudflare.bandwidth.all * 100).toFixed(2);
            		}
            
            		res = getField(result.response, 'data.viewer.zones.0.httpRequests1hGroups.0.uniq');
            
            		if (typeof res === 'object') {
            			cloudflare.uniques = {
            				all: res.uniques || 0
            			}
            		}
            
            		result = Cloudflare.request('get', 'zones/' + encodeURIComponent(Cloudflare.params.zone)
            			+ '/dns_analytics/report?dimensions=queryName&metrics=queryCount,uncachedCount,staleCount&since='
            			+ encodeURIComponent(datetime_start_str) + '&until=' + encodeURIComponent(datetime_end_str));
            
            		res = getField(result.response, 'result.totals');
            
            		if (typeof result.response.result === 'object') {
            			cloudflare.dns = {
            				query: {
            					all: res.queryCount || 0,
            					uncached: res.uncachedCount || 0,
            					stale: res.staleCount || 0
            				}
            			}
            		}
            	}
            
            	return JSON.stringify(cloudflare);
            }
            catch (error) {
            	error += (String(error).endsWith('.')) ? '' : '.';
            	Zabbix.log(3, '[ Cloudflare ] ERROR: ' + error);
            	throw 'Requesting failed: ' + error;
            }
          description: 'The JSON with result of Cloudflare API request.'
          parameters:
            - name: api_endpoint
              value: '{$CLOUDFLARE.API.URL}'
            - name: token
              value: '{$CLOUDFLARE.API.TOKEN}'
            - name: zone
              value: '{$CLOUDFLARE.ZONE_ID}'
          tags:
            - tag: component
              value: raw
        - uuid: 71efacd9f1dc46a7aa29876c8bf7906c
          name: 'Total page views'
          type: DEPENDENT
          key: cloudflare.pageviews.all
          units: pg
          description: 'The amount of all pageviews.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.pageviews.all
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: pageviews
        - uuid: d4a7431b1f6a4d3ab11551a36c98fbf7
          name: 'Total requests'
          type: DEPENDENT
          key: cloudflare.requests.all
          units: req
          description: 'The amount of all requests.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.all
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: cc9d651cdec94afeb12ead87b3c3e8f3
          name: 'Cached requests'
          type: DEPENDENT
          key: cloudflare.requests.cached
          units: req
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.cached
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: e1c2a1280d25439f8020b3ebc451d892
          name: 'Cache hit ratio % over time'
          type: DEPENDENT
          key: cloudflare.requests.cache_hit_ratio
          value_type: FLOAT
          units: '%'
          description: 'The ratio of the amount cached requests to all requests in percentage.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.cache_hit_ratio
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: 228912bdae724d70b1abe79510b69082
          name: 'Non-2xx responses ratio'
          type: DEPENDENT
          key: cloudflare.requests.others_ratio
          value_type: FLOAT
          units: '%'
          description: 'The ratio of the amount requests with non-2xx response codes to all requests in percentage.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.others_ratio
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
          triggers:
            - uuid: e76f4a61dd094419b6e0af706758e545
              expression: 'min(/Cloudflare by HTTP/cloudflare.requests.others_ratio,#3) > {$CLOUDFLARE.ERRORS.MAX.WARN}'
              name: 'Ratio of non-2xx responses is too high'
              event_name: 'Ratio of non-2xx responses is too high (more than {$CLOUDFLARE.ERRORS.MAX.WARN}% for 3 last measurements)'
              opdata: 'Current value: {ITEM.LASTVALUE1}'
              priority: AVERAGE
              description: 'A large number of errors can indicate a malfunction of the site.'
              tags:
                - tag: scope
                  value: performance
        - uuid: 0f427419265a4ef09f052a03c539125d
          name: 'Response codes 1xx'
          type: DEPENDENT
          key: cloudflare.requests.response_100
          units: req
          description: 'The number requests with 1xx response codes.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.response_100
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: 3ade3e726d314382a3e841b3d5cb5834
          name: 'Response codes 2xx'
          type: DEPENDENT
          key: cloudflare.requests.response_200
          units: req
          description: 'The number requests with 2xx response codes.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.response_200
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: 2caff86e7ca5400889f3b2bd4b6ba986
          name: 'Response codes 3xx'
          type: DEPENDENT
          key: cloudflare.requests.response_300
          units: req
          description: 'The number requests with 3xx response codes.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.response_300
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: b3510ec2adc74e10824365012c13250f
          name: 'Response codes 4xx'
          type: DEPENDENT
          key: cloudflare.requests.response_400
          units: req
          description: 'The number requests with 4xx response codes.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.response_400
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: 714ef2cbecbe4a93b20988a0bc6863a7
          name: 'Response codes 5xx'
          type: DEPENDENT
          key: cloudflare.requests.response_500
          units: req
          description: 'The number requests with 5xx response codes.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.response_500
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: d39fcd4fdc594257bea91de0890d326b
          name: 'SSL encrypted requests'
          type: DEPENDENT
          key: cloudflare.requests.ssl.encrypted
          units: req
          description: 'The number of encrypted requests.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.encrypted
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: acbbc431dfc3431583123380edb6da38
          name: 'Unencrypted requests'
          type: DEPENDENT
          key: cloudflare.requests.ssl.unencrypted
          units: req
          description: 'The number of unencrypted requests.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.unencrypted
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: 6100ff50001543ae83e84ab2c47260f3
          name: '2xx responses ratio'
          type: DEPENDENT
          key: cloudflare.requests.success_ratio
          value_type: FLOAT
          units: '%'
          description: 'The ratio of the amount requests with 2xx response codes to all requests in percentage.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.success_ratio
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: 7907f68e795b40fca1bd520556ea1fff
          name: 'Uncached requests'
          type: DEPENDENT
          key: cloudflare.requests.uncached
          units: req
          description: 'The number of uncached requests.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.requests.uncached
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: requests
        - uuid: 328051a78529494e943edda567aa0e24
          name: 'Total threats'
          type: DEPENDENT
          key: cloudflare.threats.all
          description: 'The number of all threats.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.threats.all
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: threats
        - uuid: d1a2ec213b084701805f3f974af25a21
          name: 'Unique visitors'
          type: DEPENDENT
          key: cloudflare.uniques.all
          units: conn
          description: 'The number of all visitors IPs.'
          preprocessing:
            - type: JSONPATH
              parameters:
                - $.uniques.all
          master_item:
            key: cloudflare.get
          tags:
            - tag: component
              value: uniques
      tags:
        - tag: class
          value: service
        - tag: target
          value: cloudflare
      macros:
        - macro: '{$CLOUDFLARE.API.TOKEN}'
          type: SECRET_TEXT
          description: 'Your Cloudflare API Token.'
        - macro: '{$CLOUDFLARE.API.URL}'
          value: 'https://api.cloudflare.com/client/v4'
          description: 'The URL of Cloudflare API endpoint.'
        - macro: '{$CLOUDFLARE.CACHED_BANDWIDTH.MIN.WARN}'
          value: '50'
          description: 'Minimum of cached bandwidth in %.'
        - macro: '{$CLOUDFLARE.ERRORS.MAX.WARN}'
          value: '30'
          description: 'Maximum responses with errors in %.'
        - macro: '{$CLOUDFLARE.ZONE_ID}'
          type: SECRET_TEXT
          description: 'Your Cloudflare Site Zone ID.'
      dashboards:
        - uuid: 51f1013e8a3d492faed27fe80b68fc53
          name: Overview
          pages:
            - widgets:
                - type: graph
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Cloudflare by HTTP'
                        name: 'Cloudflare: Bandwidth'
                    - type: STRING
                      name: reference
                      value: AAAAA
                - type: graph
                  'y': '5'
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Cloudflare by HTTP'
                        name: 'Cloudflare: DNS requests'
                    - type: STRING
                      name: reference
                      value: AAAAC
                - type: graph
                  'y': '10'
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Cloudflare by HTTP'
                        name: 'Cloudflare: HTTP responses ratio over time'
                    - type: STRING
                      name: reference
                      value: AAAAE
                - type: graph
                  'y': '15'
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Cloudflare by HTTP'
                        name: 'Cloudflare: HTTP response codes over time'
                    - type: STRING
                      name: reference
                      value: AAAAG
                - type: graph
                  x: '36'
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Cloudflare by HTTP'
                        name: 'Cloudflare: Web requests'
                    - type: STRING
                      name: reference
                      value: AAAAB
                - type: graph
                  x: '36'
                  'y': '5'
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Cloudflare by HTTP'
                        name: 'Cloudflare: Caching'
                    - type: STRING
                      name: reference
                      value: AAAAD
                - type: graph
                  x: '36'
                  'y': '10'
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Cloudflare by HTTP'
                        name: 'Cloudflare: IPs and threats'
                    - type: STRING
                      name: reference
                      value: AAAAF
  graphs:
    - uuid: 09e113216680490c9dd15805474bcac7
      name: 'Cloudflare: Bandwidth'
      graph_items:
        - color: 199C0D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.bandwidth.all
        - sortorder: '1'
          color: F63100
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.bandwidth.cached
        - sortorder: '2'
          color: 00611C
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.bandwidth.uncached
        - sortorder: '3'
          color: F7941D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.bandwidth.ssl.encrypted
        - sortorder: '4'
          color: FC6EA3
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.bandwidth.ssl.unencrypted
    - uuid: ed4ef5ce4a6a4c5692c22079d8879e0e
      name: 'Cloudflare: Caching'
      graph_items:
        - color: 199C0D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.cache_hit_ratio
        - sortorder: '1'
          color: F63100
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.bandwidth.cache_hit_ratio
    - uuid: 25df26cece41403d864f1ced5901bffa
      name: 'Cloudflare: DNS requests'
      graph_items:
        - color: 199C0D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.dns.query.all
        - sortorder: '1'
          color: F63100
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.dns.query.stale
        - sortorder: '2'
          color: 00611C
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.dns.query.uncached
    - uuid: 3fb3b089a115420bbc051c14fcd2f3aa
      name: 'Cloudflare: HTTP response codes over time'
      graph_items:
        - color: 199C0D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.response_100
        - sortorder: '1'
          color: F63100
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.response_200
        - sortorder: '2'
          color: 00611C
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.response_300
        - sortorder: '3'
          color: F7941D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.response_400
        - sortorder: '4'
          color: FC6EA3
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.response_500
    - uuid: c9e1708427a84182a406faec327bb6f1
      name: 'Cloudflare: HTTP responses ratio over time'
      graph_items:
        - color: 199C0D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.others_ratio
        - sortorder: '1'
          color: F63100
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.success_ratio
    - uuid: 6a0da78eec23423ab084a0760f1691be
      name: 'Cloudflare: IPs and threats'
      graph_items:
        - color: 199C0D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.threats.all
        - sortorder: '1'
          color: F63100
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.uniques.all
    - uuid: 659df99629a341449c77baf7a9b99b77
      name: 'Cloudflare: Web requests'
      graph_items:
        - color: 199C0D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.all
        - sortorder: '1'
          color: F63100
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.cached
        - sortorder: '2'
          color: 00611C
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.uncached
        - sortorder: '3'
          color: F7941D
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.ssl.encrypted
        - sortorder: '4'
          color: FC6EA3
          item:
            host: 'Cloudflare by HTTP'
            key: cloudflare.requests.ssl.unencrypted
