提交 c585adb6 编写于 作者: 张乐 提交者: GitHub

Merge pull request #435 from nobodyiam/release-delivery-time

Record and display release delivery time
......@@ -61,14 +61,35 @@ public class InstanceConfigController {
List<InstanceDTO> instanceDTOs = Collections.emptyList();
if (instanceConfigsPage.hasContent()) {
Set<Long> instanceIds = instanceConfigsPage.getContent().stream().map
(InstanceConfig::getInstanceId).collect(Collectors.toSet());
Multimap<Long, InstanceConfig> instanceConfigMap = HashMultimap.create();
Set<String> otherReleaseKeys = Sets.newHashSet();
for (InstanceConfig instanceConfig : instanceConfigsPage.getContent()) {
instanceConfigMap.put(instanceConfig.getInstanceId(), instanceConfig);
otherReleaseKeys.add(instanceConfig.getReleaseKey());
}
Set<Long> instanceIds = instanceConfigMap.keySet();
List<Instance> instances = instanceService.findInstancesByIds(instanceIds);
if (!CollectionUtils.isEmpty(instances)) {
instanceDTOs = BeanUtils.batchTransform(InstanceDTO.class, instances);
}
for (InstanceDTO instanceDTO : instanceDTOs) {
Collection<InstanceConfig> configs = instanceConfigMap.get(instanceDTO.getId());
List<InstanceConfigDTO> configDTOs = configs.stream().map(instanceConfig -> {
InstanceConfigDTO instanceConfigDTO = new InstanceConfigDTO();
//to save some space
instanceConfigDTO.setRelease(null);
instanceConfigDTO.setReleaseDeliveryTime(instanceConfig.getReleaseDeliveryTime());
instanceConfigDTO.setDataChangeLastModifiedTime(instanceConfig
.getDataChangeLastModifiedTime());
return instanceConfigDTO;
}).collect(Collectors.toList());
instanceDTO.setConfigs(configDTOs);
}
}
return new PageDTO<>(instanceDTOs, pageable, instanceConfigsPage.getTotalElements());
......@@ -126,6 +147,7 @@ public class InstanceConfigController {
List<InstanceConfigDTO> configDTOs = configs.stream().map(instanceConfig -> {
InstanceConfigDTO instanceConfigDTO = new InstanceConfigDTO();
instanceConfigDTO.setRelease(releaseMap.get(instanceConfig.getReleaseKey()));
instanceConfigDTO.setReleaseDeliveryTime(instanceConfig.getReleaseDeliveryTime());
instanceConfigDTO.setDataChangeLastModifiedTime(instanceConfig
.getDataChangeLastModifiedTime());
return instanceConfigDTO;
......
......@@ -72,13 +72,15 @@ public class InstanceConfigControllerTest {
String someConfigAppId = "someConfigAppId";
String someConfigNamespace = "someNamespace";
String someIp = "someIp";
Date someReleaseDeliveryTime = new Date();
Date anotherReleaseDeliveryTime = new Date();
when(releaseService.findOne(someReleaseId)).thenReturn(someRelease);
InstanceConfig someInstanceConfig = assembleInstanceConfig(someInstanceId, someConfigAppId,
someConfigNamespace, someReleaseKey);
someConfigNamespace, someReleaseKey, someReleaseDeliveryTime);
InstanceConfig anotherInstanceConfig = assembleInstanceConfig(anotherInstanceId,
someConfigAppId, someConfigNamespace, someReleaseKey);
someConfigAppId, someConfigNamespace, someReleaseKey, anotherReleaseDeliveryTime);
List<InstanceConfig> instanceConfigs = Lists.newArrayList(someInstanceConfig,
anotherInstanceConfig);
Page<InstanceConfig> instanceConfigPage = new PageImpl<>(instanceConfigs, pageable,
......@@ -113,6 +115,12 @@ public class InstanceConfigControllerTest {
verifyInstance(someInstance, someInstanceDto);
verifyInstance(anotherInstance, anotherInstanceDto);
assertEquals(1, someInstanceDto.getConfigs().size());
assertEquals(someReleaseDeliveryTime, someInstanceDto.getConfigs().get(0).getReleaseDeliveryTime());
assertEquals(1, anotherInstanceDto.getConfigs().size());
assertEquals(anotherReleaseDeliveryTime, anotherInstanceDto.getConfigs().get(0).getReleaseDeliveryTime());
}
@Test(expected = NotFoundException.class)
......@@ -133,6 +141,9 @@ public class InstanceConfigControllerTest {
long anotherReleaseId = 2;
String releaseIds = Joiner.on(",").join(someReleaseId, anotherReleaseId);
Date someReleaseDeliveryTime = new Date();
Date anotherReleaseDeliveryTime = new Date();
Release someRelease = mock(Release.class);
Release anotherRelease = mock(Release.class);
String someReleaseKey = "someReleaseKey";
......@@ -153,6 +164,8 @@ public class InstanceConfigControllerTest {
when(anotherInstanceConfig.getInstanceId()).thenReturn(anotherInstanceId);
when(someInstanceConfig.getReleaseKey()).thenReturn(someInstanceConfigReleaseKey);
when(anotherInstanceConfig.getReleaseKey()).thenReturn(anotherInstanceConfigReleaseKey);
when(someInstanceConfig.getReleaseDeliveryTime()).thenReturn(someReleaseDeliveryTime);
when(anotherInstanceConfig.getReleaseDeliveryTime()).thenReturn(anotherReleaseDeliveryTime);
when(instanceService.findInstanceConfigsByNamespaceWithReleaseKeysNotIn(someConfigAppId,
someConfigClusterName, someConfigNamespaceName, Sets.newHashSet(someReleaseKey,
anotherReleaseKey))).thenReturn(Lists.newArrayList(someInstanceConfig,
......@@ -203,6 +216,10 @@ public class InstanceConfigControllerTest {
assertEquals(anotherInstanceConfigReleaseKey, anotherInstanceDto.getConfigs().get(0)
.getRelease()
.getReleaseKey());
assertEquals(someReleaseDeliveryTime, someInstanceDto.getConfigs().get(0).getReleaseDeliveryTime());
assertEquals(anotherReleaseDeliveryTime, anotherInstanceDto.getConfigs().get(0)
.getReleaseDeliveryTime());
}
@Test
......@@ -284,13 +301,14 @@ public class InstanceConfigControllerTest {
}
private InstanceConfig assembleInstanceConfig(long instanceId, String configAppId, String
configNamespaceName, String releaseKey) {
configNamespaceName, String releaseKey, Date releaseDeliveryTime) {
InstanceConfig instanceConfig = new InstanceConfig();
instanceConfig.setInstanceId(instanceId);
instanceConfig.setConfigAppId(configAppId);
instanceConfig.setConfigNamespaceName(configNamespaceName);
instanceConfig.setReleaseKey(releaseKey);
instanceConfig.setDataChangeLastModifiedTime(new Date());
instanceConfig.setReleaseDeliveryTime(releaseDeliveryTime);
return instanceConfig;
}
}
\ No newline at end of file
......@@ -38,6 +38,9 @@ public class InstanceConfig {
@Column(name = "ReleaseKey", nullable = false)
private String releaseKey;
@Column(name = "ReleaseDeliveryTime", nullable = false)
private Date releaseDeliveryTime;
@Column(name = "DataChange_CreatedTime", nullable = false)
private Date dataChangeCreatedTime;
......@@ -123,6 +126,14 @@ public class InstanceConfig {
this.configClusterName = configClusterName;
}
public Date getReleaseDeliveryTime() {
return releaseDeliveryTime;
}
public void setReleaseDeliveryTime(Date releaseDeliveryTime) {
this.releaseDeliveryTime = releaseDeliveryTime;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
......
......@@ -127,6 +127,7 @@ public class InstanceService {
"Instance config %d doesn't exist", instanceConfig.getId()));
existedInstanceConfig.setReleaseKey(instanceConfig.getReleaseKey());
existedInstanceConfig.setReleaseDeliveryTime(instanceConfig.getReleaseDeliveryTime());
existedInstanceConfig.setDataChangeLastModifiedTime(instanceConfig
.getDataChangeLastModifiedTime());
......
......@@ -7,6 +7,7 @@ import java.util.Date;
*/
public class InstanceConfigDTO {
private ReleaseDTO release;
private Date releaseDeliveryTime;
private Date dataChangeLastModifiedTime;
public ReleaseDTO getRelease() {
......@@ -24,4 +25,12 @@ public class InstanceConfigDTO {
public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedTime) {
this.dataChangeLastModifiedTime = dataChangeLastModifiedTime;
}
public Date getReleaseDeliveryTime() {
return releaseDeliveryTime;
}
public void setReleaseDeliveryTime(Date releaseDeliveryTime) {
this.releaseDeliveryTime = releaseDeliveryTime;
}
}
......@@ -88,11 +88,14 @@ public class InstanceConfigAuditUtil implements InitializingBean {
InstanceConfig instanceConfig = instanceService.findInstanceConfig(instanceId, auditModel
.getConfigAppId(), auditModel.getConfigClusterName(), auditModel.getConfigNamespace());
//we need to update no matter the release key is the same or not, to ensure the
//last modified time is updated each day
if (instanceConfig != null) {
instanceConfig.setReleaseKey(auditModel.getReleaseKey());
instanceConfig.setDataChangeLastModifiedTime(new Date());
if (!Objects.equals(instanceConfig.getReleaseKey(), auditModel.getReleaseKey())) {
instanceConfig.setReleaseKey(auditModel.getReleaseKey());
instanceConfig.setReleaseDeliveryTime(auditModel.getOfferTime());
}
//we need to update no matter the release key is the same or not, to ensure the
//last modified time is updated each day
instanceConfig.setDataChangeLastModifiedTime(auditModel.getOfferTime());
instanceService.updateInstanceConfig(instanceConfig);
return;
}
......@@ -103,6 +106,8 @@ public class InstanceConfigAuditUtil implements InitializingBean {
instanceConfig.setConfigClusterName(auditModel.getConfigClusterName());
instanceConfig.setConfigNamespaceName(auditModel.getConfigNamespace());
instanceConfig.setReleaseKey(auditModel.getReleaseKey());
instanceConfig.setReleaseDeliveryTime(auditModel.getOfferTime());
instanceConfig.setDataChangeCreatedTime(auditModel.getOfferTime());
try {
instanceService.createInstanceConfig(instanceConfig);
......@@ -174,10 +179,12 @@ public class InstanceConfigAuditUtil implements InitializingBean {
private String configClusterName;
private String configNamespace;
private String releaseKey;
private Date offerTime;
public InstanceConfigAuditModel(String appId, String clusterName, String dataCenter, String
clientIp, String configAppId, String configClusterName, String configNamespace, String
releaseKey) {
this.offerTime = new Date();
this.appId = appId;
this.clusterName = clusterName;
this.dataCenter = Strings.isNullOrEmpty(dataCenter) ? "" : dataCenter;
......@@ -220,6 +227,10 @@ public class InstanceConfigAuditUtil implements InitializingBean {
return configClusterName;
}
public Date getOfferTime() {
return offerTime;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
......
......@@ -83,20 +83,23 @@ function ConfigBaseInfoController($rootScope, $scope, $location, toastr, UserSer
var VISITED_APPS_STORAGE_KEY = "VisitedAppsV2";
var visitedAppsObject = JSON.parse(localStorage.getItem(VISITED_APPS_STORAGE_KEY));
var hasSaved = false;
if (visitedAppsObject) {
var visitedApps = visitedAppsObject[$rootScope.pageContext.userId];
if (visitedApps && visitedApps.length > 0) {
visitedApps.forEach(function (app) {
if (app == appId) {
hasSaved = true;
return;
}
});
}
} else {
if (!visitedAppsObject) {
visitedAppsObject = {};
visitedAppsObject[$rootScope.pageContext.userId] = [];
}
if (!visitedAppsObject[$rootScope.pageContext.userId]) {
visitedAppsObject[$rootScope.pageContext.userId] = [];
}
var visitedApps = visitedAppsObject[$rootScope.pageContext.userId];
if (visitedApps && visitedApps.length > 0) {
visitedApps.forEach(function (app) {
if (app == appId) {
hasSaved = true;
return;
}
});
}
var currentUserVisitedApps = visitedAppsObject[$rootScope.pageContext.userId];
......
......@@ -257,7 +257,7 @@ directive_module.directive('apollonspanel',
result.forEach(function (instance) {
var configs = instance.configs;
if (configs.length > 0) {
if (configs && configs.length > 0) {
configs.forEach(function (instanceConfig) {
var release = instanceConfig.release;
if (!groupedInstances[release.id]) {
......
......@@ -409,14 +409,16 @@
<td>Cluster Name</td>
<td>Data Center</td>
<td>IP</td>
<td>配置获取时间</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="instance in namespace.latestReleaseInstances.content">
<td width="25%" ng-bind="instance.appId"></td>
<td width="25%" ng-bind="instance.clusterName"></td>
<td width="25%" ng-bind="instance.dataCenter"></td>
<td width="25%" ng-bind="instance.ip"></td>
<td width="20%" ng-bind="instance.appId"></td>
<td width="20%" ng-bind="instance.clusterName"></td>
<td width="20%" ng-bind="instance.dataCenter"></td>
<td width="20%" ng-bind="instance.ip"></td>
<td width="20%">{{instance.configs && instance.configs.length ? (instance.configs[0].releaseDeliveryTime | date: 'yyyy-MM-dd HH:mm:ss') : ''}}</td>
</tr>
</tbody>
</table>
......@@ -450,14 +452,16 @@
<td>Cluster Name</td>
<td>Data Center</td>
<td>IP</td>
<td>配置获取时间</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="instance in namespace.notLatestReleaseInstances[release.id]">
<td width="25%" ng-bind="instance.appId"></td>
<td width="25%" ng-bind="instance.clusterName"></td>
<td width="25%" ng-bind="instance.dataCenter"></td>
<td width="25%" ng-bind="instance.ip"></td>
<td width="20%" ng-bind="instance.appId"></td>
<td width="20%" ng-bind="instance.clusterName"></td>
<td width="20%" ng-bind="instance.dataCenter"></td>
<td width="20%" ng-bind="instance.ip"></td>
<td width="20%">{{instance.configs && instance.configs.length ? (instance.configs[0].releaseDeliveryTime | date: 'yyyy-MM-dd HH:mm:ss') : ''}}</td>
</tr>
</tbody>
</table>
......
......@@ -139,7 +139,7 @@
<dependency>
<groupId>com.ctrip.framework</groupId>
<artifactId>framework-foundation</artifactId>
<version>1.2.0</version>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>com.dianping.cat</groupId>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册