Skip to content

Commit

Permalink
Add audit for services
Browse files Browse the repository at this point in the history
  • Loading branch information
yiming187 committed Apr 18, 2016
1 parent 7795a84 commit ef28093
Show file tree
Hide file tree
Showing 19 changed files with 489 additions and 38 deletions.
Expand Up @@ -41,7 +41,7 @@ public ResponseEntity<AppDTO> create(@RequestBody AppDTO dto) {
public void delete(@PathVariable("appId") String appId) {
App entity = appService.findOne(appId);
if (entity == null) throw new NotFoundException("app not found for appId " + appId);
appService.delete(entity.getId());
appService.delete(entity.getId(), "who");
}

@RequestMapping("/apps")
Expand Down
Expand Up @@ -42,7 +42,7 @@ public void delete(@PathVariable("appId") String appId,
Cluster entity = clusterService.findOne(appId, clusterName);
if (entity == null)
throw new NotFoundException("cluster not found for clusterName " + clusterName);
clusterService.delete(entity.getId());
clusterService.delete(entity.getId(), "who");
}

@RequestMapping("/apps/{appId}/clusters")
Expand Down
Expand Up @@ -39,7 +39,7 @@ public ResponseEntity<ItemDTO> create(@RequestBody ItemDTO dto) {
public void delete(@PathVariable("itemId") long itemId) {
Item entity = itemService.findOne(itemId);
if (entity == null) throw new NotFoundException("item not found for itemId " + itemId);
itemService.delete(entity.getId());
itemService.delete(entity.getId(), "who");
}

@RequestMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items")
Expand Down
Expand Up @@ -51,7 +51,7 @@ public void delete(@PathVariable("appId") String appId,
Namespace entity = namespaceService.findOne(appId, clusterName, namespaceName);
if (entity == null) throw new NotFoundException(
String.format("namespace not found for %s %s %s", appId, clusterName, namespaceName));
namespaceService.delete(entity.getId());
namespaceService.delete(entity.getId(), "who");
}

@RequestMapping("/apps/{appId}/clusters/{clusterName}/namespaces")
Expand Down
Expand Up @@ -63,7 +63,7 @@ public ReleaseDTO buildRelease(@PathVariable("appId") String appId,
@PathVariable("clusterName") String clusterName,
@PathVariable("namespaceName") String namespaceName, @RequestParam("name") String name,
@RequestParam(name = "comment", required = false) String comment) {
Release release = releaseService.buildRelease(name, comment, appId, clusterName, namespaceName);
Release release = releaseService.buildRelease(name, comment, appId, clusterName, namespaceName, "who");
return BeanUtils.transfrom(ReleaseDTO.class, release);
}
}
64 changes: 64 additions & 0 deletions apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Audit.java
@@ -0,0 +1,64 @@
package com.ctrip.apollo.biz.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

@Entity
@Table(name = "Audit")
@SQLDelete(sql = "Update Audit set isDeleted = 1 where id = ?")
@Where(clause = "isDeleted = 0")
public class Audit extends BaseEntity {

public enum OP {
INSERT, UPDATE, DELETE
}

@Column(name = "EntityName", nullable = false)
private String entityName;

@Column(name="EntityId")
private Long entityId;

@Column(name = "OpName", nullable = false)
private String opName;

@Column(name = "Comment")
private String comment;

public String getComment() {
return comment;
}

public Long getEntityId() {
return entityId;
}

public String getEntityName() {
return entityName;
}

public String getOpName() {
return opName;
}

public void setComment(String comment) {
this.comment = comment;
}

public void setEntityId(Long entityId) {
this.entityId = entityId;
}

public void setEntityName(String entityName) {
this.entityName = entityName;
}

public void setOpName(String opName) {
this.opName = opName;
}

}
Expand Up @@ -12,6 +12,8 @@
import javax.persistence.PreRemove;
import javax.persistence.PreUpdate;

import com.ctrip.apollo.core.utils.ToStringHelper;

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseEntity {
Expand All @@ -24,10 +26,10 @@ public abstract class BaseEntity {
@Column(name = "IsDeleted", columnDefinition = "Bit default '0'")
protected boolean isDeleted = false;

@Column(name = "DataChange_CreatedBy")
@Column(name = "DataChange_CreatedBy", nullable = false)
private String dataChangeCreatedBy;

@Column(name = "DataChange_CreatedTime")
@Column(name = "DataChange_CreatedTime", nullable = false)
private Date dataChangeCreatedTime;

@Column(name = "DataChange_LastModifiedBy")
Expand Down Expand Up @@ -85,18 +87,21 @@ public void setId(long id) {
}

@PrePersist
private void prePersist() {
protected void prePersist() {
if (this.dataChangeCreatedTime == null) dataChangeCreatedTime = new Date();
}

@PreUpdate
private void preUpdate() {
protected void preUpdate() {
this.dataChangeLastModifiedTime = new Date();
}

@PreRemove
private void preRemove() {
protected void preRemove() {
this.dataChangeLastModifiedTime = new Date();
}

public String toString() {
return ToStringHelper.toString(this);
}
}
@@ -0,0 +1,19 @@
package com.ctrip.apollo.biz.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;

import com.ctrip.apollo.biz.entity.Audit;

public interface AuditRepository extends PagingAndSortingRepository<Audit, Long> {

@Query("SELECT a from Audit a WHERE a.dataChangeCreatedBy = :owner")
List<Audit> findByOwner(@Param("owner") String owner);

@Query("SELECT a from Audit a WHERE a.dataChangeCreatedBy = :owner AND a.entityName =:entity AND a.opName = :op")
List<Audit> findAudits(@Param("owner") String owner, @Param("entity") String entity,
@Param("op") String op);
}
Expand Up @@ -6,6 +6,7 @@

import com.ctrip.apollo.biz.entity.App;
import com.ctrip.apollo.biz.entity.AppNamespace;
import com.ctrip.apollo.biz.entity.Audit;
import com.ctrip.apollo.biz.entity.Cluster;
import com.ctrip.apollo.biz.entity.Namespace;
import com.ctrip.apollo.biz.repository.AppNamespaceRepository;
Expand All @@ -14,9 +15,6 @@
import com.ctrip.apollo.biz.repository.NamespaceRepository;
import com.ctrip.apollo.core.ConfigConsts;

import java.util.Date;


@Service
public class AdminService {

Expand All @@ -32,10 +30,16 @@ public class AdminService {
@Autowired
private ClusterRepository clusterRepository;

@Autowired
private AuditService auditService;

@Transactional
public App createNewApp(App app) {
String createBy = app.getDataChangeCreatedBy();
App createdApp = appRepository.save(app);

auditService.audit(App.class.getSimpleName(), createdApp.getId(), Audit.OP.INSERT, createBy);

String appId = createdApp.getAppId();

createDefaultAppNamespace(appId, createBy);
Expand All @@ -47,36 +51,39 @@ public App createNewApp(App app) {
return app;
}

private void createDefaultAppNamespace(String appId, String createBy){
private void createDefaultAppNamespace(String appId, String createBy) {
AppNamespace appNs = new AppNamespace();
appNs.setAppId(appId);
appNs.setName(ConfigConsts.NAMESPACE_APPLICATION);
appNs.setComment("default app namespace");
appNs.setDataChangeCreatedBy(createBy);
appNs.setDataChangeCreatedTime(new Date());
appNs.setDataChangeLastModifiedBy(createBy);
appNamespaceRepository.save(appNs);

auditService.audit(AppNamespace.class.getSimpleName(), appNs.getId(), Audit.OP.INSERT,
createBy);
}

private void createDefaultCluster(String appId, String createBy){
private void createDefaultCluster(String appId, String createBy) {
Cluster cluster = new Cluster();
cluster.setName(ConfigConsts.CLUSTER_NAME_DEFAULT);
cluster.setAppId(appId);
cluster.setDataChangeCreatedBy(createBy);
cluster.setDataChangeCreatedTime(new Date());
cluster.setDataChangeLastModifiedBy(createBy);
clusterRepository.save(cluster);

auditService.audit(Cluster.class.getSimpleName(), cluster.getId(), Audit.OP.INSERT, createBy);
}

private void createDefaultNamespace(String appId, String createBy){
private void createDefaultNamespace(String appId, String createBy) {
Namespace ns = new Namespace();
ns.setAppId(appId);
ns.setClusterName(ConfigConsts.CLUSTER_NAME_DEFAULT);
ns.setNamespaceName(ConfigConsts.NAMESPACE_APPLICATION);
ns.setDataChangeCreatedBy(createBy);
ns.setDataChangeCreatedTime(new Date());
ns.setDataChangeLastModifiedBy(createBy);
namespaceRepository.save(ns);

auditService.audit(Namespace.class.getSimpleName(), ns.getId(), Audit.OP.INSERT, createBy);
}
}
Expand Up @@ -9,6 +9,7 @@
import org.springframework.transaction.annotation.Transactional;

import com.ctrip.apollo.biz.entity.App;
import com.ctrip.apollo.biz.entity.Audit;
import com.ctrip.apollo.biz.repository.AppRepository;
import com.ctrip.apollo.common.utils.BeanUtils;

Expand All @@ -18,9 +19,14 @@ public class AppService {
@Autowired
private AppRepository appRepository;

@Autowired
private AuditService auditService;

@Transactional
public void delete(long id) {
public void delete(long id, String owner) {
appRepository.delete(id);

auditService.audit(App.class.getSimpleName(), id, Audit.OP.DELETE, owner);
}

public List<App> findAll(Pageable pageable) {
Expand All @@ -38,13 +44,23 @@ public App findOne(String appId) {

@Transactional
public App save(App entity) {
return appRepository.save(entity);
App app = appRepository.save(entity);

auditService.audit(App.class.getSimpleName(), app.getId(), Audit.OP.INSERT,
app.getDataChangeCreatedBy());

return app;
}

@Transactional
public App update(App app) {
App managedApp = appRepository.findByAppId(app.getAppId());
BeanUtils.copyEntityProperties(app, managedApp);
return appRepository.save(managedApp);
managedApp = appRepository.save(managedApp);

auditService.audit(App.class.getSimpleName(), managedApp.getId(), Audit.OP.UPDATE,
managedApp.getDataChangeLastModifiedBy());

return managedApp;
}
}
@@ -0,0 +1,40 @@
package com.ctrip.apollo.biz.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ctrip.apollo.biz.entity.Audit;
import com.ctrip.apollo.biz.repository.AuditRepository;

@Service
public class AuditService {

@Autowired
private AuditRepository auditRepository;

List<Audit> findByOwner(String owner) {
return auditRepository.findByOwner(owner);
}

List<Audit> find(String owner, String entity, String op) {
return auditRepository.findAudits(owner, entity, op);
}

@Transactional
void audit(String entityName, Long entityId, Audit.OP op, String owner) {
Audit audit = new Audit();
audit.setEntityName(entityName);
audit.setEntityId(entityId);
audit.setOpName(op.name());
audit.setDataChangeCreatedBy(owner);
auditRepository.save(audit);
}

@Transactional
void audit(Audit audit){
auditRepository.save(audit);
}
}

0 comments on commit ef28093

Please sign in to comment.