Skip to content

Instantly share code, notes, and snippets.

@jongpie
Created September 15, 2021 19:43
Show Gist options
  • Save jongpie/12aea450a69aa98876bc2498e02e5e11 to your computer and use it in GitHub Desktop.
Save jongpie/12aea450a69aa98876bc2498e02e5e11 to your computer and use it in GitHub Desktop.
Package Subscriber Metrics
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;
}
}
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