2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								package  api  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  (  
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"encoding/json" 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"time" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/prometheus/common/model" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/services/ngalert/models" 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-06 03:16:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/grafana/grafana/pkg/util" 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// AlertRuleFromProvisionedAlertRule converts definitions.ProvisionedAlertRule to models.AlertRule
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  AlertRuleFromProvisionedAlertRule ( a  definitions . ProvisionedAlertRule )  ( models . AlertRule ,  error )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  models . AlertRule { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ID :            a . ID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										UID :           a . UID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										OrgID :         a . OrgID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										NamespaceUID :  a . FolderUID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RuleGroup :     a . RuleGroup , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Title :         a . Title , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Condition :     a . Condition , 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-27 23:55:13 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Data :          AlertQueriesFromApiAlertQueries ( a . Data ) , 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										Updated :       a . Updated , 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-01 05:21:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										NoDataState :   models . NoDataState ( a . NoDataState ) ,           // TODO there must be a validation
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ExecErrState :  models . ExecutionErrorState ( a . ExecErrState ) ,  // TODO there must be a validation
 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										For :           time . Duration ( a . For ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Annotations :   a . Annotations , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Labels :        a . Labels , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										IsPaused :      a . IsPaused , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// ProvisionedAlertRuleFromAlertRule converts models.AlertRule to definitions.ProvisionedAlertRule and sets provided provenance status
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ProvisionedAlertRuleFromAlertRule ( rule  models . AlertRule ,  provenance  models . Provenance )  definitions . ProvisionedAlertRule  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  definitions . ProvisionedAlertRule { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ID :            rule . ID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										UID :           rule . UID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										OrgID :         rule . OrgID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										FolderUID :     rule . NamespaceUID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RuleGroup :     rule . RuleGroup , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Title :         rule . Title , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										For :           model . Duration ( rule . For ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Condition :     rule . Condition , 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-27 23:55:13 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Data :          ApiAlertQueriesFromAlertQueries ( rule . Data ) , 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										Updated :       rule . Updated , 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-01 05:21:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										NoDataState :   definitions . NoDataState ( rule . NoDataState ) ,           // TODO there may be a validation
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ExecErrState :  definitions . ExecutionErrorState ( rule . ExecErrState ) ,  // TODO there may be a validation
 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										Annotations :   rule . Annotations , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Labels :        rule . Labels , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Provenance :    definitions . Provenance ( provenance ) ,  // TODO validate enum conversion?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										IsPaused :      rule . IsPaused , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// ProvisionedAlertRuleFromAlertRules converts a collection of models.AlertRule to definitions.ProvisionedAlertRules with provenance status models.ProvenanceNone
  
						 
					
						
							
								
									
										
										
										
											2023-10-11 21:51:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  ProvisionedAlertRuleFromAlertRules ( rules  [ ] * models . AlertRule ,  provenances  map [ string ] models . Provenance )  definitions . ProvisionedAlertRules  {  
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									result  :=  make ( [ ] definitions . ProvisionedAlertRule ,  0 ,  len ( rules ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  r  :=  range  rules  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-11 21:51:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										result  =  append ( result ,  ProvisionedAlertRuleFromAlertRule ( * r ,  provenances [ r . UID ] ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  result 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-27 23:55:13 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// AlertQueriesFromApiAlertQueries converts a collection of definitions.AlertQuery to collection of models.AlertQuery
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  AlertQueriesFromApiAlertQueries ( queries  [ ] definitions . AlertQuery )  [ ] models . AlertQuery  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									result  :=  make ( [ ] models . AlertQuery ,  0 ,  len ( queries ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  q  :=  range  queries  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										result  =  append ( result ,  models . AlertQuery { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RefID :      q . RefID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											QueryType :  q . QueryType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RelativeTimeRange :  models . RelativeTimeRange { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												From :  models . Duration ( q . RelativeTimeRange . From ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												To :    models . Duration ( q . RelativeTimeRange . To ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											DatasourceUID :  q . DatasourceUID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Model :          q . Model , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  result 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// ApiAlertQueriesFromAlertQueries converts a collection of models.AlertQuery to collection of definitions.AlertQuery
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ApiAlertQueriesFromAlertQueries ( queries  [ ] models . AlertQuery )  [ ] definitions . AlertQuery  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									result  :=  make ( [ ] definitions . AlertQuery ,  0 ,  len ( queries ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  q  :=  range  queries  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										result  =  append ( result ,  definitions . AlertQuery { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RefID :      q . RefID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											QueryType :  q . QueryType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RelativeTimeRange :  definitions . RelativeTimeRange { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												From :  definitions . Duration ( q . RelativeTimeRange . From ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												To :    definitions . Duration ( q . RelativeTimeRange . To ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											DatasourceUID :  q . DatasourceUID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Model :          q . Model , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  result 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  AlertRuleGroupFromApiAlertRuleGroup ( a  definitions . AlertRuleGroup )  ( models . AlertRuleGroup ,  error )  {  
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ruleGroup  :=  models . AlertRuleGroup { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Title :      a . Title , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										FolderUID :  a . FolderUID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Interval :   a . Interval , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  i  :=  range  a . Rules  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										converted ,  err  :=  AlertRuleFromProvisionedAlertRule ( a . Rules [ i ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  models . AlertRuleGroup { } ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ruleGroup . Rules  =  append ( ruleGroup . Rules ,  converted ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  ruleGroup ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-03-27 23:55:13 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  ApiAlertRuleGroupFromAlertRuleGroup ( d  models . AlertRuleGroup )  definitions . AlertRuleGroup  {  
						 
					
						
							
								
									
										
										
										
											2023-02-28 06:57:15 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									rules  :=  make ( [ ] definitions . ProvisionedAlertRule ,  0 ,  len ( d . Rules ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  i  :=  range  d . Rules  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										rules  =  append ( rules ,  ProvisionedAlertRuleFromAlertRule ( d . Rules [ i ] ,  d . Provenance ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  definitions . AlertRuleGroup { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Title :      d . Title , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										FolderUID :  d . FolderUID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Interval :   d . Interval , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Rules :      rules , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// AlertingFileExportFromAlertRuleGroupWithFolderTitle creates an definitions.AlertingFileExport DTO from []models.AlertRuleGroupWithFolderTitle.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  AlertingFileExportFromAlertRuleGroupWithFolderTitle ( groups  [ ] models . AlertRuleGroupWithFolderTitle )  ( definitions . AlertingFileExport ,  error )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									f  :=  definitions . AlertingFileExport { APIVersion :  1 } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  group  :=  range  groups  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										export ,  err  :=  AlertRuleGroupExportFromAlertRuleGroupWithFolderTitle ( group ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  definitions . AlertingFileExport { } ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										f . Groups  =  append ( f . Groups ,  export ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  f ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// AlertRuleGroupExportFromAlertRuleGroupWithFolderTitle creates a definitions.AlertRuleGroupExport DTO from models.AlertRuleGroup.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  AlertRuleGroupExportFromAlertRuleGroupWithFolderTitle ( d  models . AlertRuleGroupWithFolderTitle )  ( definitions . AlertRuleGroupExport ,  error )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									rules  :=  make ( [ ] definitions . AlertRuleExport ,  0 ,  len ( d . Rules ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  i  :=  range  d . Rules  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										alert ,  err  :=  AlertRuleExportFromAlertRule ( d . Rules [ i ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  definitions . AlertRuleGroupExport { } ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										rules  =  append ( rules ,  alert ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  definitions . AlertRuleGroupExport { 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-11 23:48:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										OrgID :            d . OrgID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Name :             d . Title , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Folder :           d . FolderTitle , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										FolderUID :        d . FolderUID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Interval :         model . Duration ( time . Duration ( d . Interval )  *  time . Second ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										IntervalSeconds :  d . Interval , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Rules :            rules , 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// AlertRuleExportFromAlertRule creates a definitions.AlertRuleExport DTO from models.AlertRule.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  AlertRuleExportFromAlertRule ( rule  models . AlertRule )  ( definitions . AlertRuleExport ,  error )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									data  :=  make ( [ ] definitions . AlertQueryExport ,  0 ,  len ( rule . Data ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  i  :=  range  rule . Data  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										query ,  err  :=  AlertQueryExportFromAlertQuery ( rule . Data [ i ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  definitions . AlertRuleExport { } ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										data  =  append ( data ,  query ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-06 03:16:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									result  :=  definitions . AlertRuleExport { 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										UID :           rule . UID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Title :         rule . Title , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										For :           model . Duration ( rule . For ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Condition :     rule . Condition , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Data :          data , 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-06 03:16:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										DashboardUID :  rule . DashboardUID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										PanelID :       rule . PanelID , 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										NoDataState :   definitions . NoDataState ( rule . NoDataState ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ExecErrState :  definitions . ExecutionErrorState ( rule . ExecErrState ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										IsPaused :      rule . IsPaused , 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-06 03:16:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  rule . For . Seconds ( )  >  0  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										result . ForSeconds  =  util . Pointer ( int64 ( rule . For . Seconds ( ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  rule . Annotations  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										result . Annotations  =  & rule . Annotations 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  rule . Labels  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										result . Labels  =  & rule . Labels 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  result ,  nil 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// AlertQueryExportFromAlertQuery creates a definitions.AlertQueryExport DTO from models.AlertQuery.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  AlertQueryExportFromAlertQuery ( query  models . AlertQuery )  ( definitions . AlertQueryExport ,  error )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// We unmarshal the json.RawMessage model into a map in order to facilitate yaml marshalling.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-30 23:46:47 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									var  mdl  map [ string ] any 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  json . Unmarshal ( query . Model ,  & mdl ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  definitions . AlertQueryExport { } ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-06 03:16:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									var  queryType  * string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  query . QueryType  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										queryType  =  & query . QueryType 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  definitions . AlertQueryExport { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RefID :      query . RefID , 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-06 03:16:44 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										QueryType :  queryType , 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-11 23:48:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										RelativeTimeRange :  definitions . RelativeTimeRangeExport { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											FromSeconds :  int64 ( time . Duration ( query . RelativeTimeRange . From ) . Seconds ( ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											ToSeconds :    int64 ( time . Duration ( query . RelativeTimeRange . To ) . Seconds ( ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										DatasourceUID :  query . DatasourceUID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Model :          mdl , 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-11 23:48:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										ModelString :    string ( query . Model ) , 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-30 01:34:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2023-07-21 02:35:56 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// AlertingFileExportFromEmbeddedContactPoints creates a definitions.AlertingFileExport DTO from []definitions.EmbeddedContactPoint.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  AlertingFileExportFromEmbeddedContactPoints ( orgID  int64 ,  ecps  [ ] definitions . EmbeddedContactPoint )  ( definitions . AlertingFileExport ,  error )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									f  :=  definitions . AlertingFileExport { APIVersion :  1 } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									cache  :=  make ( map [ string ] * definitions . ContactPointExport ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									contactPoints  :=  make ( [ ] * definitions . ContactPointExport ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  ecp  :=  range  ecps  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										c ,  ok  :=  cache [ ecp . Name ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ! ok  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											c  =  & definitions . ContactPointExport { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												OrgID :      orgID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Name :       ecp . Name , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Receivers :  make ( [ ] definitions . ReceiverExport ,  0 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cache [ ecp . Name ]  =  c 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											contactPoints  =  append ( contactPoints ,  c ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										recv ,  err  :=  ReceiverExportFromEmbeddedContactPoint ( ecp ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  definitions . AlertingFileExport { } ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										c . Receivers  =  append ( c . Receivers ,  recv ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  c  :=  range  contactPoints  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										f . ContactPoints  =  append ( f . ContactPoints ,  * c ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  f ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// ReceiverExportFromEmbeddedContactPoint creates a definitions.ReceiverExport DTO from definitions.EmbeddedContactPoint.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ReceiverExportFromEmbeddedContactPoint ( contact  definitions . EmbeddedContactPoint )  ( definitions . ReceiverExport ,  error )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									raw ,  err  :=  contact . Settings . MarshalJSON ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  definitions . ReceiverExport { } ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  definitions . ReceiverExport { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										UID :                    contact . UID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Type :                   contact . Type , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Settings :               raw , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										DisableResolveMessage :  contact . DisableResolveMessage , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2023-07-25 05:56:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// AlertingFileExportFromRoute creates a definitions.AlertingFileExport DTO from definitions.Route.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  AlertingFileExportFromRoute ( orgID  int64 ,  route  definitions . Route )  ( definitions . AlertingFileExport ,  error )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									f  :=  definitions . AlertingFileExport { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										APIVersion :  1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Policies :  [ ] definitions . NotificationPolicyExport { { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											OrgID :   orgID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Policy :  RouteExportFromRoute ( & route ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  f ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// RouteExportFromRoute creates a definitions.RouteExport DTO from definitions.Route.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  RouteExportFromRoute ( route  * definitions . Route )  * definitions . RouteExport  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									export  :=  definitions . RouteExport { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Receiver :           route . Receiver , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GroupByStr :         route . GroupByStr , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Match :              route . Match , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MatchRE :            route . MatchRE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Matchers :           route . Matchers , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										ObjectMatchers :     route . ObjectMatchers , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										MuteTimeIntervals :  route . MuteTimeIntervals , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Continue :           route . Continue , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GroupWait :          route . GroupWait , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GroupInterval :      route . GroupInterval , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RepeatInterval :     route . RepeatInterval , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  len ( route . Routes )  >  0  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										export . Routes  =  make ( [ ] * definitions . RouteExport ,  0 ,  len ( route . Routes ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  _ ,  r  :=  range  route . Routes  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											export . Routes  =  append ( export . Routes ,  RouteExportFromRoute ( r ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  & export 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}