Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 25 additions & 3 deletions src/main/java/com/uci/utils/CampaignService.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ public Application getCampaignFromName(String campaignName) throws Exception {
* @return Application
*/
public Mono<JsonNode> getCampaignFromNameTransformer(String campaignName) {
// System.out.println(campaignName);
return webClient.get()
.uri(builder -> builder.path("admin/v1/bot/search/").queryParam("name", campaignName).queryParam("match", true).build())
.retrieve()
Expand All @@ -97,12 +98,23 @@ public Mono<JsonNode> getCampaignFromNameTransformer(String campaignName) {
@Override
public JsonNode apply(String response) {
if (response != null) {
ObjectMapper mapper = new ObjectMapper();
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readTree(response).get("data").get(0);
} catch (JsonProcessingException e) {
JsonNode root = mapper.readTree(response);
String responseCode = root.path("responseCode").asText();
if(isApiResponseOk(responseCode)) {
return root.path("result").get("data").get(0);
}
return null;
} catch (JsonProcessingException jsonMappingException) {
return null;
}
// ObjectMapper mapper = new ObjectMapper();
// try {
// return mapper.readTree(response).get("data").get(0);
// } catch (JsonProcessingException e) {
// return null;
// }
}
return null;
}
Expand Down Expand Up @@ -223,5 +235,15 @@ public Application getCampaignFromNameESamwad(String campaignName) {
}
return currentApplication;
}

/**
* Check if response code sent in api response is ok
*
* @param responseCode
* @return Boolean
*/
private Boolean isApiResponseOk(String responseCode) {
return responseCode.equals("OK");
}
}

132 changes: 119 additions & 13 deletions src/main/java/com/uci/utils/telemetry/LogTelemetryBuilder.java
Original file line number Diff line number Diff line change
@@ -1,51 +1,157 @@
package com.uci.utils.telemetry;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.uci.utils.telemetry.dto.Actor;
import com.uci.utils.telemetry.dto.Context;
import com.uci.utils.telemetry.dto.Producer;
import com.uci.utils.telemetry.dto.Telemetry;
import com.uci.utils.telemetry.util.TelemetryEventNames;
import com.uci.utils.telemetry.util.TelemetryEventTypes;
import com.uci.utils.telemetry.util.TelemetryEvents;

public class LogTelemetryBuilder {
private static final String TELEMETRY_IMPL_VERSION = "3.0";
private static final String QUESTION_TELEMETRY_IMPL_VERSION = "1.0";
private static final String LOG_TELEMETRY_IMPL_VERSION = "1.0";
private static final String ACTOR_TYPE_SYSTEM = "System";
private static final String ACTOR_TYPE_USER = "User";
private static final String DIKSHA_ORG = "DIKSHA";
private static final String pageId = "bot-screen";
private static final String LOG_EVENT_MID = "fb3db9abceb578d8acbc812cdbd9c931";
//represents the MD5 Hash of "Individual Question-Responses - Survey/Questionnaire"

public String build(
String message,
String level) {
TelemetryEventNames eventName,
String botOrg,
String channel,
String provider,
String producerID,
String userID,
String conversationId,
String conversationOwnerId) {

/* Event related parameters */
Map oData = getEData(eventName);

/* Channel Name */
String channelName = (botOrg != null && botOrg.equalsIgnoreCase("Anonymous")) ? DIKSHA_ORG : botOrg;

/* Environment */
String env = channel != null && !channel.isEmpty()
? (provider != null && !provider.isEmpty() ? channel + "." + provider : channel)
: (provider != null && !provider.isEmpty() ? provider : null);

/* Conversation Details */
List<Map<String, Object>> cdata = new ArrayList();
Map<String, Object> map1 = new HashMap<>();
map1.put("ConversationOwner", conversationOwnerId);
Map<String, Object> map2 = new HashMap<>();
map2.put("Conversation", conversationId);
cdata.add(map1);
cdata.add(map2);

Map<String, String> rollup = new HashMap<>();
rollup.put("l1", "ConversationOwner");
rollup.put("l2", "Conversation");

/* Context */
Context context = Context.builder()
.channel(DIKSHA_ORG)
.env("sys")
.channel(channelName)
.env(env)
.pdata(Producer.builder()
.id("prod.uci.diksha")
.pid(producerID).ver(LOG_TELEMETRY_IMPL_VERSION)
.build()
)
.did(userID)
.cdata(cdata)
.rollup(rollup)
.build();

/* Edata */
Map<String, Object> edata = new HashMap<>();
edata.put("type", "system");
edata.put("level", level);
edata.put("type", oData.get("edataType").toString());
edata.put("level", "INFO");
edata.put("pageid", pageId);
edata.put("message", message);
// if(params != null) {
// edata.put("params", params);
// }

/* If actor type not user, replace used id with empty string */
if(!oData.get("actorType").toString().equals(ACTOR_TYPE_USER)) {
userID = "";
}

/* Telemetry Object */
Telemetry telemetry = Telemetry.builder().
eid(TelemetryEvents.LOG.getName()).
eid(oData.get("eid").toString()).
ets(System.currentTimeMillis()).
ver(TELEMETRY_IMPL_VERSION).
mid(LOG_EVENT_MID)
.actor(Actor.builder()
.type(ACTOR_TYPE_SYSTEM)
// .id()
.type(oData.get("actorType").toString())
.id(userID)
.build())
.context(context)
// .object(object)
.edata(edata)
.build();
return Telemetry.getTelemetryRequestData(telemetry);
}

private Map getEData(TelemetryEventNames event) {
Map edata = new HashMap();
edata.put("eid", "");
edata.put("edataType", "");
edata.put("actorType", "");
if(event != null) {
switch (event) {
case STARTCONVERSATION:
edata.put("eid", TelemetryEvents.START.getName());
edata.put("edataType", TelemetryEventTypes.CONVERSATION.getName());
edata.put("actorType", ACTOR_TYPE_USER);
break;
case ENDCONVERSATION:
edata.put("eid", TelemetryEvents.START.getName());
edata.put("edataType", TelemetryEventTypes.CONVERSATION.getName());
edata.put("actorType", ACTOR_TYPE_USER);
break;
case SWITCHCONVERSATIONLOGIC:
edata.put("eid", TelemetryEvents.INTERACT.getName());
edata.put("edataType", TelemetryEventTypes.SWITCHCONVERSATION.getName());
edata.put("actorType", ACTOR_TYPE_USER);
break;
case PRETRANSFORMER:
edata.put("eid", TelemetryEvents.LOG.getName());
edata.put("edataType", TelemetryEventTypes.PRETRANSFORMER.getName());
break;
case POSTTRANSFORMER:
edata.put("eid", TelemetryEvents.LOG.getName());
edata.put("edataType", TelemetryEventTypes.POSTTRANSFORMER.getName());
break;
case SENT:
edata.put("eid", TelemetryEvents.AUDIT.getName());
edata.put("edataType", TelemetryEventTypes.SENT.getName());
break;
case DELIVERED:
edata.put("eid", TelemetryEvents.AUDIT.getName());
edata.put("edataType", TelemetryEventTypes.DELIVERED.getName());
break;
case READ:
edata.put("eid", TelemetryEvents.AUDIT.getName());
edata.put("edataType", TelemetryEventTypes.READ.getName());
edata.put("actorType", ACTOR_TYPE_USER);
break;
case AUDITEXCEPTIONS:
edata.put("eid", TelemetryEvents.ERROR.getName());
edata.put("edataType", TelemetryEventTypes.EXCEPTION.getName());
break;
default:
break;
}
}
return edata;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public String toSerializable( LogEvent event ) {
String message = event.getMessage().getFormattedMessage();
LogTelemetryBuilder object = new LogTelemetryBuilder();

String msgBody = object.build(message, event.getLevel().toString());
String msgBody = object.build(message, null, "", "", "", "", "", "", "");
JSONObject jsonBody = new JSONObject(msgBody);

return jsonBody.toString();
Expand Down
45 changes: 43 additions & 2 deletions src/main/java/com/uci/utils/telemetry/LogTelemetryMessage.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,61 @@
package com.uci.utils.telemetry;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;

import org.apache.logging.log4j.message.Message;
import org.json.JSONObject;

import com.fasterxml.jackson.databind.JsonNode;
import com.uci.utils.CampaignService;
import com.uci.utils.telemetry.util.TelemetryEventNames;

public class LogTelemetryMessage implements Message {
private final String requestBody;
private final TelemetryEventNames eventName;
private String botOrg = "";
private String channel = "";
private String provider = "";
private String producerID = "";
private String userID = "";
private String campaign = "";
private String conversationId = "";
private String conversationOwnerId = "";
// private CampaignService campaignService;

public LogTelemetryMessage(String requestBody, TelemetryEventNames eventName, String botOrg, String channel, String provider, String producerID, String userID, String conversationId, String conversationOwnerId) {
this.requestBody = requestBody;
this.eventName = eventName;
this.botOrg = botOrg;
this.channel = channel;
this.provider = provider;
this.producerID = producerID;
this.userID = userID;
this.conversationId = conversationId;
this.conversationOwnerId = conversationOwnerId;
}

public LogTelemetryMessage(String requestBody) {
public LogTelemetryMessage(String requestBody, TelemetryEventNames eventName, String botOrg, String channel, String provider, String producerID, String userID) {
this.requestBody = requestBody;
this.eventName = eventName;
this.botOrg = botOrg;
this.channel = channel;
this.provider = provider;
this.producerID = producerID;
this.userID = userID;
}

public LogTelemetryMessage(String requestBody, TelemetryEventNames eventName) {
this.requestBody = requestBody;
this.eventName = eventName;
}

@Override
public String getFormattedMessage() {
LogTelemetryBuilder object = new LogTelemetryBuilder();

String msgBody = object.build(requestBody, "INFO");
String msgBody = object.build(requestBody, eventName, botOrg, channel, provider, producerID, userID, conversationId, conversationOwnerId);
JSONObject jsonBody = new JSONObject(msgBody);

return jsonBody.toString();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.uci.utils.telemetry.util;

public enum TelemetryEventNames {
STARTCONVERSATION("Start of a Conversation"),
ENDCONVERSATION("End of a Conversation"),
SWITCHCONVERSATIONLOGIC("Switch from one Conversation Logic to another"),
PRETRANSFORMER("Pre transformer"),
POSTTRANSFORMER("Post transformer"),
SENT("Sent"),
DELIVERED("Delivered"),
READ("Read"),
AUDITEXCEPTIONS("Audit - Exceptions");

private String name;

TelemetryEventNames(String name) {
this.name = name;
}

public String getName() {
return name;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.uci.utils.telemetry.util;

public enum TelemetryEventTypes {
CONVERSATION("conversation"),
SWITCHCONVERSATION("switch-conversation"),
PRETRANSFORMER("pre-transformer"),
POSTTRANSFORMER("post-transformer"),
SENT("sent"),
DELIVERED("delivered"),
READ("read"),
EXCEPTION("Exception");

private String name;

TelemetryEventTypes(String name) {
this.name = name;
}

public String getName() {
return name;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ public enum TelemetryEvents {
ASSESS("ASSESS"),
SEARCH("SEARCH"),
LOG("LOG"),
ERROR("ERROR");
ERROR("ERROR"),
START("START"),
INTERACT("INTERACT");
private String name;

TelemetryEvents(String name) {
Expand Down