| | |
| | | package com.ruoyi.storage.minio.service.impl; |
| | | |
| | | import java.io.File; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLDecoder; |
| | | import java.net.URLEncoder; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | | import com.ruoyi.storage.minio.domain.jsonbean.*; |
| | | import com.ruoyi.utils.process.CmdUtils; |
| | | import com.sun.jna.Platform; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.stereotype.Service; |
| | | import com.ruoyi.storage.minio.mapper.StorageMinioEventMapper; |
| | | import com.ruoyi.storage.minio.domain.StorageMinioEvent; |
| | | import com.ruoyi.storage.minio.service.IStorageMinioEventService; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import javax.annotation.PreDestroy; |
| | | import javax.annotation.Resource; |
| | | |
| | | /** |
| | |
| | | @Service |
| | | @Slf4j(topic = "minio") |
| | | public class StorageMinioEventServiceImpl implements IStorageMinioEventService { |
| | | |
| | | @Resource |
| | | private StorageMinioEventMapper storageMinioEventMapper; |
| | | @Value("${minio.accessKey}") |
| | | String accessKey; |
| | | @Value("${minio.secretKey}") |
| | | String secretKey; |
| | | @Value("${minio.path}") |
| | | String path; |
| | | @Value("${minio.enabled}") |
| | | Boolean enabled; |
| | | String processName = "minio.exe"; |
| | | @PostConstruct |
| | | public void initMinio() { |
| | | if (enabled) { |
| | | log.debug("初始化启动minio"); |
| | | |
| | | if (Platform.isWindows()) { |
| | | String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "minio" + File.separator + processName; |
| | | Map<String, String> env=new HashMap<>(); |
| | | env.put("MINIO_ROOT_USER",accessKey); |
| | | env.put("MINIO_ROOT_PASSWORD",secretKey); |
| | | List<String> cmd = new ArrayList<>(); |
| | | cmd.add(exePath); |
| | | cmd.add("server"); |
| | | cmd.add(path); |
| | | cmd.add("--console-address=0.0.0.0:9000"); |
| | | cmd.add("--address=0.0.0.0:9001"); |
| | | if (CmdUtils.isProcessRunning(processName)) { |
| | | // 进程已经在运行,结束该进程 |
| | | CmdUtils.stopProcess(processName); |
| | | } |
| | | // 启动后台进程 |
| | | CmdUtils.commandStart(processName, cmd, env); |
| | | // 启动cmd窗口 |
| | | //String[] command = {"cmd", "/c", "start", exePath}; |
| | | //CmdUtils.commandStart(command); |
| | | } |
| | | } |
| | | } |
| | | @PreDestroy |
| | | public void destroyMinio() { |
| | | if (enabled) { |
| | | log.info("销毁minio"); |
| | | if (CmdUtils.isProcessRunning(processName)) { |
| | | // 进程已经在运行,结束该进程 |
| | | CmdUtils.stopProcess(processName); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 查询存储事件 |
| | |
| | | @Async |
| | | @Override |
| | | public void parseStorageMinioEvent(String message) { |
| | | JsonsRootBean jsonsRootBean = JSONObject.parseObject(message, JsonsRootBean.class); |
| | | if (jsonsRootBean != null) { |
| | | Records records = jsonsRootBean.getRecords().get(0); |
| | | StorageMinioEvent storageMinioEvent = new StorageMinioEvent(); |
| | | storageMinioEvent.setEventTime(records.getEventTime()); |
| | | storageMinioEvent.setEventType(records.getEventName()); |
| | | storageMinioEvent.setBucketName(records.getS3().getBucket().getName()); |
| | | String encode = null; |
| | | try { |
| | | encode = URLDecoder.decode(records.getS3().getMObject().getKey(), "UTF-8"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | storageMinioEvent.setObjectName(encode); |
| | | storageMinioEvent.setObjectSize(records.getS3().getMObject().getSize()); |
| | | storageMinioEvent.setObjectType(records.getS3().getMObject().getContentType()); |
| | | storageMinioEvent.setHost(records.getSource().getHost()); |
| | | storageMinioEvent.setEndpoint(records.getResponseElements().getXMinioOriginEndpoint()); |
| | | storageMinioEvent.setUserName(records.getRequestParameters().getPrincipalid()); |
| | | try { |
| | | JsonsRootBean jsonsRootBean = JSONObject.parseObject(message, JsonsRootBean.class); |
| | | if (jsonsRootBean != null) { |
| | | Records records = jsonsRootBean.getRecords().get(0); |
| | | StorageMinioEvent storageMinioEvent = new StorageMinioEvent(); |
| | | storageMinioEvent.setEventTime(records.getEventTime()); |
| | | String eventType = records.getEventName().substring(0, records.getEventName().indexOf(":", records.getEventName().indexOf(":") + 1));//不包含本身位置 |
| | | storageMinioEvent.setEventType(eventType); |
| | | storageMinioEvent.setBucketName(records.getS3().getBucket().getName()); |
| | | String encode = null; |
| | | try { |
| | | encode = URLDecoder.decode(records.getS3().getMObject().getKey(), "UTF-8"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | storageMinioEvent.setObjectName(encode); |
| | | storageMinioEvent.setObjectSize(records.getS3().getMObject().getSize()); |
| | | storageMinioEvent.setObjectType(records.getS3().getMObject().getContentType()); |
| | | storageMinioEvent.setHost(records.getSource().getHost()); |
| | | storageMinioEvent.setEndpoint(records.getResponseElements().getXMinioOriginEndpoint()); |
| | | storageMinioEvent.setUserName(records.getRequestParameters().getPrincipalid()); |
| | | |
| | | int i = insertStorageMinioEvent(storageMinioEvent); |
| | | if(i>0) |
| | | { |
| | | log.debug("minio操作日志入库成功!【"+storageMinioEvent.getEventType()+"】"); |
| | | int i = insertStorageMinioEvent(storageMinioEvent); |
| | | if (i > 0) { |
| | | log.debug("minio操作日志入库成功!【" + storageMinioEvent.getEventType() + "】"); |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("minio事件格式化异常:" + ex.getMessage()); |
| | | } |
| | | } |
| | | } |