Details
diff --git a/azkaban-common/src/main/java/azkaban/executor/ExecutableFlow.java b/azkaban-common/src/main/java/azkaban/executor/ExecutableFlow.java
index 5a77a3e..806106c 100644
--- a/azkaban-common/src/main/java/azkaban/executor/ExecutableFlow.java
+++ b/azkaban-common/src/main/java/azkaban/executor/ExecutableFlow.java
@@ -38,13 +38,18 @@ public class ExecutableFlow extends ExecutableFlowBase {
public static final String VERSION_PARAM = "version";
public static final String PROXYUSERS_PARAM = "proxyUsers";
public static final String PROJECTNAME_PARAM = "projectName";
+ public static final String LASTMODIFIEDTIME_PARAM = "lastModfiedTime";
+ public static final String LASTMODIFIEDUSER_PARAM = "lastModifiedUser";
+
private int executionId = -1;
private int scheduleId = -1;
private int projectId;
private String projectName;
+ private String lastModifiedUser;
private int version;
private long submitTime = -1;
+ private long lastModifiedTimestamp;
private String submitUser;
private String executionPath;
@@ -56,7 +61,8 @@ public class ExecutableFlow extends ExecutableFlowBase {
this.projectName = project.getName();
this.version = project.getVersion();
this.scheduleId = -1;
-
+ this.lastModifiedTimestamp = project.getLastModifiedTimestamp();
+ this.lastModifiedUser = project.getLastModifiedUser();
this.setFlow(project, flow);
}
@@ -113,6 +119,24 @@ public class ExecutableFlow extends ExecutableFlowBase {
}
@Override
+ public long getLastModifiedTimestamp() {
+ return lastModifiedTimestamp;
+ }
+
+ public void setLastModifiedTimestamp(long lastModifiedTimestamp) {
+ this.lastModifiedTimestamp = lastModifiedTimestamp;
+ }
+
+ @Override
+ public String getLastModifiedByUser() {
+ return lastModifiedUser;
+ }
+
+ public void setLastModifiedByUser(String lastModifiedUser) {
+ this.lastModifiedUser = lastModifiedUser;
+ }
+
+ @Override
public int getProjectId() {
return projectId;
}
@@ -183,6 +207,8 @@ public class ExecutableFlow extends ExecutableFlowBase {
flowObj.put(SUBMITUSER_PARAM, submitUser);
flowObj.put(VERSION_PARAM, version);
+ flowObj.put(LASTMODIFIEDTIME_PARAM, lastModifiedTimestamp);
+ flowObj.put(LASTMODIFIEDUSER_PARAM, lastModifiedUser);
flowObj.put(EXECUTIONOPTIONS_PARAM, this.executionOptions.toObject());
flowObj.put(VERSION_PARAM, version);
@@ -217,6 +243,8 @@ public class ExecutableFlow extends ExecutableFlowBase {
this.scheduleId = flowObj.getInt(SCHEDULEID_PARAM);
this.submitUser = flowObj.getString(SUBMITUSER_PARAM);
this.version = flowObj.getInt(VERSION_PARAM);
+ this.lastModifiedTimestamp = flowObj.getLong(LASTMODIFIEDTIME_PARAM);
+ this.lastModifiedUser = flowObj.getString(LASTMODIFIEDUSER_PARAM);
this.submitTime = flowObj.getLong(SUBMITTIME_PARAM);
if (flowObj.containsKey(EXECUTIONOPTIONS_PARAM)) {
diff --git a/azkaban-common/src/main/java/azkaban/executor/ExecutableFlowBase.java b/azkaban-common/src/main/java/azkaban/executor/ExecutableFlowBase.java
index fb574fb..41389b6 100644
--- a/azkaban-common/src/main/java/azkaban/executor/ExecutableFlowBase.java
+++ b/azkaban-common/src/main/java/azkaban/executor/ExecutableFlowBase.java
@@ -87,6 +87,22 @@ public class ExecutableFlowBase extends ExecutableNode {
return -1;
}
+ public String getLastModifiedByUser() {
+ if (this.getParentFlow() != null) {
+ return this.getParentFlow().getLastModifiedByUser();
+ }
+
+ return null;
+ }
+
+ public long getLastModifiedTimestamp() {
+ if (this.getParentFlow() != null) {
+ return this.getParentFlow().getLastModifiedTimestamp();
+ }
+
+ return -1;
+ }
+
public Collection<FlowProps> getFlowProps() {
return flowProps.values();
}
diff --git a/azkaban-common/src/main/java/azkaban/flow/CommonJobProperties.java b/azkaban-common/src/main/java/azkaban/flow/CommonJobProperties.java
index 7c0b774..3d408f2 100644
--- a/azkaban-common/src/main/java/azkaban/flow/CommonJobProperties.java
+++ b/azkaban-common/src/main/java/azkaban/flow/CommonJobProperties.java
@@ -114,6 +114,16 @@ public class CommonJobProperties {
public static final String PROJECT_NAME = "azkaban.flow.projectname";
/**
+ * The project last modified by user.
+ */
+ public static final String PROJECT_LAST_CHANGED_BY = "azkaban.flow.projectlastchangedby";
+
+ /**
+ * The project last modified on date.
+ */
+ public static final String PROJECT_LAST_CHANGED_DATE = "azkaban.flow.projectlastchangeddate";
+
+ /**
* The version of the project the flow is running. This may change if a forced
* hotspot occurs.
*/
diff --git a/azkaban-common/src/main/java/azkaban/utils/PropsUtils.java b/azkaban-common/src/main/java/azkaban/utils/PropsUtils.java
index b397ad4..6fe0ac7 100644
--- a/azkaban-common/src/main/java/azkaban/utils/PropsUtils.java
+++ b/azkaban-common/src/main/java/azkaban/utils/PropsUtils.java
@@ -285,6 +285,8 @@ public class PropsUtils {
props.put(CommonJobProperties.PROJECT_NAME, flow.getProjectName());
props.put(CommonJobProperties.PROJECT_VERSION, flow.getVersion());
props.put(CommonJobProperties.FLOW_UUID, UUID.randomUUID().toString());
+ props.put(CommonJobProperties.PROJECT_LAST_CHANGED_BY, flow.getLastModifiedByUser());
+ props.put(CommonJobProperties.PROJECT_LAST_CHANGED_DATE, flow.getLastModifiedTimestamp());
DateTime loadTime = new DateTime();
@@ -299,6 +301,7 @@ public class PropsUtils {
loadTime.toString("SSS"));
props.put(CommonJobProperties.FLOW_START_TIMEZONE,
loadTime.toString("ZZZZ"));
+
return props;
}