private void insertOrAppend() { Date now = DateUtil.now(); DubboMethodDayIP day = new DubboMethodDayIP( "LZY5", "com.lvmama.test.soa.monitor.DubboMethodDayIPServiceTest", "testInsertOrAppend", "111.333.555.777", "222.444.666.888", DateUtil.trimToDay(now)); day.setSuccessTimes(10L); day.setFailTimes(1L); day.setElapsedAvg(BigDecimal.valueOf(2L)); day.setElapsedMax(5L); day.setSuccessTimesDetail( DateUtil.HHmm(now) + " " + day.getSuccessTimes() + StringUtil.getLineSeparator()); day.setFailTimesDetail( DateUtil.HHmm(now) + " " + day.getFailTimes() + StringUtil.getLineSeparator()); day.setElapsedTotalDetail( DateUtil.HHmm(now) + " " + day.getElapsedAvg().multiply(BigDecimal.valueOf(day.getSuccessTimes())) + StringUtil.getLineSeparator()); day.setElapsedMaxDetail( DateUtil.HHmm(now) + " " + day.getElapsedMax() + StringUtil.getLineSeparator()); for (int i = 1; i <= 10; i++) { dubboMethodDayIPService.insertOrAppend(day); dubboMethodDayIPDao.insert(day); } }
public void writeServiceDayIPCacheToDB() { long start = DateUtil.now().getTime(); log.info("writeServiceDayIPCacheToDB START"); Map<String, AtomicReference<DubboServiceDayIP>> copyMap = null; try { providerLock.writeLock().lock(); copyMap = new HashMap<String, AtomicReference<DubboServiceDayIP>>(PROVIDER_CACHE); PROVIDER_CACHE.clear(); } finally { providerLock.writeLock().unlock(); } ExecutorService exec = Executors.newFixedThreadPool(10); for (String key : copyMap.keySet()) { try { AtomicReference<DubboServiceDayIP> dayReference = copyMap.get(key); DubboServiceDayIP day = dayReference.get(); exec.submit(new writeToDBRunnable(dubboServiceDayIPService, day)); } catch (Exception e) { log.error("writeServiceDayIPCacheToDB error:" + copyMap.get(key).get(), e); } } exec.shutdown(); try { while (!exec.awaitTermination(300, TimeUnit.SECONDS)) { log.info( "writeServiceDayIPCacheToDB still running, costed:" + (DateUtil.now().getTime() - start) + "ms"); } } catch (Exception e) { log.error("error when waiting for threads end.", e); } log.info("writeServiceDayIPCacheToDB END, cost:" + (DateUtil.now().getTime() - start) + "ms"); }
public static void updateProviderCache(DubboMethodMinuteIP minute) { String appName = minute.getAppName(); String service = minute.getService(); String consumerIP = minute.getConsumerIP(); String providerIP = minute.getProviderIP(); Date time = DateUtil.trimToDay(minute.getTime()); String key = "ServiceDayIPCache.updateProviderCache_" + appName + "_" + service + "_" + consumerIP + "_" + providerIP + "_" + DateUtil.format(time); AtomicReference<DubboServiceDayIP> dayReference = null; try { providerLock.readLock().lock(); dayReference = PROVIDER_CACHE.get(key); } finally { providerLock.readLock().unlock(); } if (dayReference == null) { dayReference = new AtomicReference<DubboServiceDayIP>(); DubboServiceDayIP day = new DubboServiceDayIP(appName, service, consumerIP, providerIP, time); day.setElapsedAvg(BigDecimal.ZERO); day.setFailTimes(0L); day.setSuccessTimes(0L); day.setElapsedMax(0L); dayReference.set(day); try { providerLock.writeLock().lock(); if (PROVIDER_CACHE.get(key) == null) { PROVIDER_CACHE.put(key, dayReference); } else { dayReference = PROVIDER_CACHE.get(key); } } finally { providerLock.writeLock().unlock(); } } while (true) { DubboServiceDayIP dayOld = dayReference.get(); DubboServiceDayIP dayUpdated = new DubboServiceDayIP(appName, service, consumerIP, providerIP, time); if (minute.getSuccessTimes() != null && minute.getSuccessTimes() != 0) { dayUpdated.setElapsedAvg( (dayOld .getElapsedAvg() .multiply(new BigDecimal(dayOld.getSuccessTimes())) .add(minute.getElapsedTotal())) .divide( new BigDecimal(dayOld.getSuccessTimes() + minute.getSuccessTimes()), 4, BigDecimal.ROUND_HALF_UP)); dayUpdated.setSuccessTimes(dayOld.getSuccessTimes() + minute.getSuccessTimes()); } else { dayUpdated.setElapsedAvg(dayOld.getElapsedAvg()); } if (minute.getSuccessTimes() != null) { dayUpdated.setSuccessTimes(dayOld.getSuccessTimes() + minute.getSuccessTimes()); } else { dayUpdated.setSuccessTimes(dayOld.getSuccessTimes()); } if (minute.getFailTimes() != null) { dayUpdated.setFailTimes(dayOld.getFailTimes() + minute.getFailTimes()); } else { dayUpdated.setFailTimes(dayOld.getFailTimes()); } if (minute.getElapsedMax() != null) { dayUpdated.setElapsedMax(Math.max(dayOld.getElapsedMax(), minute.getElapsedMax())); } else { dayUpdated.setElapsedMax(dayOld.getElapsedMax()); } dayUpdated.setElapsedMaxDetail( DubboDetailUtil.mergeDetailToStr( dayOld.getElapsedMaxDetail(), DateUtil.HHmm(minute.getTime()) + " " + minute.getElapsedMax(), true)); dayUpdated.setElapsedTotalDetail( DubboDetailUtil.mergeDetailToStr( dayOld.getElapsedTotalDetail(), DateUtil.HHmm(minute.getTime()) + " " + minute.getElapsedTotal(), false)); dayUpdated.setSuccessTimesDetail( DubboDetailUtil.mergeDetailToStr( dayOld.getSuccessTimesDetail(), DateUtil.HHmm(minute.getTime()) + " " + minute.getSuccessTimes(), false)); dayUpdated.setFailTimesDetail( DubboDetailUtil.mergeDetailToStr( dayOld.getFailTimesDetail(), DateUtil.HHmm(minute.getTime()) + " " + minute.getFailTimes(), false)); if (dayReference.compareAndSet(dayOld, dayUpdated)) { break; } } }