@RequestHandler(RequestCmd.OBJECT_RESET_CACHE) public Pack getAgentCacheReseto(Pack param) { DataProxy.reset(); return param; }
public static void endPut(Map map) { int size = map.size(); if(size > 0 && size % conf._hook_map_impl_warning_size == 0) { TraceContext ctx = TraceContextManager.getContext(); if(ctx == null) return; if(ctx.error != 0) return; MapValue mv = new MapValue(); mv.put(AlertPack.HASH_FLAG + TextTypes.SERVICE + "_service-name", ctx.serviceHash); String message = "Too many Map entries!\n" + ThreadUtil.getStackTrace(Thread.currentThread().getStackTrace(), 2); HashedMessageStep step = new HashedMessageStep(); step.hash = DataProxy.sendHashedMessage(message); step.value = size; step.start_time = (int) (System.currentTimeMillis() - ctx.startTime); ctx.profile.add(step); mv.put(AlertPack.HASH_FLAG + TextTypes.HASH_MSG + "_full-stack", step.hash); DataProxy.sendAlert(AlertLevel.WARN, "TOO_MANY_MAP_ENTRIES", "too many Map entries, over #" + size, mv); int errorMessageHash = DataProxy.sendError("too many Map entries, over #" + size); if (ctx.error == 0) { ctx.error = errorMessageHash; } ctx.offerErrorEntity(ErrorEntity.of(tooManyCollectionMemebers, errorMessageHash, 0, 0)); } } }
private void gatherAndSendCounter(long now) { CounterBasket basket = new CounterBasket(); for (int i = 0; i < countStatList.size(); i++) { CountStat stat = countStatList.get(i); try { if (stat.counter.interval() <= now - stat.xtime) { stat.xtime = now; stat.counter.process(basket); } } catch (Throwable t) { t.printStackTrace(); } } PerfCounterPack[] packs = basket.getList(); DataProxy.sendCounter(packs); }
public static int sendSqlText(String sql) { int hash = getSqlHash(sql); if (sqlText.contains(hash)) { return hash; } sqlText.put(hash); // udp.add(new TextPack(TextTypes.SQL, hash, sql)); sendDirect(new TextPack(TextTypes.SQL, hash, sql)); return hash; } private static IntLinkedSet serviceName = new IntLinkedSet().setMax(10000);
public static XLogPack txperf(long endtime, long txid, int service_hash, String serviceName, int elapsed, int cpu, int sqlCount, int sqlTime, String remoteAddr, String error, long visitor) { XLogPack pack = new XLogPack(); pack.cpu = cpu; pack.endTime = endtime; pack.elapsed = elapsed; DataProxy.sendServiceName(service_hash, serviceName); pack.service = service_hash; pack.kbytes = 0; pack.status = 0; pack.sqlCount = sqlCount; pack.sqlTime = sqlTime; pack.txid = txid; pack.ipaddr = IPUtil.toBytes(remoteAddr); pack.userid = visitor; if (error != null) { pack.error = DataProxy.sendError(error); } MeterService.getInstance().add(pack.elapsed, pack.sqlTime, pack.apicallTime, pack.queuingTime, error != null); DataProxy.sendXLog(pack); MeterUsers.add(pack.userid); return pack; }
private static void fetch(TraceContext c) { HashedMessageStep p = new HashedMessageStep(); long time = System.currentTimeMillis() - c.rs_start; p.start_time = (int) (System.currentTimeMillis() - c.startTime); if (c.profile_thread_cputime) { p.start_cpu = (int) (SysJMX.getCurrentThreadCPU() - c.startCpu); } if (RESULT_SET_FETCH == 0) { RESULT_SET_FETCH = DataProxy.sendHashedMessage("RESULT-SET-FETCH"); } p.hash = RESULT_SET_FETCH; p.value = c.rs_count; p.time = (int) time; c.profile.add(p); if (c.rs_count > conf.xlog_error_jdbc_fetch_max) { String msg = "warning too many resultset, over #" + conf.xlog_error_jdbc_fetch_max; int hash = DataProxy.sendError(msg); if (c.error == 0) { c.error = hash; } c.offerErrorEntity(ErrorEntity.of(tooManyRecordException, hash, 0,0)); } }
message = "ResultSet Leak suspected!\n" + message; HashedMessageStep step = new HashedMessageStep(); step.hash = DataProxy.sendHashedMessage(message); step.start_time = (int) (System.currentTimeMillis() - ctx.startTime); ctx.profile.add(step); DataProxy.sendAlert(AlertLevel.WARN, "RESULTSET_LEAK_SUSPECT", "ResultSet Leak suspected!", mv); message = "Statement Leak suspected!\n" + message; HashedMessageStep step = new HashedMessageStep(); step.hash = DataProxy.sendHashedMessage(message); step.start_time = (int) (System.currentTimeMillis() - ctx.startTime); ctx.profile.add(step); DataProxy.sendAlert(AlertLevel.WARN, "STATEMENT_LEAK_SUSPECT", "Statement Leak suspected!", mv); ctx.serviceHash = DataProxy.sendServiceName(ctx.serviceName); pack.service = ctx.serviceHash; pack.threadNameHash = DataProxy.sendHashedMessage(ctx.threadName); Logger.println("A145", ctx.serviceName); String emsg = conf.control_reject_text; pack.error = DataProxy.sendError(emsg); ServiceSummary.getInstance().process(thr, pack.error, ctx.serviceHash, ctx.txid, 0, 0); } else { pack.error = DataProxy.sendError(emsg); ServiceSummary.getInstance().process(thr, pack.error, ctx.serviceHash, ctx.txid, 0, 0);
pack.profileCount = ctx.profileCount; DataProxy.sendServiceName(ctx.serviceHash, ctx.serviceName); pack.service = ctx.serviceHash; pack.threadNameHash = DataProxy.sendHashedMessage(ctx.threadName); pack.xType = ctx.xType; pack.cpu = (int) (SysJMX.getCurrentThreadCPU() - ctx.startCpu); pack.group = DataProxy.sendGroup(ctx.group); pack.apicallTime = ctx.apicall_time; if (ctx.login != null) { pack.login = DataProxy.sendLogin(ctx.login); pack.desc = DataProxy.sendDesc(ctx.desc); DataProxy.sendXLog(pack);
public static void send(SummaryPack p) { p.objHash = conf.getObjHash(); p.objType = conf.obj_type; sendDirect(p); } static DataUdpAgent udpNet = DataUdpAgent.getInstance();
private void alert(LeakInfo leakInfo) { ServiceSummary summary = ServiceSummary.getInstance(); MapValue mv = new MapValue(); mv.put(AlertPack.HASH_FLAG + TextTypes.SERVICE + "_service-name", leakInfo.serviceHash); if (leakInfo.fullstack) { ErrorData d = summary.process(leakInfo.error, 0, leakInfo.serviceHash, leakInfo.txid, 0, 0); Logger.println("A156", leakInfo.error + " " + leakInfo.inner); if (d != null && d.fullstack == 0) { String fullstack = ThreadUtil.getStackTrace(leakInfo.error.getStackTrace(), leakInfo.fullstackSkip); d.fullstack = DataProxy.sendError(fullstack); Logger.println("A157", fullstack); } mv.put(AlertPack.HASH_FLAG + TextTypes.ERROR + "_full-stack", d.fullstack); } else { summary.process(leakInfo.error, 0, leakInfo.serviceHash, leakInfo.txid, 0, 0); Logger.println("A179", leakInfo.error + " " + leakInfo.inner); } DataProxy.sendAlert(AlertLevel.WARN, "CONNECTION_NOT_CLOSE", "Connection may not closed", mv); }
step.address = tctx.apicall_target; step.hash = DataProxy.sendApicall(tctx.apicall_name); tctx.apicall_name = null; tctx.apicall_target = null; step.error = DataProxy.sendError(msg); if (tctx.error == 0 && conf.xlog_error_on_apicall_exception_enabled) { tctx.error = step.error; step.address = "unknown"; toHash = DataProxy.sendObjName(step.address); MeterInteraction meterInteraction = MeterInteractionManager.getInstance() .getNormalOutgoingMeter(conf.getObjHash(), toHash);
public static void asyncPossibleInstanceInitInvoked(Object keyObject) { try { TraceContext ctx = TraceContextManager.getContext(); if (ctx == null) return; if (TransferMap.get(System.identityHashCode(keyObject)) != null) { return; } long gxid = ctx.gxid == 0 ? ctx.txid : ctx.gxid; ctx.gxid = gxid; long callee = KeyGen.next(); ThreadCallPossibleStep threadCallPossibleStep = new ThreadCallPossibleStep(); threadCallPossibleStep.txid = callee; threadCallPossibleStep.start_time = (int) (System.currentTimeMillis() - ctx.startTime); String initObjName = keyObject.toString().replace("$ByteBuddy", "").replace("$$Lambda", "$$L"); initObjName = AgentCommonConstant.normalizeHashCode(initObjName); threadCallPossibleStep.hash = DataProxy.sendApicall(initObjName); ctx.profile.add(threadCallPossibleStep); TransferMap.put(System.identityHashCode(keyObject), gxid, ctx.txid, callee, ctx.xType, Thread.currentThread().getId(), threadCallPossibleStep); } catch (Throwable t) { Logger.println("B1204", "Exception: asyncPossibleInstanceInitInvoked", t); } }
public static void sendAlert(byte level, String title, String emsg, MapValue tags) { long now = System.currentTimeMillis(); if (title == null) title = "none"; Long last = sendTimeTable.get(title); if (last == null || now - last.longValue() >= conf.alert_send_interval_ms) { sendTimeTable.put(title, now); DataProxy.sendAlert(level, title, StringUtil.limiting(emsg, conf.alert_message_length), tags); } } }
@Counter public void alive(CounterBasket pw) { DataProxy.sendHeartBeat(getMainObject()); Enumeration<ObjectPack> en = objects.values(); while (en.hasMoreElements()) { DataProxy.sendHeartBeat(en.nextElement()); } }
public void error(String err) { if (ctx.error == 0) { ctx.error = DataProxy.sendError(err); } }
@Counter(interval = 500) public void enduser(CounterBasket pw) { long time = System.currentTimeMillis(); long now = DateUtil.getMinUnit(time) / 5; if (now == last_sent) return; last_sent = now; time = (time - 10000) / DateUtil.MILLIS_PER_FIVE_MINUTE * DateUtil.MILLIS_PER_FIVE_MINUTE; SummaryPack p = EndUserSummary.getInstance().getAndClearNavTable(); if (p != null) { p.time = time; DataProxy.send(p); } p = EndUserSummary.getInstance().getAndClearAjaxTable(); if (p != null) { p.time = time; DataProxy.send(p); } p = EndUserSummary.getInstance().getAndClearErrorTable(); if (p != null) { p.time = time; DataProxy.send(p); } } }
message = "ResultSet Leak suspected!\n" + message; HashedMessageStep step = new HashedMessageStep(); step.hash = DataProxy.sendHashedMessage(message); step.start_time = (int) (System.currentTimeMillis() - ctx.startTime); ctx.profile.add(step); DataProxy.sendAlert(AlertLevel.WARN, "RESULTSET_LEAK_SUSPECT", "ResultSet Leak suspected!", mv); message = "Statement Leak suspected!\n" + message; HashedMessageStep step = new HashedMessageStep(); step.hash = DataProxy.sendHashedMessage(message); step.start_time = (int) (System.currentTimeMillis() - ctx.startTime); ctx.profile.add(step); DataProxy.sendAlert(AlertLevel.WARN, "STATEMENT_LEAK_SUSPECT", "Statement Leak suspected!", mv); ctx.serviceHash = DataProxy.sendServiceName(ctx.serviceName); pack.service = ctx.serviceHash; pack.threadNameHash = DataProxy.sendHashedMessage(ctx.threadName); Logger.println("A145", ctx.serviceName); String emsg = conf.control_reject_text; pack.error = DataProxy.sendError(emsg); ServiceSummary.getInstance().process(thr, pack.error, ctx.serviceHash, ctx.txid, 0, 0); } else { pack.error = DataProxy.sendError(emsg); ServiceSummary.getInstance().process(thr, pack.error, ctx.serviceHash, ctx.txid, 0, 0);
pack.profileCount = ctx.profileCount; DataProxy.sendServiceName(ctx.serviceHash, ctx.serviceName); pack.service = ctx.serviceHash; pack.threadNameHash = DataProxy.sendHashedMessage(ctx.threadName); pack.xType = ctx.xType; pack.cpu = (int) (SysJMX.getCurrentThreadCPU() - ctx.startCpu); pack.group = DataProxy.sendGroup(ctx.group); pack.apicallTime = ctx.apicall_time; if (ctx.login != null) { pack.login = DataProxy.sendLogin(ctx.login); pack.desc = DataProxy.sendDesc(ctx.desc); DataProxy.sendXLog(pack);
public static void send(SummaryPack p) { p.objHash = conf.getObjHash(); p.objType = conf.obj_type; sendDirect(p); } static DataUdpAgent udpNet = DataUdpAgent.getInstance();
private void alert(LeakInfo leakInfo) { ServiceSummary summary = ServiceSummary.getInstance(); MapValue mv = new MapValue(); mv.put(AlertPack.HASH_FLAG + TextTypes.SERVICE + "_service-name", leakInfo.serviceHash); if (leakInfo.fullstack) { ErrorData d = summary.process(leakInfo.error, 0, leakInfo.serviceHash, leakInfo.txid, 0, 0); Logger.println("A156", leakInfo.error + " " + leakInfo.inner); if (d != null && d.fullstack == 0) { String fullstack = ThreadUtil.getStackTrace(leakInfo.error.getStackTrace(), leakInfo.fullstackSkip); d.fullstack = DataProxy.sendError(fullstack); Logger.println("A157", fullstack); } mv.put(AlertPack.HASH_FLAG + TextTypes.ERROR + "_full-stack", d.fullstack); } else { summary.process(leakInfo.error, 0, leakInfo.serviceHash, leakInfo.txid, 0, 0); Logger.println("A179", leakInfo.error + " " + leakInfo.inner); } DataProxy.sendAlert(AlertLevel.WARN, "CONNECTION_NOT_CLOSE", "Connection may not closed", mv); }