Dynamic monitor creation
The Checkly CLI enables you to code your entire monitoring setup taking full advantage of the flexibility of TypeScript/JavaScript. Reusing language constructs that you are already familiar with, you will be able to create a MaC setup that neatly fits your unique use cases and workflows.
This page shows a few examples.
Similar checks from a list of targets
Iterating through lists of target URLs is an easy way to manage checks at scale while avoiding code duplication.
checks /api.check.ts
import { ApiCheck } from 'checkly/constructs'
const publicResources = [ '/public-stats' , '/v1/runtimes' ]
for ( const publicResource of publicResources ) {
new ApiCheck ( `public-resource_ ${ publicResource } ` , {
name : `Public Resource ${ publicResource } ` ,
request : {
url : `https://api.checkly.com ${ publicResource } ` ,
method : 'GET' ,
followRedirects : true ,
skipSsl : false ,
assertions : [ AssertionBuilder . statusCode (). equals ( 200 ) ]
}
})
}
Asynchronous operations are supported by exporting an async function from your check files, too.
checks /api.check.ts
import { ApiCheck } from 'checkly/constructs'
import { getPublicResources } from './helpers'
// an exported async function to signal that
// this check file performs asynchronous operations
export default async function createApiChecks() {
const publicResources = await getPublicResources ();
for ( const publicResource of publicResources ) {
new ApiCheck ( `public-resource_ ${ publicResource } ` , {
name : `Public Resource ${ publicResource } ` ,
request : {
url : `https://api.checkly.com ${ publicResource } ` ,
method : 'GET' ,
followRedirects : true ,
skipSsl : false ,
assertions : [ AssertionBuilder . statusCode (). equals ( 200 ) ]
}
})
}
}
Separate groups for prod and pre-prod
Iterating through target environments (like preview
and production
) linked to Group
resources allows you to reuse existing Check
definitions.
checks /browser.check.ts
import fs from 'fs'
import { BrowserCheck } from 'checkly/constructs'
import { groupProd , groupPreview } from './groups.check'
// This reads a directory and extracts all file paths containing '.spec.ts'
const files = fs . readdirSync ( '__checks__/' )
const specFiles = files . filter (( filename ) => {
return filename . includes ( '.spec.ts' )
})
// This is the list of environments and their matching group; it can be extended easily
const environments = [
{ name : 'preview' , group : groupPreview },
{ name : 'production' , group : groupProd },
]
// Here we create a new browser check for each environment x testspec combination
// Checks are added to the right groups - the group will set the right env variable for the target URL
environments . forEach (( environment ) => {
for ( const specFile of specFiles ) {
new BrowserCheck ( ` ${ specFile }${ environment . name } ` , {
name : ` ${ specFile } [ ${ environment . name } ]` ,
tags : [ ` ${ environment . name } ` ],
group : environment.group ,
code : {
entrypoint : specFile ,
},
})
}
})
You can handle potential differences between target environments via group-level environment variables, which are made available to all checks within a group.
checks /group.check.ts
import { CheckGroup } from 'checkly/constructs'
import { smsChannel , emailChannel } from '../alert-channels'
const alertChannels = [ smsChannel , emailChannel ]
export const groupPreview = new CheckGroup ( 'group-browser-preview' , {
name : 'WebShop - Preview' ,
activated : true ,
muted : false ,
runtimeId : '2023.09' ,
locations : [ 'us-east-1' , 'eu-west-1' ],
tags : [ 'mac' , 'preview' ],
// You can use group-level environment vars to point each group's checks to the right target URL
environmentVariables : [ { key : 'TARGET_URL' , value : 'https://preview.mywebsite.com' }],
apiCheckDefaults : {},
concurrency : 100 ,
alertChannels
})
export const groupProd = new CheckGroup ( 'group-browser-prod' , {
name : 'WebShop - Production' ,
activated : true ,
muted : false ,
runtimeId : '2023.09' ,
locations : [ 'us-east-1' , 'eu-west-1' ],
tags : [ 'mac' , 'production' ],
// You can use group-level environment vars to point each group's checks to the right target URL
environmentVariables : [ { key : 'TARGET_URL' , value : 'https://www.mywebsite.com' }],
apiCheckDefaults : {},
concurrency : 100 ,
alertChannels
})
Last updated on December 13, 2024.
You can contribute to this documentation by editing this page on Github