/* * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.csp.sentinel.dashboard.domain.vo; import java.util.ArrayList; import java.util.Collection; import java.util.List; import com.alibaba.csp.sentinel.dashboard.datasource.entity.MetricEntity; /** * @author leyou */ public class MetricVo implements Comparable { private Long id; private String app; private Long timestamp; private Long gmtCreate = System.currentTimeMillis(); private String resource; private Long passQps; private Long blockQps; private Long successQps; private Long exceptionQps; /** * average rt */ private Double rt; private Integer count; public MetricVo() { } public static List fromMetricEntities(Collection entities) { List list = new ArrayList<>(); if (entities != null) { for (MetricEntity entity : entities) { list.add(fromMetricEntity(entity)); } } return list; } /** * 保留资源名为identity的结果。 * * @param entities 通过hashCode查找到的MetricEntities * @param identity 真正需要查找的资源名 * @return */ public static List fromMetricEntities(Collection entities, String identity) { List list = new ArrayList<>(); if (entities != null) { for (MetricEntity entity : entities) { if (entity.getResource().equals(identity)) { list.add(fromMetricEntity(entity)); } } } return list; } public static MetricVo fromMetricEntity(MetricEntity entity) { MetricVo vo = new MetricVo(); vo.id = entity.getId(); vo.app = entity.getApp(); vo.timestamp = entity.getTimestamp().getTime(); vo.gmtCreate = entity.getGmtCreate().getTime(); vo.resource = entity.getResource(); vo.passQps = entity.getPassQps(); vo.blockQps = entity.getBlockQps(); vo.successQps = entity.getSuccessQps(); vo.exceptionQps = entity.getExceptionQps(); if (entity.getSuccessQps() != 0) { vo.rt = entity.getRt() / entity.getSuccessQps(); } else { vo.rt = 0D; } vo.count = entity.getCount(); return vo; } public static MetricVo parse(String line) { String[] strs = line.split("\\|"); long timestamp = Long.parseLong(strs[0]); String identity = strs[1]; long passQps = Long.parseLong(strs[2]); long blockQps = Long.parseLong(strs[3]); long exception = Long.parseLong(strs[4]); double rt = Double.parseDouble(strs[5]); long successQps = Long.parseLong(strs[6]); MetricVo vo = new MetricVo(); vo.timestamp = timestamp; vo.resource = identity; vo.passQps = passQps; vo.blockQps = blockQps; vo.successQps = successQps; vo.exceptionQps = exception; vo.rt = rt; vo.count = 1; return vo; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getApp() { return app; } public void setApp(String app) { this.app = app; } public Long getTimestamp() { return timestamp; } public void setTimestamp(Long timestamp) { this.timestamp = timestamp; } public Long getGmtCreate() { return gmtCreate; } public void setGmtCreate(Long gmtCreate) { this.gmtCreate = gmtCreate; } public String getResource() { return resource; } public void setResource(String resource) { this.resource = resource; } public Long getPassQps() { return passQps; } public void setPassQps(Long passQps) { this.passQps = passQps; } public Long getBlockQps() { return blockQps; } public void setBlockQps(Long blockQps) { this.blockQps = blockQps; } public Long getSuccessQps() { return successQps; } public void setSuccessQps(Long successQps) { this.successQps = successQps; } public Long getExceptionQps() { return exceptionQps; } public void setExceptionQps(Long exceptionQps) { this.exceptionQps = exceptionQps; } public Double getRt() { return rt; } public void setRt(Double rt) { this.rt = rt; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } @Override public int compareTo(MetricVo o) { return Long.compare(this.timestamp, o.timestamp); } }