Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
superrain51
apollo
提交
c585adb6
apollo
项目概览
superrain51
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c585adb6
编写于
10月 18, 2016
作者:
张
张乐
提交者:
GitHub
10月 18, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #435 from nobodyiam/release-delivery-time
Record and display release delivery time
上级
914aafa4
c2d82c07
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
110 addition
and
31 deletion
+110
-31
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/InstanceConfigController.java
...llo/adminservice/controller/InstanceConfigController.java
+24
-2
apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/InstanceConfigControllerTest.java
...adminservice/controller/InstanceConfigControllerTest.java
+21
-3
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/InstanceConfig.java
...com/ctrip/framework/apollo/biz/entity/InstanceConfig.java
+11
-0
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/InstanceService.java
...m/ctrip/framework/apollo/biz/service/InstanceService.java
+1
-0
apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/InstanceConfigDTO.java
.../ctrip/framework/apollo/common/dto/InstanceConfigDTO.java
+9
-0
apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/util/InstanceConfigAuditUtil.java
...rk/apollo/configservice/util/InstanceConfigAuditUtil.java
+15
-4
apollo-portal/src/main/resources/static/scripts/controller/config/ConfigBaseInfoController.js
...tic/scripts/controller/config/ConfigBaseInfoController.js
+15
-12
apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js
...ces/static/scripts/directive/namespace-panel-directive.js
+1
-1
apollo-portal/src/main/resources/static/views/component/namespace-panel.html
...ain/resources/static/views/component/namespace-panel.html
+12
-8
pom.xml
pom.xml
+1
-1
未找到文件。
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/InstanceConfigController.java
浏览文件 @
c585adb6
...
...
@@ -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
;
...
...
apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/InstanceConfigControllerTest.java
浏览文件 @
c585adb6
...
...
@@ -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
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/entity/InstanceConfig.java
浏览文件 @
c585adb6
...
...
@@ -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
)
...
...
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/InstanceService.java
浏览文件 @
c585adb6
...
...
@@ -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
());
...
...
apollo-common/src/main/java/com/ctrip/framework/apollo/common/dto/InstanceConfigDTO.java
浏览文件 @
c585adb6
...
...
@@ -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
;
}
}
apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/util/InstanceConfigAuditUtil.java
浏览文件 @
c585adb6
...
...
@@ -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
;
...
...
apollo-portal/src/main/resources/static/scripts/controller/config/ConfigBaseInfoController.js
浏览文件 @
c585adb6
...
...
@@ -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
];
...
...
apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js
浏览文件 @
c585adb6
...
...
@@ -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
])
{
...
...
apollo-portal/src/main/resources/static/views/component/namespace-panel.html
浏览文件 @
c585adb6
...
...
@@ -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>
...
...
pom.xml
浏览文件 @
c585adb6
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录