Created
September 15, 2021 19:43
-
-
Save jongpie/12aea450a69aa98876bc2498e02e5e11 to your computer and use it in GitHub Desktop.
Package Subscriber Metrics
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class PackageSubscriberMetrics { | |
public class SubscriberOrgSummary { | |
public Id parentOrgId; | |
public String subscriberName; | |
public Boolean installedInParentOrg = false; | |
public Integer numberOfOrgs = 0; | |
public List<SubscriberOrgDetails> subscriberOrgDetails = new List<SubscriberOrgDetails>(); | |
} | |
public class SubscriberOrgDetails { | |
public Id parentOrgId; | |
public Id orgId; | |
public String orgType; | |
public Id metadataPackageId; | |
public String metadataPackageName; | |
public String metadataPackageNamespacePrefix; | |
} | |
private static final Map<Id, MetadataPackage> METADATA_PACKAGE_BY_ID = new Map<Id, MetadataPackage>([SELECT Id, Name, NamespacePrefix FROM MetadataPackage]); | |
public static Map<Id, SubscriberOrgSummary> getSubscriberOrgDetails() { | |
Map<Id, SubscriberOrgSummary> subscriberOrgDetailsByParentOrgId = new Map<Id, SubscriberOrgSummary>(); | |
// Prod org subscribers | |
List<PackageSubscriber> prodInstallMetrics = [ | |
SELECT Id, MetadataPackageId, OrgKey, OrgName, OrgType | |
FROM PackageSubscriber | |
WHERE ParentOrg = null | |
ORDER BY OrgName | |
]; | |
System.debug('prodInstallMetrics==' + prodInstallMetrics); | |
for (PackageSubscriber prodSubscriber : prodInstallMetrics) { | |
SubscriberOrgSummary subscriberOrgSummary = new SubscriberOrgSummary(); | |
subscriberOrgSummary.installedInParentOrg = true; | |
subscriberOrgSummary.parentOrgId = prodSubscriber.OrgKey; | |
subscriberOrgSummary.subscriberName = prodSubscriber.OrgName; | |
SubscriberOrgDetails prodSubscriberOrgDetails = new SubscriberOrgDetails(); | |
prodSubscriberOrgDetails.orgId = prodSubscriber.OrgKey; | |
prodSubscriberOrgDetails.orgType = prodSubscriber.OrgType; | |
prodSubscriberOrgDetails.metadataPackageId = prodSubscriber.MetadataPackageId; | |
prodSubscriberOrgDetails.metadataPackageName = METADATA_PACKAGE_BY_ID.get(prodSubscriber.MetadataPackageId).Name; | |
prodSubscriberOrgDetails.metadataPackageNamespacePrefix = METADATA_PACKAGE_BY_ID.get(prodSubscriber.MetadataPackageId).NamespacePrefix; | |
subscriberOrgSummary.numberOfOrgs = subscriberOrgSummary.numberOfOrgs + 1; | |
subscriberOrgSummary.subscriberOrgDetails.add(prodSubscriberOrgDetails); | |
subscriberOrgDetailsByParentOrgId.put(prodSubscriber.OrgKey, subscriberOrgSummary); | |
} | |
// Non-prod org subscribers | |
List<PackageSubscriber> nonProdInstallMetrics = [ | |
SELECT Id, ParentOrg, MetadataPackageId, OrgKey, OrgName, OrgType | |
FROM PackageSubscriber | |
WHERE ParentOrg != null | |
ORDER BY OrgName | |
]; | |
System.debug('nonProdInstallMetrics==' + nonProdInstallMetrics); | |
for (PackageSubscriber nonProdSubscriber : nonProdInstallMetrics) { | |
SubscriberOrgSummary subscriberOrgSummary; | |
if (subscriberOrgDetailsByParentOrgId.containsKey(nonProdSubscriber.ParentOrg) == true) { | |
subscriberOrgSummary = subscriberOrgDetailsByParentOrgId.get(nonProdSubscriber.ParentOrg); | |
} else { | |
subscriberOrgSummary = new SubscriberOrgSummary(); | |
subscriberOrgSummary.parentOrgId = nonProdSubscriber.ParentOrg; | |
subscriberOrgSummary.subscriberName = nonProdSubscriber.OrgName; | |
subscriberOrgSummary.subscriberOrgDetails = new List<SubscriberOrgDetails>(); | |
} | |
SubscriberOrgDetails nonProdSubscriberOrgDetails = new SubscriberOrgDetails(); | |
nonProdSubscriberOrgDetails.orgId = nonProdSubscriber.OrgKey; | |
nonProdSubscriberOrgDetails.orgType = nonProdSubscriber.OrgType; | |
nonProdSubscriberOrgDetails.metadataPackageId = nonProdSubscriber.MetadataPackageId; | |
nonProdSubscriberOrgDetails.metadataPackageName = METADATA_PACKAGE_BY_ID.get(nonProdSubscriber.MetadataPackageId).Name; | |
nonProdSubscriberOrgDetails.metadataPackageNamespacePrefix = METADATA_PACKAGE_BY_ID.get(nonProdSubscriber.MetadataPackageId).NamespacePrefix; | |
subscriberOrgSummary.numberOfOrgs = subscriberOrgSummary.numberOfOrgs + 1; | |
subscriberOrgSummary.subscriberOrgDetails.add(nonProdSubscriberOrgDetails); | |
subscriberOrgDetailsByParentOrgId.put(nonProdSubscriber.ParentOrg, subscriberOrgSummary); | |
} | |
return subscriberOrgDetailsByParentOrgId; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
for (PackageSubscriberMetrics.SubscriberOrgSummary subscriberOrgSummary : PackageSubscriberMetrics.getSubscriberOrgDetails().values()) { | |
System.debug(subscriberOrgSummary); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment