From 3bae9e56260d183ab0e7d90938e82ef4052b1c73 Mon Sep 17 00:00:00 2001 From: marcusperezNR <90863144+marcusperezNR@users.noreply.github.com> Date: Wed, 1 Nov 2023 17:47:35 -0700 Subject: [PATCH 01/14] Add Monitor Downtime Docs --- .../nerdgraph-synthetics-tutorial.mdx | 536 ++++++++++++------ 1 file changed, 359 insertions(+), 177 deletions(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 899237266bf..48f46d11553 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -6,41 +6,41 @@ tags: metaDescription: Use NerdGraph to programatically manage your synthetic monitors, private locations, and secure credentials. --- -Our [NerdGraph API](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/) allows you to automate creating, updating, or deleting your [synthetic monitors](/docs/synthetics/synthetic-monitoring/using-monitors/add-edit-monitors/). +Our [NerdGraph API](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/) allows you to automate creating, updating, or deleting your [synthetic monitors](/docs/synthetics/synthetic-monitoring/using-monitors/add-edit-monitors/). ## Requirements [#requirements] -Requirements include: +Requirements include: * [General NerdGraph requirements](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/#authentication) * Relevant user permissions: the same [synthetic monitoring permissions](/docs/synthetics/synthetic-monitoring/administration/user-roles-synthetic-monitoring) that apply for using the synthetics UI apply for using NerdGraph ## Understand fields in NerdGraph explorer [#fields] -You can view field definitions in [NerdGraph explorer](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/#explorer), but it may help to better understand the `LOCATION`, `PERIOD`, `TAGS`, and other fields. +You can view field definitions in [NerdGraph explorer](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/#explorer), but it may help to better understand the `LOCATION`, `PERIOD`, `TAGS`, and other fields. -To identify a [private location](/docs/synthetics/synthetic-monitoring/private-locations/private-locations-overview-monitor-internal-sites-add-new-locations) in your scripts, use the private location's entity GUID. To verify that a script executes successfully, also include the `vsePassword` attribute. For example: +To identify a [private location](/docs/synthetics/synthetic-monitoring/private-locations/private-locations-overview-monitor-internal-sites-add-new-locations) in your scripts, use the private location's entity GUID. To verify that a script executes successfully, also include the `vsePassword` attribute. For example: ``` locations: { private: { - guid: LOCATION_ENTITY_GUID, + guid: LOCATION_ENTITY_GUID, vsePassword: YOUR_VSE_PASSWORD } } ``` -[Public locations](/docs/synthetics/synthetic-monitoring/administration/synthetic-public-minion-ips/#location) use the location identifier without the AWS_ prefix, for example: +[Public locations](/docs/synthetics/synthetic-monitoring/administration/synthetic-public-minion-ips/#location) use the location identifier without the AWS_ prefix, for example: ``` locations: { public: ["US_EAST_2", "US_WEST_1"] } -``` +``` @@ -50,11 +50,11 @@ locations: { > The `PERIOD` attribute defines a time interval for your monitors to execute. To define the interval, use these forms: -* `EVERY_MINUTE` for every minute. +* `EVERY_MINUTE` for every minute. * `EVERY_N_MINUTES`, where 'N' is minutes. Supported values include `EVERY_5_MINUTES`, `EVERY_10_MINUTES`, `EVERY_15_MINUTES`, and `EVERY_30_MINUTES`. * `EVERY_HOUR` for every hour. -* `EVERY_N_HOURS`, where 'N' is hours. Supported values include `EVERY_6_HOURS` and `EVERY_12_HOURS`. -* `EVERY_DAY` for once a day. +* `EVERY_N_HOURS`, where 'N' is hours. Supported values include `EVERY_6_HOURS` and `EVERY_12_HOURS`. +* `EVERY_DAY` for once a day. -Some fields are for more advanced configurations. These are optional. +Some fields are for more advanced configurations. These are optional. For [ping monitors](#create-ping), these include: * HEADER_NAME: Your custom header names that appear on the request. -* HEADER_VALUE: The custom header value on the request. -* REDIRECT_IS_FAILURE: Your monitor reports a failure if it's redirected. -* VALIDATION_TEXT: If this text is not included in your monitor's response, it returns a failure. -* TLS_VALIDATION: Verifies the [validity](/docs/synthetics/synthetic-monitoring/using-monitors/add-edit-monitors/#simple) of the SSL certificate chain. +* HEADER_VALUE: The custom header value on the request. +* REDIRECT_IS_FAILURE: Your monitor reports a failure if it's redirected. +* VALIDATION_TEXT: If this text is not included in your monitor's response, it returns a failure. +* TLS_VALIDATION: Verifies the [validity](/docs/synthetics/synthetic-monitoring/using-monitors/add-edit-monitors/#simple) of the SSL certificate chain. For [simple browser monitors](#create-simple-browser): * RUNTIME_TYPE: The runtime type used by your monitor. "CHROME_BROWSER" is the only accepted value. -* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. "100" is the only accepted value. -* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. +* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. "100" is the only accepted value. +* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. For [scripted API monitors](#create-scripted-API): -* SCRIPT_CONTENT: The actual contents of the script. This should **not** be based64 encoded. +* SCRIPT_CONTENT: The actual contents of the script. This should **not** be based64 encoded. * RUNTIME_TYPE: The runtime type used by your monitor. "NODE_API" is the only accepted value. -* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. The only accepted value is `16.10`. -* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. +* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. The only accepted value is `16.10`. +* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. For [scripted browser monitors](#create-scripted-browser): -* SCRIPT_CONTENT: The actual contents of the script. This should **not** be based64 encoded. +* SCRIPT_CONTENT: The actual contents of the script. This should **not** be based64 encoded. * RUNTIME_TYPE: The runtime type used by your monitor. "CHROME_BROWSER" is the only accepted value. -* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. "100" is the only accepted value. -* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. +* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. "100" is the only accepted value. +* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. For [certificate check monitors](#create-certificate-check): -* DAYS_UNTIL_EXPIRATION: Notifies you when you need to update your certificate. For example, if you wanted a notification 30 days before the certificate expires, you would input 30. +* DAYS_UNTIL_EXPIRATION: Notifies you when you need to update your certificate. For example, if you wanted a notification 30 days before the certificate expires, you would input 30. For all monitors: @@ -120,7 +120,7 @@ Queries make requests to fetch data. To learn additional query capabilities avai title="Query monitors" > - You can query your synthetic monitors to get current status information about your data or details about the monitor configuration. Some query examples include: + You can query your synthetic monitors to get current status information about your data or details about the monitor configuration. Some query examples include: ``` { @@ -143,7 +143,7 @@ Queries make requests to fetch data. To learn additional query capabilities avai } } } -``` +``` @@ -206,11 +206,39 @@ Queries make requests to fetch data. To learn additional query capabilities avai ``` + + + You're able to query your monitor downtimes: + +``` +{ + actor { + entitySearch(query: "domain = 'SYNTH' AND type = 'MONITOR_DOWNTIME'") { + results { + entities { + accountId + guid + name + tags { + key + values + } + } + } + } + } +} +``` + + - Retrieve the script used in a scripted API or scripted browser monitor. Other monitor types will return an error. + Retrieve the script used in a scripted API or scripted browser monitor. Other monitor types will return an error. ``` { actor { @@ -252,7 +280,7 @@ Queries make requests to fetch data. To learn additional query capabilities avai ## Create your synthetic monitors [#create-monitors] -Below are some sample requests to automate the creation of your synthetic monitors. +Below are some sample requests to automate the creation of your synthetic monitors. Include the runtime object that includes `runtimeType`, `runtimeTypeVersion`, and `scriptLanguage` to use a newer runtime. Do not include the runtime object and these attributes to continue using a legacy runtime. @@ -263,30 +291,30 @@ Below are some sample requests to automate the creation of your synthetic monito id="create-ping" title="Create a ping monitor" > - Ping monitors check that your application is running. Here's an example for creating one in NerdGraph: + Ping monitors check that your application is running. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateSimpleMonitor ( - accountId: YOUR_ACCOUNT_ID + accountId: YOUR_ACCOUNT_ID monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, - status: STATUS, - uri: "MONITORED_URI", + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, + status: STATUS, + uri: "MONITORED_URI", advancedOptions: { customHeaders: { - name: "HEADER_NAME", + name: "HEADER_NAME", value: "HEADER_VALUE" - }, - redirectIsFailure: REDIRECT_IS_FAILURE, - responseValidationText: "VALIDATION_TEXT", - shouldBypassHeadRequest: BYPASS_HEAD_REQUEST, + }, + redirectIsFailure: REDIRECT_IS_FAILURE, + responseValidationText: "VALIDATION_TEXT", + shouldBypassHeadRequest: BYPASS_HEAD_REQUEST, useTlsValidation: TLS_VALIDATION - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -302,34 +330,34 @@ Below are some sample requests to automate the creation of your synthetic monito id="create-simple-browser" title="Create a simple browser monitor" > -Simple browser monitors use Chrome instances to mimic customer visits. Here's an example for creating one in NerdGraph: +Simple browser monitors use Chrome instances to mimic customer visits. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateSimpleBrowserMonitor ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - status: STATUS, - uri: "MONITORED_URI", + status: STATUS, + uri: "MONITORED_URI", advancedOptions: { customHeaders: { - name: "HEADER_NAME", + name: "HEADER_NAME", value: "HEADER_VALUE" - }, - enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT, - responseValidationText: "VALIDATION_TEXT", + }, + enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT, + responseValidationText: "VALIDATION_TEXT", useTlsValidation: TLS_VALIDATION - }, + }, apdexTarget: APDEX_TARGET ) { errors { @@ -346,28 +374,28 @@ Simple browser monitors use Chrome instances to mimic customer visits. Here's an title="Create a scripted browser" > - [Scripted browser monitors](/docs/synthetics/synthetic-monitoring/scripting-monitors/introduction-scripted-browser-monitors) are more complex interactions with your pages and applications. Here's an example for creating one in NerdGraph: - + [Scripted browser monitors](/docs/synthetics/synthetic-monitoring/scripting-monitors/introduction-scripted-browser-monitors) are more complex interactions with your pages and applications. Here's an example for creating one in NerdGraph: + ``` mutation { syntheticsCreateScriptBrowserMonitor ( - accountId: YOUR_ACCOUNT_ID, - monitor: { + accountId: YOUR_ACCOUNT_ID, + monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "MONITOR_NAME", + }, + name: "MONITOR_NAME", period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - script: "SCRIPT_CONTENT", - status: STATUS, + script: "SCRIPT_CONTENT", + status: STATUS, advancedOptions: { enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -385,25 +413,25 @@ Simple browser monitors use Chrome instances to mimic customer visits. Here's an title="Create a scripted API monitor" > -[Scripted API monitors](/docs/synthetics/synthetic-monitoring/scripting-monitors/write-synthetic-api-tests) check your API endpoints. Here's an example for creating one in NerdGraph: +[Scripted API monitors](/docs/synthetics/synthetic-monitoring/scripting-monitors/write-synthetic-api-tests) check your API endpoints. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateScriptApiMonitor ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", + }, + name: "YOUR_MONITOR_NAME", period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - script: "SCRIPT_CONTENT", - status: STATUS, + script: "SCRIPT_CONTENT", + status: STATUS, apdexTarget: APDEX_TARGET } ) { @@ -421,22 +449,22 @@ Simple browser monitors use Chrome instances to mimic customer visits. Here's an id="create-step" title="Create a step monitor" > - Step monitors provide codeless multi-step browser based monitors. Here's an example for creating one in NerdGraph: + Step monitors provide codeless multi-step browser based monitors. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateStepMonitor ( - accountId: NR_ACCOUNT_ID, + accountId: NR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "MONITOR_NAME", - period: PERIOD, - status: STATUS, + }, + name: "MONITOR_NAME", + period: PERIOD, + status: STATUS, steps: [{ - ordinal: 0, - type: NAVIGATE, + ordinal: 0, + type: NAVIGATE, values: ["MONITORED_URI"],["USER_AGENT"] },{ ordinal: STEP_NUMBER, @@ -445,7 +473,7 @@ mutation { }] advancedOptions: { enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -464,21 +492,21 @@ mutation { title="Create a certificate check monitor" > -Set up monitors to notify you when your SSL certificates are about to expire. Here's an example for creating one in NerdGraph: +Set up monitors to notify you when your SSL certificates are about to expire. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateCertCheckMonitor ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, monitor: { - domain: "DOMAIN", + domain: "DOMAIN", locations: { public: ["LOCATION_1", "LOCATION_2"] }, - name: "YOUR_MONITOR_NAME", - numberDaysToFailBeforeCertExpires: DAYS_UNTIL_EXPIRATION, - period: PERIOD, - status: STATUS, + name: "YOUR_MONITOR_NAME", + numberDaysToFailBeforeCertExpires: DAYS_UNTIL_EXPIRATION, + period: PERIOD, + status: STATUS, apdexTarget: APDEX_TARGET } ) { @@ -497,23 +525,23 @@ Set up monitors to notify you when your SSL certificates are about to expire. He title="Create a broken links monitor" > -Broken links monitors check the links on a webpage for failure. Here's an example for creating one in NerdGraph: +Broken links monitors check the links on a webpage for failure. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateBrokenLinksMonitor ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, - status: STATUS, - apdexTarget: APDEX_TARGET, - uri: "MONITOR_URI", + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, + status: STATUS, + apdexTarget: APDEX_TARGET, + uri: "MONITOR_URI", tags: { - key: "YOUR_TAG_NAME", + key: "YOUR_TAG_NAME", values: "TAG_VALUE" } } @@ -528,14 +556,14 @@ mutation { ``` - + ## Update your synthetic monitors [#update-monitors] While you can't change the monitor type after creating it, you can update its settings. Only the guid and the settings that need updated are required as part of the request. - Include the runtime object that includes runtimeType, runtimeTypeVersion, and scriptLanguage to [upgrade a monitor](#upgrade-monitor-runtime) to use a newer runtime. Include this object and set these attributes to empty string to downgrade to a legacy runtime. Do not include this object and these attributes to continue using a legacy runtime. + Include the runtime object that includes runtimeType, runtimeTypeVersion, and scriptLanguage to [upgrade a monitor](#upgrade-monitor-runtime) to use a newer runtime. Include this object and set these attributes to empty string to downgrade to a legacy runtime. Do not include this object and these attributes to continue using a legacy runtime. @@ -544,30 +572,30 @@ While you can't change the monitor type after creating it, you can update its se title="Update a ping monitor" > -Use this to update your ping monitors: +Use this to update your ping monitors: ``` mutation { syntheticsUpdateSimpleMonitor ( - guid: "ENTITY_GUID", + guid: "ENTITY_GUID", monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, - status: STATUS, - uri: "MONITORED_URI", + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, + status: STATUS, + uri: "MONITORED_URI", advancedOptions: { customHeaders: { - name: "HEADER_NAME", + name: "HEADER_NAME", value: "HEADER_VALUE" - }, - redirectIsFailure: REDIRECT_IS_FAILURE, - responseValidationText: "VALIDATION_TEXT", - shouldBypassHeadRequest: BYPASS_HEAD_REQUEST, + }, + redirectIsFailure: REDIRECT_IS_FAILURE, + responseValidationText: "VALIDATION_TEXT", + shouldBypassHeadRequest: BYPASS_HEAD_REQUEST, useTlsValidation: TLS_VALIDATION - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -589,29 +617,29 @@ To update a simple browser monitor (including the ability to upgrade the runtime ``` mutation { syntheticsUpdateSimpleBrowserMonitor ( - guid: ENTITY_GUID, + guid: ENTITY_GUID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - status: STATUS, - uri: "MONITORED_URI", + status: STATUS, + uri: "MONITORED_URI", advancedOptions: { customHeaders: { - name: "HEADER_NAME", + name: "HEADER_NAME", value: "HEADER_VALUE" - }, - enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT, - responseValidationText: "VALIDATION_TEXT", + }, + enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT, + responseValidationText: "VALIDATION_TEXT", useTlsValidation: TLS_VALIDATION - }, + }, apdexTarget: APDEX_TARGET ) { errors { @@ -631,23 +659,23 @@ To update a scripted browser monitor (including the ability to upgrade the runti ``` mutation { syntheticsUpdateScriptBrowserMonitor ( - guid: ENTITY_GUID, - monitor: { + guid: ENTITY_GUID, + monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "MONITOR_NAME", + }, + name: "MONITOR_NAME", period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - script: "SCRIPT_CONTENT", - status: STATUS, + script: "SCRIPT_CONTENT", + status: STATUS, advancedOptions: { enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -669,20 +697,20 @@ To update a scripted API monitor (including the ability to upgrade the runtime v ``` mutation { syntheticsUpdateScriptApiMonitor ( - guid: ENTITY_GUID, + guid: ENTITY_GUID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", + }, + name: "YOUR_MONITOR_NAME", period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - script: "SCRIPT_CONTENT", - status: STATUS, + script: "SCRIPT_CONTENT", + status: STATUS, apdexTarget: APDEX_TARGET } ) { @@ -705,17 +733,17 @@ To update a scripted API monitor (including the ability to upgrade the runtime v ``` mutation { syntheticsCreateStepMonitor ( - accountId: NR_ACCOUNT_ID, + accountId: NR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "MONITOR_NAME", - period: PERIOD, - status: STATUS, + }, + name: "MONITOR_NAME", + period: PERIOD, + status: STATUS, steps: [{ - ordinal: 0, - type: NAVIGATE, + ordinal: 0, + type: NAVIGATE, values: ["MONITORED_URI"],["USER_AGENT"] },{ ordinal: STEP_NUMBER, @@ -724,7 +752,7 @@ mutation { }] advancedOptions: { enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -745,16 +773,16 @@ Use this to update a certificate check monitor: ``` mutation { syntheticsUpdateCertCheckMonitor ( - guid: ENTITY_GUID, + guid: ENTITY_GUID, monitor: { - domain: "DOMAIN", + domain: "DOMAIN", locations: { public: ["LOCATION_1", "LOCATION_2"] }, - name: "YOUR_MONITOR_NAME", - numberDaysToFailBeforeCertExpires: DAYS_UNTIL_EXPIRATION, - period: PERIOD, - status: STATUS, + name: "YOUR_MONITOR_NAME", + numberDaysToFailBeforeCertExpires: DAYS_UNTIL_EXPIRATION, + period: PERIOD, + status: STATUS, apdexTarget: APDEX_TARGET } ) { @@ -772,22 +800,22 @@ Use this to update a certificate check monitor: title="Update a broken links monitor" > Use this to update a broken links monitor: - + ``` mutation { syntheticsUpdateBrokenLinksMonitor ( - guid: ENTITY_GUID, + guid: ENTITY_GUID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, - status: STATUS, - apdexTarget: APDEX_TARGET, - uri: "MONITOR_URI", + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, + status: STATUS, + apdexTarget: APDEX_TARGET, + uri: "MONITOR_URI", tags: { - key: "YOUR_TAG_NAME", + key: "YOUR_TAG_NAME", values: "TAG_VALUE" } } @@ -805,20 +833,20 @@ mutation { id="upgrade-monitor-runtime" title="Upgrade a monitor's runtime" > -You can use the below example to update a simple browser, scripted API, or scripted browser monitor to the new Chrome 100+ or Node.js 16.10 runtimes. The following example upgrades a scripted browser monitor to the new runtime from the legacy runtime. +You can use the below example to update a simple browser, scripted API, or scripted browser monitor to the new Chrome 100+ or Node.js 16.10 runtimes. The following example upgrades a scripted browser monitor to the new runtime from the legacy runtime. -* To update a simple browser monitor using the below example, change the mutation to `syntheticsUpdateSimpleBrowserMonitor` instead of `syntheticsUpdateScriptBrowserMonitor`. +* To update a simple browser monitor using the below example, change the mutation to `syntheticsUpdateSimpleBrowserMonitor` instead of `syntheticsUpdateScriptBrowserMonitor`. * To update a scripted API monitor using the below example, change the mutation to `syntheticsUpdateScriptApiMonitor` instead of `syntheticsUpdateScriptBrowserMonitor`. -Check out [optional-fields](#optional-fields) for additional details on runtime settings. +Check out [optional-fields](#optional-fields) for additional details on runtime settings. ``` mutation { - syntheticsUpdateScriptBrowserMonitor ( - guid: "", + syntheticsUpdateScriptBrowserMonitor ( + guid: "", monitor: { runtime: { - runtimeType: "RUNTIME_TYPE", - runtimeTypeVersion: "RUNTIME_TYPE_VERSION", + runtimeType: "RUNTIME_TYPE", + runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } } @@ -837,7 +865,7 @@ Check out [optional-fields](#optional-fields) for additional details on runtime ## Delete a synthetic monitor [#delete-monitor] -Use these scripts to delete your monitors: +Use these scripts to delete your monitors: - + ## Manage your private locations [#private-locations] -A [private location](/docs/synthetics/synthetic-monitoring/private-locations/private-locations-overview-monitor-internal-sites-add-new-locations) allows you to monitor applications behind your firewall. When you create a private location, you install and configure private minions to execute the monitors assigned to that private location. +A [private location](/docs/synthetics/synthetic-monitoring/private-locations/private-locations-overview-monitor-internal-sites-add-new-locations) allows you to monitor applications behind your firewall. When you create a private location, you install and configure private minions to execute the monitors assigned to that private location. - + ``` mutation { syntheticsUpdatePrivateLocation ( - guid: YOUR_ENTITY_GUID, - description: "EnterYourDescription", + guid: YOUR_ENTITY_GUID, + description: "EnterYourDescription", verifiedScriptExecution: true ) { description @@ -934,7 +962,7 @@ A [private location](/docs/synthetics/synthetic-monitoring/private-locations/pri title="Purge a private location job queue" > -If you need to clear an unwieldy backlog, use this: +If you need to clear an unwieldy backlog, use this: ``` mutation { @@ -964,10 +992,10 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ``` mutation { syntheticsCreateSecureCredential ( - accountId: YOUR_ENTITY_GUID, - description: "YourOptionalDescription", - key: SECURE_CREDENTIAL_NAME, - value: SECURE_CREDENTIAL_VALUE + accountId: YOUR_ENTITY_GUID, + description: "YourOptionalDescription", + key: SECURE_CREDENTIAL_NAME, + value: SECURE_CREDENTIAL_VALUE ) { errors { description @@ -985,9 +1013,9 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ``` mutation { syntheticsUpdateSecureCredential ( - accountId: YOUR_ACCOUNT_ID, - description: "YourOptionalDescription", - key: SECURE_CREDENTIAL_NAME, + accountId: YOUR_ACCOUNT_ID, + description: "YourOptionalDescription", + key: SECURE_CREDENTIAL_NAME, value: SECURE_CREDENTIAL_VALUE) { createdAt lastUpdate @@ -1007,7 +1035,7 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ``` mutation { syntheticsDeleteSecureCredential ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, key: SECURE_CREDENTIAL_NAME ) { errors { @@ -1018,3 +1046,157 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ``` + +## Manage your monitor downtimes [#monitor-downtimes] + +A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times) allows you to specify times that your synthetic monitors cease alerting, while still preserving your SLA report metrics. + + + + + ``` + mutation { + syntheticsCreateOnceMonitorDowntime ( + accountId: NR_ACCOUNT_ID, + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime + } + } + ``` + + + +``` + mutation { + syntheticsCreateDailyMonitorDowntime ( + accountId: NR_ACCOUNT_ID, + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime + } + } + ``` + + + +``` + mutation { + syntheticsCreateWeeklyMonitorDowntime ( + accountId: NR_ACCOUNT_ID, + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime + } + } + ``` + + + +``` + mutation { + syntheticsCreateMonthlyMonitorDowntime ( + accountId: NR_ACCOUNT_ID, + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime + } + } + ``` + + + + ``` + mutation { + syntheticsEditMonitorDowntime ( + guid: DOWNTIME_ENTITY_GUID, + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + once: { + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" + } + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime + } + } + ``` + + + + ``` + mutation { + syntheticsDeleteMonitorDowntime ( + guid: DOWNTIME_ENTITY_GUID + ) { + guid + } + } + ``` + + From 08ca31ecc0510eaa451d45b349c16a7c80ea84ab Mon Sep 17 00:00:00 2001 From: Marcus Perez Date: Wed, 1 Nov 2023 18:24:19 -0700 Subject: [PATCH 02/14] Update create downtime blocks --- .../nerdgraph-synthetics-tutorial.mdx | 152 +++++++++++------- 1 file changed, 96 insertions(+), 56 deletions(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 48f46d11553..040e7fe3611 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -1061,11 +1061,11 @@ A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monito mutation { syntheticsCreateOnceMonitorDowntime ( accountId: NR_ACCOUNT_ID, - name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" + name: "MonitorDowntimeName", + monitorGuids: ["OptionalMonitorEntityGuid"], + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss" ) { guid, accountId, @@ -1083,78 +1083,118 @@ A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monito title="Create a monitor downtime that runs daily" > -``` - mutation { + ``` + mutation { syntheticsCreateDailyMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" + accountId: NR_ACCOUNT_ID, + name: "MonitorDowntimeName", + monitorGuids: ["MonitorEntityGuid"], + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss", + endRepeat: { + onDate: "yyyy-MM-ddTHH:mm:ss", + onRepeat: Int + } ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime - } + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime, + endRepeat { + onDate, + onRepeat + } + } } - ``` + ``` -``` - mutation { + ``` + mutation { syntheticsCreateWeeklyMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" + accountId: NR_ACCOUNT_ID, + name: "MonitorDowntimeName", + monitorGuids: ["MonitorEntityGuid"], + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss", + endRepeat: { + onDate: "yyyy-MM-ddTHH:mm:ss", + onRepeat: Int + }, + maintenanceDays: [WeekDaysEnums] ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime - } + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime, + endRepeat { + onDate, + onRepeat + }, + maintenanceDays + } } - ``` + ``` -``` - mutation { + ``` + mutation { syntheticsCreateMonthlyMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" + accountId: NR_ACCOUNT_ID, + name: "MonitorDowntimeName", + monitorGuids: ["MonitorEntityGuid"], + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss", + endRepeat: { + onDate: "yyyy-MM-ddTHH:mm:ss", + onRepeat: Int + }, + frequency: { + daysOfWeek: { + weekDay: WeekDaysEnum, + ordinalDayOfMonth: DayOfMonthOrdinal + }, + daysOfMonth: [Int] + } ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime - } + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime, + endRepeat { + onDate, + onRepeat + }, + frequency { + daysOfWeek { + weekDay, + ordinalDayOfMonth + }, + daysOfMonth + } + } } - ``` + ``` Date: Wed, 1 Nov 2023 18:26:36 -0700 Subject: [PATCH 03/14] Revert "Update create downtime blocks" This reverts commit 08ca31ecc0510eaa451d45b349c16a7c80ea84ab. --- .../nerdgraph-synthetics-tutorial.mdx | 152 +++++++----------- 1 file changed, 56 insertions(+), 96 deletions(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 040e7fe3611..48f46d11553 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -1061,11 +1061,11 @@ A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monito mutation { syntheticsCreateOnceMonitorDowntime ( accountId: NR_ACCOUNT_ID, - name: "MonitorDowntimeName", - monitorGuids: ["OptionalMonitorEntityGuid"], - timezone: "Timezone", - startTime: "yyyy-MM-ddTHH:mm:ss", - endTime: "yyyy-MM-ddTHH:mm:ss" + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" ) { guid, accountId, @@ -1083,118 +1083,78 @@ A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monito title="Create a monitor downtime that runs daily" > - ``` - mutation { +``` + mutation { syntheticsCreateDailyMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MonitorDowntimeName", - monitorGuids: ["MonitorEntityGuid"], - timezone: "Timezone", - startTime: "yyyy-MM-ddTHH:mm:ss", - endTime: "yyyy-MM-ddTHH:mm:ss", - endRepeat: { - onDate: "yyyy-MM-ddTHH:mm:ss", - onRepeat: Int - } + accountId: NR_ACCOUNT_ID, + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime, - endRepeat { - onDate, - onRepeat - } - } + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime } - ``` + } + ``` - ``` - mutation { +``` + mutation { syntheticsCreateWeeklyMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MonitorDowntimeName", - monitorGuids: ["MonitorEntityGuid"], - timezone: "Timezone", - startTime: "yyyy-MM-ddTHH:mm:ss", - endTime: "yyyy-MM-ddTHH:mm:ss", - endRepeat: { - onDate: "yyyy-MM-ddTHH:mm:ss", - onRepeat: Int - }, - maintenanceDays: [WeekDaysEnums] + accountId: NR_ACCOUNT_ID, + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime, - endRepeat { - onDate, - onRepeat - }, - maintenanceDays - } + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime } - ``` + } + ``` - ``` - mutation { +``` + mutation { syntheticsCreateMonthlyMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MonitorDowntimeName", - monitorGuids: ["MonitorEntityGuid"], - timezone: "Timezone", - startTime: "yyyy-MM-ddTHH:mm:ss", - endTime: "yyyy-MM-ddTHH:mm:ss", - endRepeat: { - onDate: "yyyy-MM-ddTHH:mm:ss", - onRepeat: Int - }, - frequency: { - daysOfWeek: { - weekDay: WeekDaysEnum, - ordinalDayOfMonth: DayOfMonthOrdinal - }, - daysOfMonth: [Int] - } + accountId: NR_ACCOUNT_ID, + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime, - endRepeat { - onDate, - onRepeat - }, - frequency { - daysOfWeek { - weekDay, - ordinalDayOfMonth - }, - daysOfMonth - } - } + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime } - ``` + } + ``` Date: Wed, 1 Nov 2023 18:27:25 -0700 Subject: [PATCH 04/14] Revert "Add Monitor Downtime Docs" This reverts commit 3bae9e56260d183ab0e7d90938e82ef4052b1c73. --- .../nerdgraph-synthetics-tutorial.mdx | 536 ++++++------------ 1 file changed, 177 insertions(+), 359 deletions(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 48f46d11553..899237266bf 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -6,41 +6,41 @@ tags: metaDescription: Use NerdGraph to programatically manage your synthetic monitors, private locations, and secure credentials. --- -Our [NerdGraph API](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/) allows you to automate creating, updating, or deleting your [synthetic monitors](/docs/synthetics/synthetic-monitoring/using-monitors/add-edit-monitors/). +Our [NerdGraph API](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/) allows you to automate creating, updating, or deleting your [synthetic monitors](/docs/synthetics/synthetic-monitoring/using-monitors/add-edit-monitors/). ## Requirements [#requirements] -Requirements include: +Requirements include: * [General NerdGraph requirements](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/#authentication) * Relevant user permissions: the same [synthetic monitoring permissions](/docs/synthetics/synthetic-monitoring/administration/user-roles-synthetic-monitoring) that apply for using the synthetics UI apply for using NerdGraph ## Understand fields in NerdGraph explorer [#fields] -You can view field definitions in [NerdGraph explorer](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/#explorer), but it may help to better understand the `LOCATION`, `PERIOD`, `TAGS`, and other fields. +You can view field definitions in [NerdGraph explorer](/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/#explorer), but it may help to better understand the `LOCATION`, `PERIOD`, `TAGS`, and other fields. -To identify a [private location](/docs/synthetics/synthetic-monitoring/private-locations/private-locations-overview-monitor-internal-sites-add-new-locations) in your scripts, use the private location's entity GUID. To verify that a script executes successfully, also include the `vsePassword` attribute. For example: +To identify a [private location](/docs/synthetics/synthetic-monitoring/private-locations/private-locations-overview-monitor-internal-sites-add-new-locations) in your scripts, use the private location's entity GUID. To verify that a script executes successfully, also include the `vsePassword` attribute. For example: ``` locations: { private: { - guid: LOCATION_ENTITY_GUID, + guid: LOCATION_ENTITY_GUID, vsePassword: YOUR_VSE_PASSWORD } } ``` -[Public locations](/docs/synthetics/synthetic-monitoring/administration/synthetic-public-minion-ips/#location) use the location identifier without the AWS_ prefix, for example: +[Public locations](/docs/synthetics/synthetic-monitoring/administration/synthetic-public-minion-ips/#location) use the location identifier without the AWS_ prefix, for example: ``` locations: { public: ["US_EAST_2", "US_WEST_1"] } -``` +``` @@ -50,11 +50,11 @@ locations: { > The `PERIOD` attribute defines a time interval for your monitors to execute. To define the interval, use these forms: -* `EVERY_MINUTE` for every minute. +* `EVERY_MINUTE` for every minute. * `EVERY_N_MINUTES`, where 'N' is minutes. Supported values include `EVERY_5_MINUTES`, `EVERY_10_MINUTES`, `EVERY_15_MINUTES`, and `EVERY_30_MINUTES`. * `EVERY_HOUR` for every hour. -* `EVERY_N_HOURS`, where 'N' is hours. Supported values include `EVERY_6_HOURS` and `EVERY_12_HOURS`. -* `EVERY_DAY` for once a day. +* `EVERY_N_HOURS`, where 'N' is hours. Supported values include `EVERY_6_HOURS` and `EVERY_12_HOURS`. +* `EVERY_DAY` for once a day. -Some fields are for more advanced configurations. These are optional. +Some fields are for more advanced configurations. These are optional. For [ping monitors](#create-ping), these include: * HEADER_NAME: Your custom header names that appear on the request. -* HEADER_VALUE: The custom header value on the request. -* REDIRECT_IS_FAILURE: Your monitor reports a failure if it's redirected. -* VALIDATION_TEXT: If this text is not included in your monitor's response, it returns a failure. -* TLS_VALIDATION: Verifies the [validity](/docs/synthetics/synthetic-monitoring/using-monitors/add-edit-monitors/#simple) of the SSL certificate chain. +* HEADER_VALUE: The custom header value on the request. +* REDIRECT_IS_FAILURE: Your monitor reports a failure if it's redirected. +* VALIDATION_TEXT: If this text is not included in your monitor's response, it returns a failure. +* TLS_VALIDATION: Verifies the [validity](/docs/synthetics/synthetic-monitoring/using-monitors/add-edit-monitors/#simple) of the SSL certificate chain. For [simple browser monitors](#create-simple-browser): * RUNTIME_TYPE: The runtime type used by your monitor. "CHROME_BROWSER" is the only accepted value. -* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. "100" is the only accepted value. -* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. +* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. "100" is the only accepted value. +* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. For [scripted API monitors](#create-scripted-API): -* SCRIPT_CONTENT: The actual contents of the script. This should **not** be based64 encoded. +* SCRIPT_CONTENT: The actual contents of the script. This should **not** be based64 encoded. * RUNTIME_TYPE: The runtime type used by your monitor. "NODE_API" is the only accepted value. -* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. The only accepted value is `16.10`. -* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. +* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. The only accepted value is `16.10`. +* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. For [scripted browser monitors](#create-scripted-browser): -* SCRIPT_CONTENT: The actual contents of the script. This should **not** be based64 encoded. +* SCRIPT_CONTENT: The actual contents of the script. This should **not** be based64 encoded. * RUNTIME_TYPE: The runtime type used by your monitor. "CHROME_BROWSER" is the only accepted value. -* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. "100" is the only accepted value. -* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. +* RUNTIME_TYPE_VERSION: The runtime type version used by your monitor. "100" is the only accepted value. +* SCRIPT_LANGUAGE: The language used in your monitor. "JAVASCRIPT" is the only accepted value. For [certificate check monitors](#create-certificate-check): -* DAYS_UNTIL_EXPIRATION: Notifies you when you need to update your certificate. For example, if you wanted a notification 30 days before the certificate expires, you would input 30. +* DAYS_UNTIL_EXPIRATION: Notifies you when you need to update your certificate. For example, if you wanted a notification 30 days before the certificate expires, you would input 30. For all monitors: @@ -120,7 +120,7 @@ Queries make requests to fetch data. To learn additional query capabilities avai title="Query monitors" > - You can query your synthetic monitors to get current status information about your data or details about the monitor configuration. Some query examples include: + You can query your synthetic monitors to get current status information about your data or details about the monitor configuration. Some query examples include: ``` { @@ -143,7 +143,7 @@ Queries make requests to fetch data. To learn additional query capabilities avai } } } -``` +``` @@ -206,39 +206,11 @@ Queries make requests to fetch data. To learn additional query capabilities avai ``` - - - You're able to query your monitor downtimes: - -``` -{ - actor { - entitySearch(query: "domain = 'SYNTH' AND type = 'MONITOR_DOWNTIME'") { - results { - entities { - accountId - guid - name - tags { - key - values - } - } - } - } - } -} -``` - - - Retrieve the script used in a scripted API or scripted browser monitor. Other monitor types will return an error. + Retrieve the script used in a scripted API or scripted browser monitor. Other monitor types will return an error. ``` { actor { @@ -280,7 +252,7 @@ Queries make requests to fetch data. To learn additional query capabilities avai ## Create your synthetic monitors [#create-monitors] -Below are some sample requests to automate the creation of your synthetic monitors. +Below are some sample requests to automate the creation of your synthetic monitors. Include the runtime object that includes `runtimeType`, `runtimeTypeVersion`, and `scriptLanguage` to use a newer runtime. Do not include the runtime object and these attributes to continue using a legacy runtime. @@ -291,30 +263,30 @@ Below are some sample requests to automate the creation of your synthetic monito id="create-ping" title="Create a ping monitor" > - Ping monitors check that your application is running. Here's an example for creating one in NerdGraph: + Ping monitors check that your application is running. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateSimpleMonitor ( - accountId: YOUR_ACCOUNT_ID + accountId: YOUR_ACCOUNT_ID monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, - status: STATUS, - uri: "MONITORED_URI", + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, + status: STATUS, + uri: "MONITORED_URI", advancedOptions: { customHeaders: { - name: "HEADER_NAME", + name: "HEADER_NAME", value: "HEADER_VALUE" - }, - redirectIsFailure: REDIRECT_IS_FAILURE, - responseValidationText: "VALIDATION_TEXT", - shouldBypassHeadRequest: BYPASS_HEAD_REQUEST, + }, + redirectIsFailure: REDIRECT_IS_FAILURE, + responseValidationText: "VALIDATION_TEXT", + shouldBypassHeadRequest: BYPASS_HEAD_REQUEST, useTlsValidation: TLS_VALIDATION - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -330,34 +302,34 @@ Below are some sample requests to automate the creation of your synthetic monito id="create-simple-browser" title="Create a simple browser monitor" > -Simple browser monitors use Chrome instances to mimic customer visits. Here's an example for creating one in NerdGraph: +Simple browser monitors use Chrome instances to mimic customer visits. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateSimpleBrowserMonitor ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - status: STATUS, - uri: "MONITORED_URI", + status: STATUS, + uri: "MONITORED_URI", advancedOptions: { customHeaders: { - name: "HEADER_NAME", + name: "HEADER_NAME", value: "HEADER_VALUE" - }, - enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT, - responseValidationText: "VALIDATION_TEXT", + }, + enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT, + responseValidationText: "VALIDATION_TEXT", useTlsValidation: TLS_VALIDATION - }, + }, apdexTarget: APDEX_TARGET ) { errors { @@ -374,28 +346,28 @@ Simple browser monitors use Chrome instances to mimic customer visits. Here's an title="Create a scripted browser" > - [Scripted browser monitors](/docs/synthetics/synthetic-monitoring/scripting-monitors/introduction-scripted-browser-monitors) are more complex interactions with your pages and applications. Here's an example for creating one in NerdGraph: - + [Scripted browser monitors](/docs/synthetics/synthetic-monitoring/scripting-monitors/introduction-scripted-browser-monitors) are more complex interactions with your pages and applications. Here's an example for creating one in NerdGraph: + ``` mutation { syntheticsCreateScriptBrowserMonitor ( - accountId: YOUR_ACCOUNT_ID, - monitor: { + accountId: YOUR_ACCOUNT_ID, + monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "MONITOR_NAME", + }, + name: "MONITOR_NAME", period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - script: "SCRIPT_CONTENT", - status: STATUS, + script: "SCRIPT_CONTENT", + status: STATUS, advancedOptions: { enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -413,25 +385,25 @@ Simple browser monitors use Chrome instances to mimic customer visits. Here's an title="Create a scripted API monitor" > -[Scripted API monitors](/docs/synthetics/synthetic-monitoring/scripting-monitors/write-synthetic-api-tests) check your API endpoints. Here's an example for creating one in NerdGraph: +[Scripted API monitors](/docs/synthetics/synthetic-monitoring/scripting-monitors/write-synthetic-api-tests) check your API endpoints. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateScriptApiMonitor ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", + }, + name: "YOUR_MONITOR_NAME", period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - script: "SCRIPT_CONTENT", - status: STATUS, + script: "SCRIPT_CONTENT", + status: STATUS, apdexTarget: APDEX_TARGET } ) { @@ -449,22 +421,22 @@ Simple browser monitors use Chrome instances to mimic customer visits. Here's an id="create-step" title="Create a step monitor" > - Step monitors provide codeless multi-step browser based monitors. Here's an example for creating one in NerdGraph: + Step monitors provide codeless multi-step browser based monitors. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateStepMonitor ( - accountId: NR_ACCOUNT_ID, + accountId: NR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "MONITOR_NAME", - period: PERIOD, - status: STATUS, + }, + name: "MONITOR_NAME", + period: PERIOD, + status: STATUS, steps: [{ - ordinal: 0, - type: NAVIGATE, + ordinal: 0, + type: NAVIGATE, values: ["MONITORED_URI"],["USER_AGENT"] },{ ordinal: STEP_NUMBER, @@ -473,7 +445,7 @@ mutation { }] advancedOptions: { enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -492,21 +464,21 @@ mutation { title="Create a certificate check monitor" > -Set up monitors to notify you when your SSL certificates are about to expire. Here's an example for creating one in NerdGraph: +Set up monitors to notify you when your SSL certificates are about to expire. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateCertCheckMonitor ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, monitor: { - domain: "DOMAIN", + domain: "DOMAIN", locations: { public: ["LOCATION_1", "LOCATION_2"] }, - name: "YOUR_MONITOR_NAME", - numberDaysToFailBeforeCertExpires: DAYS_UNTIL_EXPIRATION, - period: PERIOD, - status: STATUS, + name: "YOUR_MONITOR_NAME", + numberDaysToFailBeforeCertExpires: DAYS_UNTIL_EXPIRATION, + period: PERIOD, + status: STATUS, apdexTarget: APDEX_TARGET } ) { @@ -525,23 +497,23 @@ Set up monitors to notify you when your SSL certificates are about to expire. He title="Create a broken links monitor" > -Broken links monitors check the links on a webpage for failure. Here's an example for creating one in NerdGraph: +Broken links monitors check the links on a webpage for failure. Here's an example for creating one in NerdGraph: ``` mutation { syntheticsCreateBrokenLinksMonitor ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, - status: STATUS, - apdexTarget: APDEX_TARGET, - uri: "MONITOR_URI", + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, + status: STATUS, + apdexTarget: APDEX_TARGET, + uri: "MONITOR_URI", tags: { - key: "YOUR_TAG_NAME", + key: "YOUR_TAG_NAME", values: "TAG_VALUE" } } @@ -556,14 +528,14 @@ mutation { ``` - + ## Update your synthetic monitors [#update-monitors] While you can't change the monitor type after creating it, you can update its settings. Only the guid and the settings that need updated are required as part of the request. - Include the runtime object that includes runtimeType, runtimeTypeVersion, and scriptLanguage to [upgrade a monitor](#upgrade-monitor-runtime) to use a newer runtime. Include this object and set these attributes to empty string to downgrade to a legacy runtime. Do not include this object and these attributes to continue using a legacy runtime. + Include the runtime object that includes runtimeType, runtimeTypeVersion, and scriptLanguage to [upgrade a monitor](#upgrade-monitor-runtime) to use a newer runtime. Include this object and set these attributes to empty string to downgrade to a legacy runtime. Do not include this object and these attributes to continue using a legacy runtime. @@ -572,30 +544,30 @@ While you can't change the monitor type after creating it, you can update its se title="Update a ping monitor" > -Use this to update your ping monitors: +Use this to update your ping monitors: ``` mutation { syntheticsUpdateSimpleMonitor ( - guid: "ENTITY_GUID", + guid: "ENTITY_GUID", monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, - status: STATUS, - uri: "MONITORED_URI", + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, + status: STATUS, + uri: "MONITORED_URI", advancedOptions: { customHeaders: { - name: "HEADER_NAME", + name: "HEADER_NAME", value: "HEADER_VALUE" - }, - redirectIsFailure: REDIRECT_IS_FAILURE, - responseValidationText: "VALIDATION_TEXT", - shouldBypassHeadRequest: BYPASS_HEAD_REQUEST, + }, + redirectIsFailure: REDIRECT_IS_FAILURE, + responseValidationText: "VALIDATION_TEXT", + shouldBypassHeadRequest: BYPASS_HEAD_REQUEST, useTlsValidation: TLS_VALIDATION - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -617,29 +589,29 @@ To update a simple browser monitor (including the ability to upgrade the runtime ``` mutation { syntheticsUpdateSimpleBrowserMonitor ( - guid: ENTITY_GUID, + guid: ENTITY_GUID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - status: STATUS, - uri: "MONITORED_URI", + status: STATUS, + uri: "MONITORED_URI", advancedOptions: { customHeaders: { - name: "HEADER_NAME", + name: "HEADER_NAME", value: "HEADER_VALUE" - }, - enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT, - responseValidationText: "VALIDATION_TEXT", + }, + enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT, + responseValidationText: "VALIDATION_TEXT", useTlsValidation: TLS_VALIDATION - }, + }, apdexTarget: APDEX_TARGET ) { errors { @@ -659,23 +631,23 @@ To update a scripted browser monitor (including the ability to upgrade the runti ``` mutation { syntheticsUpdateScriptBrowserMonitor ( - guid: ENTITY_GUID, - monitor: { + guid: ENTITY_GUID, + monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "MONITOR_NAME", + }, + name: "MONITOR_NAME", period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - script: "SCRIPT_CONTENT", - status: STATUS, + script: "SCRIPT_CONTENT", + status: STATUS, advancedOptions: { enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -697,20 +669,20 @@ To update a scripted API monitor (including the ability to upgrade the runtime v ``` mutation { syntheticsUpdateScriptApiMonitor ( - guid: ENTITY_GUID, + guid: ENTITY_GUID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", + }, + name: "YOUR_MONITOR_NAME", period: PERIOD, runtime: { runtimeType: "RUNTIME_TYPE", runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } - script: "SCRIPT_CONTENT", - status: STATUS, + script: "SCRIPT_CONTENT", + status: STATUS, apdexTarget: APDEX_TARGET } ) { @@ -733,17 +705,17 @@ To update a scripted API monitor (including the ability to upgrade the runtime v ``` mutation { syntheticsCreateStepMonitor ( - accountId: NR_ACCOUNT_ID, + accountId: NR_ACCOUNT_ID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "MONITOR_NAME", - period: PERIOD, - status: STATUS, + }, + name: "MONITOR_NAME", + period: PERIOD, + status: STATUS, steps: [{ - ordinal: 0, - type: NAVIGATE, + ordinal: 0, + type: NAVIGATE, values: ["MONITORED_URI"],["USER_AGENT"] },{ ordinal: STEP_NUMBER, @@ -752,7 +724,7 @@ mutation { }] advancedOptions: { enableScreenshotOnFailureAndScript: ENABLE_SCREENSHOT - }, + }, apdexTarget: APDEX_TARGET } ) { @@ -773,16 +745,16 @@ Use this to update a certificate check monitor: ``` mutation { syntheticsUpdateCertCheckMonitor ( - guid: ENTITY_GUID, + guid: ENTITY_GUID, monitor: { - domain: "DOMAIN", + domain: "DOMAIN", locations: { public: ["LOCATION_1", "LOCATION_2"] }, - name: "YOUR_MONITOR_NAME", - numberDaysToFailBeforeCertExpires: DAYS_UNTIL_EXPIRATION, - period: PERIOD, - status: STATUS, + name: "YOUR_MONITOR_NAME", + numberDaysToFailBeforeCertExpires: DAYS_UNTIL_EXPIRATION, + period: PERIOD, + status: STATUS, apdexTarget: APDEX_TARGET } ) { @@ -800,22 +772,22 @@ Use this to update a certificate check monitor: title="Update a broken links monitor" > Use this to update a broken links monitor: - + ``` mutation { syntheticsUpdateBrokenLinksMonitor ( - guid: ENTITY_GUID, + guid: ENTITY_GUID, monitor: { locations: { public: ["LOCATION_1", "LOCATION_2"] - }, - name: "YOUR_MONITOR_NAME", - period: PERIOD, - status: STATUS, - apdexTarget: APDEX_TARGET, - uri: "MONITOR_URI", + }, + name: "YOUR_MONITOR_NAME", + period: PERIOD, + status: STATUS, + apdexTarget: APDEX_TARGET, + uri: "MONITOR_URI", tags: { - key: "YOUR_TAG_NAME", + key: "YOUR_TAG_NAME", values: "TAG_VALUE" } } @@ -833,20 +805,20 @@ mutation { id="upgrade-monitor-runtime" title="Upgrade a monitor's runtime" > -You can use the below example to update a simple browser, scripted API, or scripted browser monitor to the new Chrome 100+ or Node.js 16.10 runtimes. The following example upgrades a scripted browser monitor to the new runtime from the legacy runtime. +You can use the below example to update a simple browser, scripted API, or scripted browser monitor to the new Chrome 100+ or Node.js 16.10 runtimes. The following example upgrades a scripted browser monitor to the new runtime from the legacy runtime. -* To update a simple browser monitor using the below example, change the mutation to `syntheticsUpdateSimpleBrowserMonitor` instead of `syntheticsUpdateScriptBrowserMonitor`. +* To update a simple browser monitor using the below example, change the mutation to `syntheticsUpdateSimpleBrowserMonitor` instead of `syntheticsUpdateScriptBrowserMonitor`. * To update a scripted API monitor using the below example, change the mutation to `syntheticsUpdateScriptApiMonitor` instead of `syntheticsUpdateScriptBrowserMonitor`. -Check out [optional-fields](#optional-fields) for additional details on runtime settings. +Check out [optional-fields](#optional-fields) for additional details on runtime settings. ``` mutation { - syntheticsUpdateScriptBrowserMonitor ( - guid: "", + syntheticsUpdateScriptBrowserMonitor ( + guid: "", monitor: { runtime: { - runtimeType: "RUNTIME_TYPE", - runtimeTypeVersion: "RUNTIME_TYPE_VERSION", + runtimeType: "RUNTIME_TYPE", + runtimeTypeVersion: "RUNTIME_TYPE_VERSION", scriptLanguage: "SCRIPT_LANGUAGE" } } @@ -865,7 +837,7 @@ Check out [optional-fields](#optional-fields) for additional details on runtime ## Delete a synthetic monitor [#delete-monitor] -Use these scripts to delete your monitors: +Use these scripts to delete your monitors: - + ## Manage your private locations [#private-locations] -A [private location](/docs/synthetics/synthetic-monitoring/private-locations/private-locations-overview-monitor-internal-sites-add-new-locations) allows you to monitor applications behind your firewall. When you create a private location, you install and configure private minions to execute the monitors assigned to that private location. +A [private location](/docs/synthetics/synthetic-monitoring/private-locations/private-locations-overview-monitor-internal-sites-add-new-locations) allows you to monitor applications behind your firewall. When you create a private location, you install and configure private minions to execute the monitors assigned to that private location. - + ``` mutation { syntheticsUpdatePrivateLocation ( - guid: YOUR_ENTITY_GUID, - description: "EnterYourDescription", + guid: YOUR_ENTITY_GUID, + description: "EnterYourDescription", verifiedScriptExecution: true ) { description @@ -962,7 +934,7 @@ A [private location](/docs/synthetics/synthetic-monitoring/private-locations/pri title="Purge a private location job queue" > -If you need to clear an unwieldy backlog, use this: +If you need to clear an unwieldy backlog, use this: ``` mutation { @@ -992,10 +964,10 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ``` mutation { syntheticsCreateSecureCredential ( - accountId: YOUR_ENTITY_GUID, - description: "YourOptionalDescription", - key: SECURE_CREDENTIAL_NAME, - value: SECURE_CREDENTIAL_VALUE + accountId: YOUR_ENTITY_GUID, + description: "YourOptionalDescription", + key: SECURE_CREDENTIAL_NAME, + value: SECURE_CREDENTIAL_VALUE ) { errors { description @@ -1013,9 +985,9 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ``` mutation { syntheticsUpdateSecureCredential ( - accountId: YOUR_ACCOUNT_ID, - description: "YourOptionalDescription", - key: SECURE_CREDENTIAL_NAME, + accountId: YOUR_ACCOUNT_ID, + description: "YourOptionalDescription", + key: SECURE_CREDENTIAL_NAME, value: SECURE_CREDENTIAL_VALUE) { createdAt lastUpdate @@ -1035,7 +1007,7 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ``` mutation { syntheticsDeleteSecureCredential ( - accountId: YOUR_ACCOUNT_ID, + accountId: YOUR_ACCOUNT_ID, key: SECURE_CREDENTIAL_NAME ) { errors { @@ -1046,157 +1018,3 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ``` - -## Manage your monitor downtimes [#monitor-downtimes] - -A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times) allows you to specify times that your synthetic monitors cease alerting, while still preserving your SLA report metrics. - - - - - ``` - mutation { - syntheticsCreateOnceMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" - ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime - } - } - ``` - - - -``` - mutation { - syntheticsCreateDailyMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" - ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime - } - } - ``` - - - -``` - mutation { - syntheticsCreateWeeklyMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" - ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime - } - } - ``` - - - -``` - mutation { - syntheticsCreateMonthlyMonitorDowntime ( - accountId: NR_ACCOUNT_ID, - name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" - ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime - } - } - ``` - - - - ``` - mutation { - syntheticsEditMonitorDowntime ( - guid: DOWNTIME_ENTITY_GUID, - name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], - once: { - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" - } - ) { - guid, - accountId, - name, - monitorGuids, - timezone, - startTime, - endTime - } - } - ``` - - - - ``` - mutation { - syntheticsDeleteMonitorDowntime ( - guid: DOWNTIME_ENTITY_GUID - ) { - guid - } - } - ``` - - From 6aef034935f4bd38c3bb8e9f586e1f25abf82620 Mon Sep 17 00:00:00 2001 From: Marcus Perez Date: Wed, 1 Nov 2023 18:36:03 -0700 Subject: [PATCH 05/14] Add downtime mutations --- .../nerdgraph-synthetics-tutorial.mdx | 200 ++++++++++++++++++ 1 file changed, 200 insertions(+) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 899237266bf..6b911f230e3 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -1018,3 +1018,203 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ``` + +## Manage your monitor downtimes [#monitor-downtimes] + +A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times) allows you to specify times that your synthetic monitors cease alerting, while still preserving your SLA report metrics. + + + + + ``` + mutation { + syntheticsCreateOnceMonitorDowntime ( + accountId: NR_ACCOUNT_ID, + name: "MonitorDowntimeName", + monitorGuids: ["OptionalMonitorEntityGuid"], + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss" + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime + } + } + ``` + + + + + ``` + mutation { + syntheticsCreateDailyMonitorDowntime ( + accountId: NR_ACCOUNT_ID, + name: "MonitorDowntimeName", + monitorGuids: ["MonitorEntityGuid"], + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss", + endRepeat: { + onDate: "yyyy-MM-ddTHH:mm:ss", + onRepeat: Int + } + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime, + endRepeat { + onDate, + onRepeat + } + } + } + ``` + + + + + ``` + mutation { + syntheticsCreateWeeklyMonitorDowntime ( + accountId: NR_ACCOUNT_ID, + name: "MonitorDowntimeName", + monitorGuids: ["MonitorEntityGuid"], + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss", + endRepeat: { + onDate: "yyyy-MM-ddTHH:mm:ss", + onRepeat: Int + }, + maintenanceDays: [WeekDaysEnums] + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime, + endRepeat { + onDate, + onRepeat + }, + maintenanceDays + } + } + ``` + + + + + ``` + mutation { + syntheticsCreateMonthlyMonitorDowntime ( + accountId: NR_ACCOUNT_ID, + name: "MonitorDowntimeName", + monitorGuids: ["MonitorEntityGuid"], + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss", + endRepeat: { + onDate: "yyyy-MM-ddTHH:mm:ss", + onRepeat: Int + }, + frequency: { + daysOfWeek: { + weekDay: WeekDaysEnum, + ordinalDayOfMonth: DayOfMonthOrdinal + }, + daysOfMonth: [Int] + } + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime, + endRepeat { + onDate, + onRepeat + }, + frequency { + daysOfWeek { + weekDay, + ordinalDayOfMonth + }, + daysOfMonth + } + } + } + ``` + + + + + ``` + // TODO: Fix this mutation + mutation { + syntheticsEditMonitorDowntime ( + guid: "MonitorDowntimeEntityGuid", + name: "MONITOR_DOWNTIME_NAME", + monitorGuids: ["MONITOR_ENTITY_GUID"], + once: { + timezone: "America/Los_Angeles", + startTime: "2020-12-01T12:00:00", + endTime: "2020-12-01T14:00:00" + } + ) { + guid, + accountId, + name, + monitorGuids, + timezone, + startTime, + endTime + } + } + ``` + + + + + ``` + mutation { + syntheticsDeleteMonitorDowntime ( + guid: DOWNTIME_ENTITY_GUID + ) { + guid + } + } + ``` + + From c9d60790942239146d5d9538e40fb330c05ab834 Mon Sep 17 00:00:00 2001 From: Marcus Perez Date: Thu, 2 Nov 2023 17:36:05 -0700 Subject: [PATCH 06/14] Modify edit function --- .../nerdgraph-synthetics-tutorial.mdx | 54 +++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 6b911f230e3..67d4805dfad 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -1185,9 +1185,43 @@ A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monito name: "MONITOR_DOWNTIME_NAME", monitorGuids: ["MONITOR_ENTITY_GUID"], once: { - timezone: "America/Los_Angeles", - startTime: "2020-12-01T12:00:00", - endTime: "2020-12-01T14:00:00" + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss" + }, + daily: { + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss", + endRepeat: { + onDate: "yyyy-MM-ddTHH:mm:ss", + onRepeat: Int + } + }, + weekly: { + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss", + endRepeat: { + onDate: "yyyy-MM-ddTHH:mm:ss", + onRepeat: Int + }, + maintenanceDays: [WeekDaysEnums] + }, + monthly: { + timezone: "Timezone", + startTime: "yyyy-MM-ddTHH:mm:ss", + endTime: "yyyy-MM-ddTHH:mm:ss", + endRepeat: { + onDate: "yyyy-MM-ddTHH:mm:ss", + onRepeat: Int + }, + frequency: { + daysOfWeek: { + weekDay: WeekDaysEnum, + ordinalDayOfMonth: DayOfMonthOrdinal + }, + daysOfMonth: [Int] } ) { guid, @@ -1196,7 +1230,19 @@ A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monito monitorGuids, timezone, startTime, - endTime + endTime, + endRepeat { + onDate, + onRepeat + }, + maintenanceDays, + frequency { + daysOfWeek { + weekDay, + ordinalDayOfMonth + }, + daysOfMonth + } } } ``` From e9f08db3884eef164c5fc78d0adb50b09a3bfc9d Mon Sep 17 00:00:00 2001 From: Marcus Perez Date: Thu, 9 Nov 2023 16:44:41 -0700 Subject: [PATCH 07/14] Doc modifications --- .../examples/nerdgraph-synthetics-tutorial.mdx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 67d4805dfad..64d4d1ed000 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -1021,7 +1021,8 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ## Manage your monitor downtimes [#monitor-downtimes] -A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times) allows you to specify times that your synthetic monitors cease alerting, while still preserving your SLA report metrics. +A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times) allows you to specify times that your synthetic monitors will stop running during their specified period. +Example timezone values can be found here, under the "TZ Identifier" section: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones ``` - // TODO: Fix this mutation mutation { syntheticsEditMonitorDowntime ( guid: "MonitorDowntimeEntityGuid", name: "MONITOR_DOWNTIME_NAME", - monitorGuids: ["MONITOR_ENTITY_GUID"], + monitorGuids: ["OptionalMonitorEntityGuid", "AnotherOptionalMonitorEntityGuid"], once: { timezone: "Timezone", startTime: "yyyy-MM-ddTHH:mm:ss", From b60599ef5a96d7822f4f9ac15f7b534b73b2957a Mon Sep 17 00:00:00 2001 From: Clark McAdoo Date: Thu, 30 Nov 2023 14:26:32 -0600 Subject: [PATCH 08/14] fix: add conditional to the convert images workflow to ensure it doesn't fail if there are no images to update --- .github/workflows/check-images.yml | 2 ++ scripts/convertPNGs.mjs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/check-images.yml b/.github/workflows/check-images.yml index 7563106438f..dd77627deed 100644 --- a/.github/workflows/check-images.yml +++ b/.github/workflows/check-images.yml @@ -33,9 +33,11 @@ jobs: - name: Convert images to WEBP run: yarn convert-to-webp -g + id: convert-images - name: Commit changes id: commit-changes + if: steps.convert-images.outputs.convertedImages != 0 run: | git config --local user.email "${{ env.BOT_EMAIL }}" git config --local user.name "${{ env.BOT_NAME }}" diff --git a/scripts/convertPNGs.mjs b/scripts/convertPNGs.mjs index e06957032e1..053045cd9dd 100755 --- a/scripts/convertPNGs.mjs +++ b/scripts/convertPNGs.mjs @@ -8,6 +8,7 @@ import { Command } from 'commander'; import webp from 'webp-converter'; import { promisify } from 'util'; import { exec as callback_exec } from 'child_process'; +import core from '@actions/core'; const program = new Command(); program @@ -77,6 +78,7 @@ const updateMarkdownReferences = async (mdArray) => { }; const convertImages = async (imageArray) => { + core.setOutput('convertedImages', imageArray.length); console.log(`⏳ Converting ${imageArray.length} images`); for (const imagePath of imageArray) { const webpPath = swapExtension(imagePath); From 119298faea204164d536c7e2b2c9d732e3b862b6 Mon Sep 17 00:00:00 2001 From: alexa <81787716+akristen@users.noreply.github.com> Date: Mon, 4 Dec 2023 16:35:27 -0600 Subject: [PATCH 09/14] feat(otel): Updated broken links to empty GH repos with analogous repos Need to have contributor verify that the links I found are relevant replacements. --- .../best-practices/opentelemetry-best-practices-logs.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/best-practices/opentelemetry-best-practices-logs.mdx b/src/content/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/best-practices/opentelemetry-best-practices-logs.mdx index 3dde4ee7f9f..1879992ad40 100644 --- a/src/content/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/best-practices/opentelemetry-best-practices-logs.mdx +++ b/src/content/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/best-practices/opentelemetry-best-practices-logs.mdx @@ -24,14 +24,14 @@ The [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-co ### Correlate your application logs [#log-correlation] -Application logs are more useful if they're correlated with other telemetry data produced by the application. The OpenTelemetry [semantic convention for services](https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/resource/semantic_conventions#service) specifies `service.name` as a required field. All application metric, trace, and log data sent to New Relic with the same `service.name` are associated with the same [entity](/docs/new-relic-one/use-new-relic-one/core-concepts/what-entity-new-relic). +Application logs are more useful if they're correlated with other telemetry data produced by the application. The OpenTelemetry [semantic convention for services](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/README.md) specifies `service.name` as a required field. All application metric, trace, and log data sent to New Relic with the same `service.name` are associated with the same [entity](/docs/new-relic-one/use-new-relic-one/core-concepts/what-entity-new-relic). The specifics of how logs get annotated with the `service.name` resource attribute depends on the application's environment: * Applications may produce structured JSON logs, which you can configure to include `service.name` as another field. -* You can deploy applications alongside a dedicated [Collector agent](https://opentelemetry.io/docs/collector/getting-started/#agent) instance, which you can configure with a [Resource processor](https://github.com/open-telemetry/opentelemetry-collector/tree/main/processor/resourceprocessor) to annotate logs with the `service.name` attribute. +* You can deploy applications alongside a dedicated [Collector agent](https://opentelemetry.io/docs/collector/getting-started/#agent) instance, which you can configure with a [Resource processor](https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/resource) to annotate logs with the `service.name` attribute. -Optionally, additional application [trace context](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/overview.md#log-correlation) (sometimes called execution context) can be propagated to log messages. The setup and availability of this depends on the language and logging framework used by the application. The general strategy is to set up the application to write structured JSON logs and to configure it to extract trace context into specified [trace context fields](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#trace-context-fields) on available log messages. For more details, see [OpenTelemetry in the UI: Logs page](/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/view-your-data/opentelemetry-logs-page). +Optionally, additional application [trace context](https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/sdk_exporters) (sometimes called execution context) can be propagated to log messages. The setup and availability of this depends on the language and logging framework used by the application. The general strategy is to set up the application to write structured JSON logs and to configure it to extract trace context into specified [trace context fields](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#trace-context-fields) on available log messages. For more details, see [OpenTelemetry in the UI: Logs page](/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/view-your-data/opentelemetry-logs-page). The [Logs in Context with Log4j2 example in GitHub](https://github.com/newrelic/newrelic-opentelemetry-examples/tree/main/other-examples/java/logs-in-context-log4j2) demonstrates an end-to-end working example for a simple Java application using Log4j2. From cbb8873d1a6cf9a423ca594e7236c299c93a7f6b Mon Sep 17 00:00:00 2001 From: alexa <81787716+akristen@users.noreply.github.com> Date: Mon, 4 Dec 2023 17:52:05 -0600 Subject: [PATCH 10/14] feat(synthetics): added context Removed wikipedia raw link Added additional context about downtimes in the intro --- .../apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 64d4d1ed000..96ccdfbe347 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -1021,8 +1021,7 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ## Manage your monitor downtimes [#monitor-downtimes] -A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times) allows you to specify times that your synthetic monitors will stop running during their specified period. -Example timezone values can be found here, under the "TZ Identifier" section: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +Monitor downtimes let you to specify times that your synthetics stop running. Below are different snippets that demonstrate how to schedule monitor downtimes for your synthetics. You need to update the snippets to specify the timezone, a start time, and an end time. To learn more about when you might schedule monitor downtimes, check out our doc [Disable monitoring during scheduled maintenance times](docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times/). Date: Mon, 4 Dec 2023 17:56:53 -0700 Subject: [PATCH 11/14] Modify line regarding timezones --- .../nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 96ccdfbe347..84119e87476 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -1021,7 +1021,12 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ## Manage your monitor downtimes [#monitor-downtimes] +<<<<<<< HEAD Monitor downtimes let you to specify times that your synthetics stop running. Below are different snippets that demonstrate how to schedule monitor downtimes for your synthetics. You need to update the snippets to specify the timezone, a start time, and an end time. To learn more about when you might schedule monitor downtimes, check out our doc [Disable monitoring during scheduled maintenance times](docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times/). +======= +A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times) allows you to specify times that your synthetic monitors will stop running during their specified period. +Example timezone values can be found in [Wikipedia's list of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). An example would be 'America/Los_Angeles'. +>>>>>>> 25fa7cc113 (Modify line regarding timezones) Date: Mon, 4 Dec 2023 17:59:08 -0700 Subject: [PATCH 12/14] Fix broken line --- .../nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index 84119e87476..c212f11d47a 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -1021,12 +1021,8 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ## Manage your monitor downtimes [#monitor-downtimes] -<<<<<<< HEAD -Monitor downtimes let you to specify times that your synthetics stop running. Below are different snippets that demonstrate how to schedule monitor downtimes for your synthetics. You need to update the snippets to specify the timezone, a start time, and an end time. To learn more about when you might schedule monitor downtimes, check out our doc [Disable monitoring during scheduled maintenance times](docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times/). -======= -A [monitor downtime](/docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times) allows you to specify times that your synthetic monitors will stop running during their specified period. +Monitor downtimes let you specify times that your synthetics stop running. Below are different snippets that demonstrate how to schedule monitor downtimes for your synthetics. You need to update the snippets to specify the timezone, a start time, and an end time. To learn more about when you might schedule monitor downtimes, check out our doc [Disable monitoring during scheduled maintenance times](docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times/). Example timezone values can be found in [Wikipedia's list of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). An example would be 'America/Los_Angeles'. ->>>>>>> 25fa7cc113 (Modify line regarding timezones) Date: Tue, 5 Dec 2023 14:07:24 -0700 Subject: [PATCH 13/14] Update punctuation.mdx After discussion with Robert Friesel, added additional info for "Dashes and hyphens" section. --- src/content/docs/style-guide/ui-writing/punctuation.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/content/docs/style-guide/ui-writing/punctuation.mdx b/src/content/docs/style-guide/ui-writing/punctuation.mdx index 97aeb649345..72e018156da 100644 --- a/src/content/docs/style-guide/ui-writing/punctuation.mdx +++ b/src/content/docs/style-guide/ui-writing/punctuation.mdx @@ -48,6 +48,7 @@ The first sentence says that the speaker loves three separate things, whereas th - For ranges and number spans, use an en dash (`–`) without a space on either side. - For date spans, use spaces around the en dash. +- Hyphenate compound words; for example, usage-based pricing and short-term data storage. In compound words that precede and modify a noun, don’t hyphenate an adverb ending in “ly”; for example, highly customized software. | Do | Don't | | --------------------------- | ------------------------- | From 1482bb3a99a1d1ce5571abba3a63fe039beb6982 Mon Sep 17 00:00:00 2001 From: alexa <81787716+akristen@users.noreply.github.com> Date: Wed, 6 Dec 2023 09:05:09 -0600 Subject: [PATCH 14/14] Updating content to show an example abbreviation, smooth out language --- .../apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx index c212f11d47a..28fa67f9ba7 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-synthetics-tutorial.mdx @@ -1021,8 +1021,7 @@ You use [secure credentials](/docs/synthetics/synthetic-monitoring/using-monitor ## Manage your monitor downtimes [#monitor-downtimes] -Monitor downtimes let you specify times that your synthetics stop running. Below are different snippets that demonstrate how to schedule monitor downtimes for your synthetics. You need to update the snippets to specify the timezone, a start time, and an end time. To learn more about when you might schedule monitor downtimes, check out our doc [Disable monitoring during scheduled maintenance times](docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times/). -Example timezone values can be found in [Wikipedia's list of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). An example would be 'America/Los_Angeles'. +Monitor downtimes let you specify times that your synthetics should stop running. We've provided different snippets that demonstrate how to schedule monitor downtimes for your synthetics. You need to update these snippets to specify timezone, start times, and end times. To learn more about when you might schedule monitor downtimes, check out our doc [Disable monitoring during scheduled maintenance times](docs/synthetics/synthetic-monitoring/using-monitors/monitor-downtimes-disable-monitoring-during-scheduled-maintenance-times/). To find timezone values, see [the tz database of time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). For example, America/Los Angeles would use the PDT abbreviation.