Collecting all elements of a Production
Hi everyone,
Before delving too deeply, I was wondering if anybody else had already looked into or had developed a tool that extracts all the elements of a production into a spreadsheet, global, array, object etc. i.e. the Services, Processes and Operations within a production, and pulled particular properties/settings of those elements into a table - such as Ports, IP, Class, Adaptor, Timeout etc. ideally I want to present into a web page but if you have a different outputanything that exists will be helpful.
Comments
This is something I wrote a long time ago; it extracts all business hosts and their settings. I've learned some things since I wrote it and would probably do a few things differently these days. It should be enough to give you some ideas, though ...
ClassMethod GetConfigs(pProduction As%String = {$G(^Ens.Runtime("Name"),$G(^Ens.Suspended,$G(^Ens.Configuration("csp","LastProduction"))))}, pFile As%String = {$System.Util.GetEnviron("HOME")_"/"_$NAMESPACE_"_hostconfigs.csv"}) As%Status
{
Set tPrd = ##class(Ens.Config.Production).%OpenId(pProduction)
Set tOut = ##class(%File).%New()
Set tOut.Name = pFile
Set tSC = tOut.Open("RWN")
if '$$$ISERR(tSC)
{
Set tSC = vOut.WriteLine("""Type"",""Name"",""ClassName"",""Adapter"",""Enabled"",""ConfigName"",""ConfigValue""")
}
Quit:$$$ISERR(tSC) tSC
If$ISOBJECT(tPrd)
{
For i=1:1:tPrd.Items.Count()
{
Set tHost = tPrd.Items.GetAt(i)
Set tName = tHost.Name
Set tClassName = tHost.ClassName
Set tType = $CASE(tHost.BusinessType(),0:"Unknown",1:"Service",2:"Process",3:"Operation",4:"Actor",:"Huh?")
Set tAdapter = $CLASSMETHOD(tClassName,"%GetParameter","ADAPTER")
Set tEnabled = tHost.Enabled
Set tCategory = tHost.Category
Set tLine = """"_tType_""","""_tName_""","""_tClassName_""","""_tAdapter_""","""_tEnabled_""","""Do tOut.WriteLine(tLine_"Category"","""_tCategory_"""")
Forl=1:1:tHost.Settings.Count()
{
Set tCfg = tHost.Settings.GetAt(l)
Set tCfgName = tCfg.Name
Set tCfgVal = tCfg.Value
Set tSC = vOut.WriteLine(tLine_tCfgName_""","""_tCfgVal_"""")
Return:$$$ISERR(tSC) tSC
}
}
Do tOut.Close()
}
Else
{
Return$$$ERROR(0,"Production Not Found in this namespace")
}
Return$$$OK
}
Check Ens.Config package - it has all production elements as structured tables/classes.