module packageDocumentation example import * as pulumi from '@pulumi/pulumi' ; import * as k8s from '@pulumi/kubernetes' ; import * as grafana from '@kloudlib/grafana' ; import * as prometheus from '@kloudlib/prometheus' ; import * as loki from '@kloudlib/loki' ; import { merge } from 'lodash' ; interface ServiceInputs { enabled ? : boolean ; } export interface GrafanaStackInputs { provider ? : k8s . Provider ; namespace ? : pulumi . Input < string > ; grafana ? : Partial < grafana . GrafanaInputs > & ServiceInputs ; prometheus ? : Partial < prometheus . PrometheusInputs > & ServiceInputs ; loki ? : Partial < loki . LokiInputs > & ServiceInputs ; } export interface GrafanaStackOutputs { grafana ? : grafana . GrafanaOutputs ; prometheus ? : prometheus . PrometheusOutputs ; loki ? : loki . LokiOutputs ; } noInheritDoc export class GrafanaStack extends pulumi . ComponentResource implements GrafanaStackOutputs { readonly grafana ? : grafana . GrafanaOutputs ; readonly prometheus ? : prometheus . PrometheusOutputs ; readonly loki ? : loki . LokiOutputs ; constructor ( name , props ? , opts ? ) { super ( 'kloudlib:GrafanaStack' , name , props , opts ) ; const defaults = { grafana : { enabled : true , provider : props ?. provider , namespace : props ?. namespace , datasources : [ { name : 'prometheus' , type : 'prometheus' , url : `http://${ name }-prometheus-server` , } , { name : 'loki' , type : 'loki' , url : `http://${ name }-loki:3100` , } , ] , persistence : { enabled : true , sizeGB : 1 , } , } , loki : { enabled : true , provider : props ?. provider , namespace : props ?. namespace , persistence : { enabled : true , sizeGB : 10 , } , } , prometheus : { enabled : true , provider : props ?. provider , namespace : props ?. namespace , persistence : { enabled : true , sizeGB : 10 , } , } , } ; if ( props ?. grafana ?. enabled !== false ) { props ?. grafana ?. dashboards ?. forEach ( ( dashboard ) => { if ( dashboard ?. gnetId !== undefined && dashboard ?. datasource === undefined ) { dashboard . datasource = 'prometheus' ; } } ) ; this . grafana = new grafana . Grafana ( `${ name }-grafana` , merge ( { } , defaults . grafana , props ?. grafana ) , { parent : this , } ) ; } if ( props ?. loki ?. enabled !== false ) { this . loki = new loki . Loki ( `${ name }-loki` , merge ( { } , defaults . loki , props ?. loki ) , { parent : this } ) ; } if ( props ?. prometheus ?. enabled !== false ) { this . prometheus = new prometheus . Prometheus ( `${ name }-prometheus` , merge ( { } , defaults . prometheus , props ?. prometheus ) , { parent : this , } ) ; } } }