From 89feaa3339805a7034d2ea81a69163b81c45f9c9 Mon Sep 17 00:00:00 2001 From: kryalama <66494519+kryalama@users.noreply.github.com> Date: Wed, 1 Sep 2021 19:03:36 -0700 Subject: [PATCH 1/3] working code --- .../heartbeat/WebAppsHeartbeatProvider.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/WebAppsHeartbeatProvider.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/WebAppsHeartbeatProvider.java index dcd6cb64234..84bba657c8d 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/WebAppsHeartbeatProvider.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/WebAppsHeartbeatProvider.java @@ -52,6 +52,13 @@ public class WebAppsHeartbeatProvider implements HeartBeatPayloadProviderInterfa private static final String WEBSITE_HOME_STAMPNAME = "appSrv_wsStamp"; + private static final String WEBSITE_OWNER_NAME = "appSrv_wsOwner"; + + private static final String WEBSITE_RESOURCE_GROUP = "appSrv_ResourceGroup"; + + // Only populated in Azure functions + private static final String WEBSITE_SLOT_NAME = "appSrv_SlotName"; + /** Constructor that initializes fields and load environment variables. */ public WebAppsHeartbeatProvider() { defaultFields = new HashSet<>(); @@ -98,6 +105,30 @@ public Boolean call() { provider.addHeartBeatProperty(fieldName, websiteHomeStampName, true); hasSetValues = true; break; + case WEBSITE_OWNER_NAME: + String websiteOwnerName = getWebsiteOwnerName(); + if (websiteOwnerName == null) { + break; + } + provider.addHeartBeatProperty(fieldName, websiteOwnerName, true); + hasSetValues = true; + break; + case WEBSITE_RESOURCE_GROUP: + String websiteResourceGroup = getWebsiteResourceGroup(); + if (websiteResourceGroup == null) { + break; + } + provider.addHeartBeatProperty(fieldName, websiteResourceGroup, true); + hasSetValues = true; + break; + case WEBSITE_SLOT_NAME: + String websiteSlotName = getWebsiteSlotName(); + if (websiteSlotName == null) { + break; + } + provider.addHeartBeatProperty(fieldName, websiteSlotName, true); + hasSetValues = true; + break; default: logger.trace("Unknown web apps property encountered"); break; @@ -118,6 +149,9 @@ private static void initializeDefaultFields(Set defaultFields) { defaultFields.add(WEBSITE_SITE_NAME); defaultFields.add(WEBSITE_HOSTNAME); defaultFields.add(WEBSITE_HOME_STAMPNAME); + defaultFields.add(WEBSITE_OWNER_NAME); + defaultFields.add(WEBSITE_RESOURCE_GROUP); + defaultFields.add(WEBSITE_SLOT_NAME); } /** Returns the name of the website by reading environment variable. */ @@ -135,6 +169,21 @@ private String getWebsiteHomeStampName() { return environmentMap.get("WEBSITE_HOME_STAMPNAME"); } + /** Returns the website owner name by reading environment variable. */ + private String getWebsiteOwnerName() { + return environmentMap.get("WEBSITE_OWNER_NAME"); + } + + /** Returns the website resource group by reading environment variable. */ + private String getWebsiteResourceGroup() { + return environmentMap.get("WEBSITE_RESOURCE_GROUP"); + } + + /** Returns the website slot name by reading environment variable. */ + private String getWebsiteSlotName() { + return environmentMap.get("WEBSITE_SLOT_NAME"); + } + /** * This method updates the environment variable at every call to add the payload, to cover hotswap * scenarios. From 4a8d89e3518fd756dee7d6b143f86d4be7159afc Mon Sep 17 00:00:00 2001 From: kryalama <66494519+kryalama@users.noreply.github.com> Date: Thu, 2 Sep 2021 14:18:00 -0700 Subject: [PATCH 2/3] add ostype --- .../internal/heartbeat/DefaultHeartBeatPropertyProvider.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/DefaultHeartBeatPropertyProvider.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/DefaultHeartBeatPropertyProvider.java index 5cd0335eba0..ac31728aca2 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/DefaultHeartBeatPropertyProvider.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/DefaultHeartBeatPropertyProvider.java @@ -60,6 +60,8 @@ public class DefaultHeartBeatPropertyProvider implements HeartBeatPayloadProvide private static final String PROCESS_SESSION_ID = "processSessionId"; + private static final String OS_TYPE = "osType"; + public DefaultHeartBeatPropertyProvider() { defaultFields = new HashSet<>(); initializeDefaultFields(defaultFields); @@ -86,6 +88,7 @@ public Boolean call() { hasSetValues = true; break; case OS_VERSION: + case OS_TYPE: provider.addHeartBeatProperty(fieldName, getOsVersion(), true); hasSetValues = true; break; @@ -119,6 +122,7 @@ private static void initializeDefaultFields(Set defaultFields) { defaultFields.add(SDK_VERSION); defaultFields.add(OS_VERSION); defaultFields.add(PROCESS_SESSION_ID); + defaultFields.add(OS_TYPE); } /** Returns the JDK version being used by the application. */ From 86ff2a9eaa75729c63c1f04a7218b19a8da62681 Mon Sep 17 00:00:00 2001 From: kryalama <66494519+kryalama@users.noreply.github.com> Date: Thu, 2 Sep 2021 15:12:50 -0700 Subject: [PATCH 3/3] address comments and fix smoke test --- .../heartbeat/WebAppsHeartbeatProvider.java | 14 +++++++------- .../smoketest/HeartBeatTest.java | 3 ++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/WebAppsHeartbeatProvider.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/WebAppsHeartbeatProvider.java index 84bba657c8d..39eeff4c716 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/WebAppsHeartbeatProvider.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/heartbeat/WebAppsHeartbeatProvider.java @@ -21,6 +21,7 @@ package com.microsoft.applicationinsights.agent.internal.heartbeat; +import com.microsoft.applicationinsights.agent.internal.common.Strings; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -55,7 +56,6 @@ public class WebAppsHeartbeatProvider implements HeartBeatPayloadProviderInterfa private static final String WEBSITE_OWNER_NAME = "appSrv_wsOwner"; private static final String WEBSITE_RESOURCE_GROUP = "appSrv_ResourceGroup"; - // Only populated in Azure functions private static final String WEBSITE_SLOT_NAME = "appSrv_SlotName"; @@ -83,7 +83,7 @@ public Boolean call() { switch (fieldName) { case WEBSITE_SITE_NAME: String webSiteName = getWebsiteSiteName(); - if (webSiteName == null) { + if (Strings.isNullOrEmpty(webSiteName)) { break; } provider.addHeartBeatProperty(fieldName, webSiteName, true); @@ -91,7 +91,7 @@ public Boolean call() { break; case WEBSITE_HOSTNAME: String webSiteHostName = getWebsiteHostName(); - if (webSiteHostName == null) { + if (Strings.isNullOrEmpty(webSiteHostName)) { break; } provider.addHeartBeatProperty(fieldName, webSiteHostName, true); @@ -99,7 +99,7 @@ public Boolean call() { break; case WEBSITE_HOME_STAMPNAME: String websiteHomeStampName = getWebsiteHomeStampName(); - if (websiteHomeStampName == null) { + if (Strings.isNullOrEmpty(websiteHomeStampName)) { break; } provider.addHeartBeatProperty(fieldName, websiteHomeStampName, true); @@ -107,7 +107,7 @@ public Boolean call() { break; case WEBSITE_OWNER_NAME: String websiteOwnerName = getWebsiteOwnerName(); - if (websiteOwnerName == null) { + if (Strings.isNullOrEmpty(websiteOwnerName)) { break; } provider.addHeartBeatProperty(fieldName, websiteOwnerName, true); @@ -115,7 +115,7 @@ public Boolean call() { break; case WEBSITE_RESOURCE_GROUP: String websiteResourceGroup = getWebsiteResourceGroup(); - if (websiteResourceGroup == null) { + if (Strings.isNullOrEmpty(websiteResourceGroup)) { break; } provider.addHeartBeatProperty(fieldName, websiteResourceGroup, true); @@ -123,7 +123,7 @@ public Boolean call() { break; case WEBSITE_SLOT_NAME: String websiteSlotName = getWebsiteSlotName(); - if (websiteSlotName == null) { + if (Strings.isNullOrEmpty(websiteSlotName)) { break; } provider.addHeartBeatProperty(fieldName, websiteSlotName, true); diff --git a/test/smoke/testApps/HeartBeat/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HeartBeatTest.java b/test/smoke/testApps/HeartBeat/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HeartBeatTest.java index 3840d953d45..376ec35b84c 100644 --- a/test/smoke/testApps/HeartBeat/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HeartBeatTest.java +++ b/test/smoke/testApps/HeartBeat/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/HeartBeatTest.java @@ -48,7 +48,8 @@ public void testHeartBeat() throws Exception { assertNotNull(data.getProperties().get("sdkVersion")); assertNotNull(data.getProperties().get("osVersion")); assertNotNull(data.getProperties().get("processSessionId")); - assertEquals(4, data.getProperties().size()); + assertNotNull(data.getProperties().get("osType")); + assertEquals(5, data.getProperties().size()); } private static Predicate getMetricPredicate(String name) {