Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Eladmin
Commits
e0378c3d
Commit
e0378c3d
authored
Nov 07, 2019
by
dqjdda
Browse files
加入服务监控模块,代码优化
parents
30784088
68d7d007
Changes
40
Hide whitespace changes
Inline
Side-by-side
eladmin-monitor/src/main/resources/sigar-lib/libsigar-sparc64-solaris.so
0 → 100644
View file @
e0378c3d
File added
eladmin-monitor/src/main/resources/sigar-lib/libsigar-universal-macosx.dylib
0 → 100644
View file @
e0378c3d
File added
eladmin-monitor/src/main/resources/sigar-lib/libsigar-universal64-macosx.dylib
0 → 100644
View file @
e0378c3d
File added
eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-freebsd-5.so
0 → 100644
View file @
e0378c3d
File added
eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-freebsd-6.so
0 → 100644
View file @
e0378c3d
File added
eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-linux.so
0 → 100644
View file @
e0378c3d
File added
eladmin-monitor/src/main/resources/sigar-lib/libsigar-x86-solaris.so
0 → 100644
View file @
e0378c3d
File added
eladmin-monitor/src/main/resources/sigar-lib/sigar-amd64-winnt.dll
0 → 100644
View file @
e0378c3d
File added
eladmin-monitor/src/main/resources/sigar-lib/sigar-x86-winnt.dll
0 → 100644
View file @
e0378c3d
File added
eladmin-monitor/src/main/resources/sigar-lib/sigar-x86-winnt.lib
0 → 100644
View file @
e0378c3d
File added
eladmin-system/src/main/java/me/zhengjie/modules/monitor/domain/Server.java
0 → 100644
View file @
e0378c3d
package
me.zhengjie.modules.monitor.domain
;
import
lombok.Data
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.copier.CopyOptions
;
import
javax.persistence.*
;
import
java.io.Serializable
;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Entity
@Data
@Table
(
name
=
"monitor_server"
)
public
class
Server
implements
Serializable
{
/**
* 编号
*/
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"id"
)
private
Integer
id
;
/**
* 名称
*/
@Column
(
name
=
"name"
)
private
String
name
;
/**
* IP地址
*/
@Column
(
name
=
"ip"
,
nullable
=
false
)
private
String
ip
;
/**
* 访问端口
*/
@Column
(
name
=
"port"
)
private
Integer
port
;
/**
* 状态
*/
@Column
(
name
=
"state"
)
private
String
state
;
/**
* CPU使用率
*/
@Column
(
name
=
"cpu_rate"
)
private
Double
cpuRate
;
/**
* CPU内核数
*/
@Column
(
name
=
"cpu_core"
)
private
Integer
cpuCore
;
/**
* 内存总数
*/
@Column
(
name
=
"mem_total"
)
private
Double
memTotal
;
/**
* 内存使用量
*/
@Column
(
name
=
"mem_used"
)
private
Double
memUsed
;
/**
* 磁盘总量
*/
@Column
(
name
=
"disk_total"
)
private
Double
diskTotal
;
/**
* 磁盘使用量
*/
@Column
(
name
=
"disk_used"
)
private
Double
diskUsed
;
/**
* 交换区总量
*/
@Column
(
name
=
"swap_total"
)
private
Double
swapTotal
;
/**
* 交换区使用量
*/
@Column
(
name
=
"swap_used"
)
private
Double
swapUsed
;
/**
* 排序
*/
@Column
(
name
=
"sort"
)
private
Integer
sort
;
public
void
copy
(
Server
source
){
BeanUtil
.
copyProperties
(
source
,
this
,
CopyOptions
.
create
().
setIgnoreNullValue
(
true
));
}
}
eladmin-system/src/main/java/me/zhengjie/modules/monitor/repository/ServerRepository.java
0 → 100644
View file @
e0378c3d
package
me.zhengjie.modules.monitor.repository
;
import
me.zhengjie.modules.monitor.domain.Server
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
/**
* @author Zhang houying
* @date 2019-11-03
*/
public
interface
ServerRepository
extends
JpaRepository
<
Server
,
Integer
>,
JpaSpecificationExecutor
<
Server
>
{
}
eladmin-system/src/main/java/me/zhengjie/modules/monitor/rest/ServerController.java
0 → 100644
View file @
e0378c3d
package
me.zhengjie.modules.monitor.rest
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
me.zhengjie.aop.log.Log
;
import
me.zhengjie.modules.monitor.domain.Server
;
import
me.zhengjie.modules.monitor.service.ServerService
;
import
me.zhengjie.modules.monitor.service.dto.ServerQueryCriteria
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Api
(
tags
=
"Server管理"
)
@RestController
@RequestMapping
(
"/api/server"
)
public
class
ServerController
{
private
final
ServerService
serverService
;
public
ServerController
(
ServerService
serverService
)
{
this
.
serverService
=
serverService
;
}
@GetMapping
@Log
(
"查询Server"
)
@ApiOperation
(
"查询Server"
)
@PreAuthorize
(
"@el.check('server:list')"
)
public
ResponseEntity
getServers
(
ServerQueryCriteria
criteria
,
Pageable
pageable
){
return
new
ResponseEntity
<>(
serverService
.
queryAll
(
criteria
,
pageable
),
HttpStatus
.
OK
);
}
@PostMapping
@Log
(
"新增Server"
)
@ApiOperation
(
"新增Server"
)
@PreAuthorize
(
"@el.check('server:add')"
)
public
ResponseEntity
create
(
@Validated
@RequestBody
Server
resources
){
return
new
ResponseEntity
<>(
serverService
.
create
(
resources
),
HttpStatus
.
CREATED
);
}
@PutMapping
@Log
(
"修改Server"
)
@ApiOperation
(
"修改Server"
)
@PreAuthorize
(
"@el.check('server:edit')"
)
public
ResponseEntity
update
(
@Validated
@RequestBody
Server
resources
){
serverService
.
update
(
resources
);
return
new
ResponseEntity
(
HttpStatus
.
NO_CONTENT
);
}
@DeleteMapping
(
value
=
"/{id}"
)
@Log
(
"删除Server"
)
@ApiOperation
(
"删除Server"
)
@PreAuthorize
(
"@el.check('server:del')"
)
public
ResponseEntity
delete
(
@PathVariable
Integer
id
){
serverService
.
delete
(
id
);
return
new
ResponseEntity
(
HttpStatus
.
OK
);
}
}
eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/ServerService.java
0 → 100644
View file @
e0378c3d
package
me.zhengjie.modules.monitor.service
;
import
me.zhengjie.modules.monitor.domain.Server
;
import
me.zhengjie.modules.monitor.service.dto.ServerDTO
;
import
me.zhengjie.modules.monitor.service.dto.ServerQueryCriteria
;
import
org.springframework.data.domain.Pageable
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author Zhang houying
* @date 2019-11-03
*/
public
interface
ServerService
{
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map
<
String
,
Object
>
queryAll
(
ServerQueryCriteria
criteria
,
Pageable
pageable
);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<ServerDTO>
*/
List
<
ServerDTO
>
queryAll
(
ServerQueryCriteria
criteria
);
/**
* 根据ID查询
* @param id ID
* @return ServerDTO
*/
ServerDTO
findById
(
Integer
id
);
ServerDTO
create
(
Server
resources
);
void
update
(
Server
resources
);
void
delete
(
Integer
id
);
}
eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/dto/ServerDTO.java
0 → 100644
View file @
e0378c3d
package
me.zhengjie.modules.monitor.service.dto
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Data
public
class
ServerDTO
implements
Serializable
{
// 编号
private
Integer
id
;
// 名称
private
String
name
;
// IP地址
private
String
ip
;
// 访问端口
private
Integer
port
;
// 状态
private
String
state
;
// CPU使用率
private
Float
cpuRate
;
// CPU内核数
private
Integer
cpuCore
;
// 内存总数
private
Float
memTotal
;
// 内存使用量
private
Float
memUsed
;
// 磁盘总量
private
Float
diskTotal
;
// 磁盘使用量
private
Float
diskUsed
;
// 交换区总量
private
Float
swapTotal
;
// 交换区使用量
private
Float
swapUsed
;
// 排序
private
Integer
sort
;
}
eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/dto/ServerQueryCriteria.java
0 → 100644
View file @
e0378c3d
package
me.zhengjie.modules.monitor.service.dto
;
import
lombok.Data
;
import
me.zhengjie.annotation.Query
;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Data
public
class
ServerQueryCriteria
{
// 模糊
@Query
(
type
=
Query
.
Type
.
INNER_LIKE
)
private
String
name
;
// 模糊
@Query
(
type
=
Query
.
Type
.
INNER_LIKE
)
private
String
ip
;
}
eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/impl/ServerServiceImpl.java
0 → 100644
View file @
e0378c3d
package
me.zhengjie.modules.monitor.service.impl
;
import
cn.hutool.http.HttpUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
me.zhengjie.modules.monitor.domain.Server
;
import
me.zhengjie.modules.monitor.repository.ServerRepository
;
import
me.zhengjie.modules.monitor.service.ServerService
;
import
me.zhengjie.modules.monitor.service.dto.ServerDTO
;
import
me.zhengjie.modules.monitor.service.dto.ServerQueryCriteria
;
import
me.zhengjie.modules.monitor.service.mapper.ServerMapper
;
import
me.zhengjie.utils.PageUtil
;
import
me.zhengjie.utils.QueryHelp
;
import
me.zhengjie.utils.ValidationUtil
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Service
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
ServerServiceImpl
implements
ServerService
{
private
final
ServerRepository
serverRepository
;
private
final
ServerMapper
serverMapper
;
public
ServerServiceImpl
(
ServerRepository
serverRepository
,
ServerMapper
serverMapper
)
{
this
.
serverRepository
=
serverRepository
;
this
.
serverMapper
=
serverMapper
;
}
@Override
public
Map
<
String
,
Object
>
queryAll
(
ServerQueryCriteria
criteria
,
Pageable
pageable
){
Page
<
Server
>
page
=
serverRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
page
.
forEach
(
server
->
{
try
{
server
.
setState
(
"1"
);
String
url
=
String
.
format
(
"http://%s:%d/api/serverMonitor"
,
server
.
getIp
(),
server
.
getPort
());
String
res
=
HttpUtil
.
get
(
url
,
1000
);
JSONObject
obj
=
JSONObject
.
parseObject
(
res
);
server
.
setCpuRate
(
obj
.
getDouble
(
"cpuRate"
));
server
.
setCpuCore
(
obj
.
getInteger
(
"cpuCore"
));
server
.
setMemTotal
(
obj
.
getDouble
(
"memTotal"
));
server
.
setMemUsed
(
obj
.
getDouble
(
"memUsed"
));
server
.
setDiskTotal
(
obj
.
getDouble
(
"diskTotal"
));
server
.
setDiskUsed
(
obj
.
getDouble
(
"diskUsed"
));
server
.
setSwapTotal
(
obj
.
getDouble
(
"swapTotal"
));
server
.
setSwapUsed
(
obj
.
getDouble
(
"swapUsed"
));
}
catch
(
Exception
e
)
{
server
.
setState
(
"0"
);
e
.
printStackTrace
();
}
});
return
PageUtil
.
toPage
(
page
.
map
(
serverMapper:
:
toDto
));
}
@Override
public
List
<
ServerDTO
>
queryAll
(
ServerQueryCriteria
criteria
){
return
serverMapper
.
toDto
(
serverRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
)));
}
@Override
public
ServerDTO
findById
(
Integer
id
)
{
Server
server
=
serverRepository
.
findById
(
id
).
orElseGet
(
Server:
:
new
);
ValidationUtil
.
isNull
(
server
.
getId
(),
"Server"
,
"id"
,
id
);
return
serverMapper
.
toDto
(
server
);
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ServerDTO
create
(
Server
resources
)
{
return
serverMapper
.
toDto
(
serverRepository
.
save
(
resources
));
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
update
(
Server
resources
)
{
Server
server
=
serverRepository
.
findById
(
resources
.
getId
()).
orElseGet
(
Server:
:
new
);
ValidationUtil
.
isNull
(
server
.
getId
(),
"Server"
,
"id"
,
resources
.
getId
());
server
.
copy
(
resources
);
serverRepository
.
save
(
server
);
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
delete
(
Integer
id
)
{
serverRepository
.
deleteById
(
id
);
}
}
eladmin-system/src/main/java/me/zhengjie/modules/monitor/service/mapper/ServerMapper.java
0 → 100644
View file @
e0378c3d
package
me.zhengjie.modules.monitor.service.mapper
;
import
me.zhengjie.base.BaseMapper
;
import
me.zhengjie.modules.monitor.domain.Server
;
import
me.zhengjie.modules.monitor.service.dto.ServerDTO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.ReportingPolicy
;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Mapper
(
componentModel
=
"spring"
,
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
public
interface
ServerMapper
extends
BaseMapper
<
ServerDTO
,
Server
>
{
}
pom.xml
View file @
e0378c3d
...
...
@@ -14,7 +14,8 @@
<module>
eladmin-logging
</module>
<module>
eladmin-system
</module>
<module>
eladmin-tools
</module>
</modules>
<module>
eladmin-monitor
</module>
</modules>
<name>
EL-ADMIN后台管理系统
</name>
<url>
http://auauz.net
</url>
...
...
sql/eladmin.sql
View file @
e0378c3d
...
...
@@ -291,7 +291,7 @@ INSERT INTO `menu` VALUES (75, b'0', '任务删除', '', 28, 4, '', '', b'0', b'
INSERT
INTO
`menu`
VALUES
(
77
,
b
'0'
,
'上传文件'
,
''
,
18
,
2
,
''
,
''
,
b
'0'
,
b
'0'
,
''
,
'2019-10-29 13:09:09'
,
'storage:add'
,
2
);
INSERT
INTO
`menu`
VALUES
(
78
,
b
'0'
,
'文件编辑'
,
''
,
18
,
3
,
''
,
''
,
b
'0'
,
b
'0'
,
''
,
'2019-10-29 13:09:22'
,
'storage:edit'
,
2
);
INSERT
INTO
`menu`
VALUES
(
79
,
b
'0'
,
'文件删除'
,
''
,
18
,
4
,
''
,
''
,
b
'0'
,
b
'0'
,
''
,
'2019-10-29 13:09:34'
,
'storage:del'
,
2
);
INSERT
INTO
`menu`
VALUES
(
81
,
b
'0'
,
'服务器监控'
,
'monitor/server/index'
,
6
,
15
,
'system'
,
'server'
,
b
'0'
,
b
'0'
,
'Server'
,
'2019-11-01 16:37:41'
,
'server:list'
,
1
);
-- ----------------------------
-- Table structure for picture
-- ----------------------------
...
...
@@ -497,6 +497,7 @@ INSERT INTO `roles_menus` VALUES (75, 1);
INSERT
INTO
`roles_menus`
VALUES
(
77
,
1
);
INSERT
INTO
`roles_menus`
VALUES
(
78
,
1
);
INSERT
INTO
`roles_menus`
VALUES
(
79
,
1
);
INSERT
INTO
`roles_menus`
VALUES
(
81
,
1
);
INSERT
INTO
`roles_menus`
VALUES
(
1
,
2
);
INSERT
INTO
`roles_menus`
VALUES
(
2
,
2
);
INSERT
INTO
`roles_menus`
VALUES
(
3
,
2
);
...
...
@@ -632,4 +633,24 @@ INSERT INTO `visits` VALUES (108, '2019-10-29 21:45:49', '2019-10-29', 1, 1, 'Tu
INSERT
INTO
`visits`
VALUES
(
109
,
'2019-10-30 08:58:54'
,
'2019-10-30'
,
2
,
11
,
'Wed'
);
INSERT
INTO
`visits`
VALUES
(
110
,
'2019-10-31 09:04:18'
,
'2019-10-31'
,
2
,
8
,
'Thu'
);
DROP
TABLE
IF
EXISTS
`monitor_server`
;
CREATE
TABLE
`monitor_server`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
COMMENT
'编号'
,
`name`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'名称'
,
`ip`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NOT
NULL
COMMENT
'IP地址'
,
`port`
int
(
11
)
NULL
DEFAULT
NULL
COMMENT
'访问端口'
,
`state`
varchar
(
255
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'状态'
,
`cpu_rate`
float
NULL
DEFAULT
NULL
COMMENT
'CPU使用率'
,
`cpu_core`
int
(
11
)
NULL
DEFAULT
NULL
COMMENT
'CPU内核数'
,
`mem_total`
float
NULL
DEFAULT
NULL
COMMENT
'内存总数'
,
`mem_used`
float
NULL
DEFAULT
NULL
COMMENT
'内存使用量'
,
`disk_total`
float
NULL
DEFAULT
NULL
COMMENT
'磁盘总量'
,
`disk_used`
float
NULL
DEFAULT
NULL
COMMENT
'磁盘使用量'
,
`swap_total`
float
NULL
DEFAULT
NULL
COMMENT
'交换区总量'
,
`swap_used`
float
NULL
DEFAULT
NULL
COMMENT
'交换区使用量'
,
`sort`
int
(
11
)
NULL
DEFAULT
NULL
COMMENT
'排序'
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
5
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
COMMENT
=
'服务器监控'
ROW_FORMAT
=
Dynamic
;
SET
FOREIGN_KEY_CHECKS
=
1
;
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment