Is there a way to get a list of all active agents?
Release : 12.5 and up
Component : CA Harvest Software Change Manager
Unfortunately there is not a “central registry” list anywhere that would give us that information. Some things we can do to figure this out are:
- Run an SQL query that will list all the UDP (user-defined process) definitions across all the Harvest projects. Any that execute a Harvest command directly can be reviewed to see which Harvest agent machines they are connecting to.
- For any UDPs that execute scripts, we can review the scripts for any Harvest commands that connect to Harvest agent machines.
- If any users or UDPs are using the “hrefresh” utility, the “hrefresh.cfg” file can be reviewed to find which agent machines are listed there.
- You can poll your users to ask if any are making Agent connections directly from Workbench, and what are the hostnames of those agent machines.
- If you’re using Harweb at all, then any user who connects to Harweb likely has SCM Agent installed on their local machine.
Here is a database query you can use to generate a list of all UDP processes in your Harvest database:
/* For Oracle */
SELECT * FROM (
SELECT
HE.ENVIRONMENTNAME,
DECODE(HE.ENVISACTIVE,'Y','ACTIVE','N','INACTIVE','T','TEMPLATE') ENVTYPE,
HS.STATENAME,
HSP.PROCESSNAME AS PARENTPROCESS,
DECODE(HLP.PROCESSPRELINK,'Y','PRELINK','POSTLINK') LINKTYPE,
HU.PROCESSOBJID,
HU.PROCESSNAME,
HU.PROGRAMNAME
FROM
HARUDP HU
INNER JOIN HARLINKEDPROCESS HLP ON HLP.PROCESSOBJID = HU.PROCESSOBJID
AND HLP.PARENTPROCOBJID = HU.PARENTPROCOBJID
INNER JOIN HARSTATEPROCESS HSP ON HSP.PROCESSOBJID = HLP.PARENTPROCOBJID
AND HSP.STATEOBJID = HLP.STATEOBJID
INNER JOIN HARSTATE HS ON HS.STATEOBJID = HSP.STATEOBJID
INNER JOIN HARENVIRONMENT HE ON HE.ENVOBJID = HS.ENVOBJID
UNION
SELECT
HE.ENVIRONMENTNAME,
DECODE(HE.ENVISACTIVE,'Y','ACTIVE','N','INACTIVE','T','TEMPLATE') ENVTYPE,
HS.STATENAME,
'STANDALONE' PARENTPROCESS,
'' LINKTYPE,
HU.PROCESSOBJID,
HU.PROCESSNAME,
HU.PROGRAMNAME
FROM
HARUDP HU
INNER JOIN HARSTATEPROCESS HSP ON HSP.PROCESSOBJID = HU.PROCESSOBJID
AND HSP.STATEOBJID = HU.STATEOBJID
INNER JOIN HARSTATE HS ON HS.STATEOBJID = HSP.STATEOBJID
INNER JOIN HARENVIRONMENT HE ON HE.ENVOBJID = HS.ENVOBJID
) RESULT
ORDER BY ENVIRONMENTNAME, STATENAME, PARENTPROCESS, PROCESSNAME
/* For SQL Server */
SELECT * FROM (
SELECT
HE.ENVIRONMENTNAME,
CASE
WHEN HE.ENVISACTIVE='Y' THEN 'ACTIVE'
WHEN HE.ENVISACTIVE='N' THEN 'INACTIVE'
WHEN HE.ENVISACTIVE='T' THEN 'TEMPLATE'
ELSE ''
END AS ENVTYPE,
HS.STATENAME,
HSP.PROCESSNAME AS PARENTPROCESS,
CASE
WHEN HLP.PROCESSPRELINK='Y' THEN 'PRELINK'
ELSE 'POSTLINK'
END AS LINKTYPE,
HU.PROCESSOBJID,
HU.PROCESSNAME,
HU.PROGRAMNAME
FROM
HARUDP HU
INNER JOIN HARLINKEDPROCESS HLP ON HLP.PROCESSOBJID = HU.PROCESSOBJID
AND HLP.PARENTPROCOBJID = HU.PARENTPROCOBJID
INNER JOIN HARSTATEPROCESS HSP ON HSP.PROCESSOBJID = HLP.PARENTPROCOBJID
AND HSP.STATEOBJID = HLP.STATEOBJID
INNER JOIN HARSTATE HS ON HS.STATEOBJID = HSP.STATEOBJID
INNER JOIN HARENVIRONMENT HE ON HE.ENVOBJID = HS.ENVOBJID
UNION
SELECT
HE.ENVIRONMENTNAME,
CASE
WHEN HE.ENVISACTIVE='Y' THEN 'ACTIVE'
WHEN HE.ENVISACTIVE='N' THEN 'INACTIVE'
WHEN HE.ENVISACTIVE='T' THEN 'TEMPLATE'
ELSE ' '
END AS ENVTYPE,
HS.STATENAME,
'STANDALONE' PARENTPROCESS,
'' LINKTYPE,
HU.PROCESSOBJID,
HU.PROCESSNAME,
HU.PROGRAMNAME
FROM
HARUDP HU
INNER JOIN HARSTATEPROCESS HSP ON HSP.PROCESSOBJID = HU.PROCESSOBJID
AND HSP.STATEOBJID = HU.STATEOBJID
INNER JOIN HARSTATE HS ON HS.STATEOBJID = HSP.STATEOBJID
INNER JOIN HARENVIRONMENT HE ON HE.ENVOBJID = HS.ENVOBJID
) RESULT
ORDER BY ENVIRONMENTNAME, STATENAME, PARENTPROCESS, PROCESSNAME