mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-16 16:28:48 +10:00
[#234] Add function to see log of application using pinpoint agent
This commit is contained in:
@@ -19,5 +19,6 @@ package com.navercorp.pinpoint.profiler.modifier.log;
|
||||
* @author minwoo.jung
|
||||
*/
|
||||
public class MdcKey {
|
||||
public static final String TRANSACTION_ID = "TransactionID";
|
||||
public static final String TRANSACTION_ID = "PtransactionId";
|
||||
public static final String SPAN_ID = "PspanId";
|
||||
}
|
||||
|
||||
+2
@@ -46,9 +46,11 @@ public class LoggingEventOfLog4jInterceptor implements SimpleAroundInterceptor,
|
||||
|
||||
if (trace == null) {
|
||||
MDC.remove(MdcKey.TRANSACTION_ID);
|
||||
MDC.remove(MdcKey.SPAN_ID);
|
||||
return;
|
||||
} else {
|
||||
MDC.put(MdcKey.TRANSACTION_ID, trace.getTraceId().getTransactionId());
|
||||
MDC.put(MdcKey.SPAN_ID, String.valueOf(trace.getTraceId().getSpanId()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -46,9 +46,11 @@ public class LoggingEventOfLogbackInterceptor implements SimpleAroundInterceptor
|
||||
|
||||
if (trace == null) {
|
||||
MDC.remove(MdcKey.TRANSACTION_ID);
|
||||
MDC.remove(MdcKey.SPAN_ID);
|
||||
return;
|
||||
} else {
|
||||
MDC.put(MdcKey.TRANSACTION_ID, trace.getTraceId().getTransactionId());
|
||||
MDC.put(MdcKey.SPAN_ID, String.valueOf(trace.getTraceId().getSpanId()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+19
-11
@@ -18,10 +18,24 @@ package com.navercorp.pinpoint.web.controller;
|
||||
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import com.navercorp.pinpoint.web.applicationmap.ApplicationMap;
|
||||
import com.navercorp.pinpoint.web.calltree.span.SpanAlign;
|
||||
import com.navercorp.pinpoint.web.filter.Filter;
|
||||
@@ -36,19 +50,9 @@ import com.navercorp.pinpoint.web.vo.BusinessTransactions;
|
||||
import com.navercorp.pinpoint.web.vo.LimitedScanResult;
|
||||
import com.navercorp.pinpoint.web.vo.Range;
|
||||
import com.navercorp.pinpoint.web.vo.TransactionId;
|
||||
import com.navercorp.pinpoint.web.vo.callstacks.Record;
|
||||
import com.navercorp.pinpoint.web.vo.callstacks.RecordSet;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
/**
|
||||
* @author emeroad
|
||||
*/
|
||||
@@ -68,6 +72,9 @@ public class BusinessTransactionController {
|
||||
|
||||
@Autowired
|
||||
private FilterBuilder filterBuilder;
|
||||
|
||||
@Value("#{pinpointWebProps['log.enable'] ?: false}")
|
||||
private boolean logLinkEnable;
|
||||
|
||||
/**
|
||||
* executed URLs in applicationname query within from ~ to timeframe
|
||||
@@ -164,6 +171,7 @@ public class BusinessTransactionController {
|
||||
ApplicationMap map = filteredMapService.selectApplicationMap(traceId);
|
||||
mv.addObject("nodes", map.getNodes());
|
||||
mv.addObject("links", map.getLinks());
|
||||
mv.addObject("logLinkEnable", logLinkEnable);
|
||||
|
||||
// call stacks
|
||||
RecordSet recordSet = this.transactionInfoService.createRecordSet(spanAligns, focusTimestamp);
|
||||
|
||||
+17
-1
@@ -38,6 +38,7 @@ import com.navercorp.pinpoint.web.vo.scatter.ScatterIndex;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.util.StopWatch;
|
||||
@@ -64,6 +65,16 @@ public class ScatterChartController {
|
||||
|
||||
@Autowired
|
||||
private FilterBuilder filterBuilder;
|
||||
|
||||
|
||||
@Value("#{pinpointWebProps['log.enable'] ?: false}")
|
||||
private boolean logLinkEnable;
|
||||
|
||||
@Value("#{pinpointWebProps['log.button.name'] ?: ''}")
|
||||
private String logButtonName;
|
||||
|
||||
@Value("#{pinpointWebProps['log.page.url'] ?: ''}")
|
||||
private String logPageUrl;
|
||||
|
||||
private static final String PREFIX_TRANSACTION_ID = "I";
|
||||
private static final String PREFIX_TIME = "T";
|
||||
@@ -222,7 +233,12 @@ public class ScatterChartController {
|
||||
List<SpanBo> metadata = scatter.selectTransactionMetadata(query);
|
||||
model.addAttribute("metadata", metadata);
|
||||
}
|
||||
|
||||
|
||||
if (logLinkEnable) {
|
||||
model.addAttribute("logButtonName", logButtonName);
|
||||
model.addAttribute("logPageUrl", logPageUrl);
|
||||
}
|
||||
|
||||
return "transactionmetadata";
|
||||
}
|
||||
|
||||
|
||||
+95
-7
@@ -18,6 +18,8 @@ package com.navercorp.pinpoint.web.service;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import com.navercorp.pinpoint.common.AnnotationKey;
|
||||
@@ -68,6 +70,15 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
@Autowired
|
||||
private AnnotationKeyRegistryService annotationKeyRegistryService;
|
||||
|
||||
@Value("#{pinpointWebProps['log.enable'] ?: false}")
|
||||
private boolean logLinkEnable;
|
||||
|
||||
@Value("#{pinpointWebProps['log.button.name'] ?: ''}")
|
||||
private String logButtonName;
|
||||
|
||||
@Value("#{pinpointWebProps['log.page.url'] ?: ''}")
|
||||
private String logPageUrl;
|
||||
|
||||
@Override
|
||||
public BusinessTransactions selectBusinessTransactions(List<TransactionId> transactionIdList, String applicationName, Range range, Filter filter) {
|
||||
if (transactionIdList == null) {
|
||||
@@ -153,6 +164,11 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
}
|
||||
|
||||
recordSet.setRecordList(recordList);
|
||||
|
||||
if (logLinkEnable) {
|
||||
addlogLink(recordSet);
|
||||
}
|
||||
|
||||
return recordSet;
|
||||
}
|
||||
|
||||
@@ -165,6 +181,66 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
}
|
||||
}
|
||||
|
||||
private void addlogLink(RecordSet recordSet) {
|
||||
List<Record> records = recordSet.getRecordList();
|
||||
List<TransactionInfo> transactionInfoes = new LinkedList<TransactionInfo>();
|
||||
|
||||
for (Iterator<Record> iterator = records.iterator(); iterator.hasNext();) {
|
||||
Record record = (Record) iterator.next();
|
||||
|
||||
if(record.getTransactionId() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
TransactionInfo transactionInfo = new TransactionInfo(record.getTransactionId(), record.getSpanId());
|
||||
|
||||
if (transactionInfoes.contains(transactionInfo)) {
|
||||
continue;
|
||||
};
|
||||
|
||||
record.setLogPageUrl(logPageUrl);
|
||||
record.setLogButtonName(logButtonName);
|
||||
|
||||
transactionInfoes.add(transactionInfo);
|
||||
}
|
||||
}
|
||||
|
||||
private class TransactionInfo {
|
||||
|
||||
private final String transactionId;
|
||||
private final long spanId;
|
||||
|
||||
public TransactionInfo(String transactionId, long spanId) {
|
||||
this.transactionId = transactionId;
|
||||
this.spanId = spanId;
|
||||
}
|
||||
|
||||
public String getTransactionId() {
|
||||
return transactionId;
|
||||
}
|
||||
|
||||
public long getSpanId() {
|
||||
return spanId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof TransactionInfo == false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
TransactionInfo transactionInfo = (TransactionInfo)obj;
|
||||
|
||||
if (!transactionId.equals(transactionInfo.getTransactionId())) {
|
||||
return false;
|
||||
}
|
||||
if (spanId != transactionInfo.getSpanId()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private long getStartTime(List<SpanAlign> spanAlignList) {
|
||||
if (spanAlignList == null || spanAlignList.size() == 0) {
|
||||
@@ -314,7 +390,9 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
registry.findServiceType(spanBo.getServiceType()),
|
||||
null,
|
||||
spanAlign.isHasChild(),
|
||||
false);
|
||||
false,
|
||||
spanBo.getTransactionId(),
|
||||
spanBo.getSpanId());
|
||||
record.setSimpleClassName(apiDescription.getSimpleClassName());
|
||||
record.setFullApiDescription(method);
|
||||
recordList.add(record);
|
||||
@@ -334,7 +412,9 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
registry.findServiceType(spanBo.getServiceType()),
|
||||
null,
|
||||
spanAlign.isHasChild(),
|
||||
false);
|
||||
false,
|
||||
spanBo.getTransactionId(),
|
||||
spanBo.getSpanId());
|
||||
record.setSimpleClassName("");
|
||||
record.setFullApiDescription("");
|
||||
recordList.add(record);
|
||||
@@ -388,7 +468,9 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
/* spanEventBo.getDestinationId(), spanEventBo.getServiceTypeCode(),*/
|
||||
destinationId,
|
||||
spanAlign.isHasChild(),
|
||||
false);
|
||||
false,
|
||||
spanBo.getTransactionId(),
|
||||
spanBo.getSpanId());
|
||||
record.setSimpleClassName(apiDescription.getSimpleClassName());
|
||||
record.setFullApiDescription(method);
|
||||
|
||||
@@ -416,7 +498,9 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
/*spanEventBo.getDestinationId(), spanEventBo.getServiceTypeCode(),*/
|
||||
destinationId,
|
||||
spanAlign.isHasChild(),
|
||||
false);
|
||||
false,
|
||||
spanBo.getTransactionId(),
|
||||
spanBo.getSpanId());
|
||||
record.setSimpleClassName("");
|
||||
record.setFullApiDescription(method);
|
||||
|
||||
@@ -454,7 +538,9 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
false);
|
||||
false,
|
||||
spanBo.getTransactionId(),
|
||||
spanBo.getSpanId());
|
||||
}
|
||||
} else {
|
||||
final SpanEventBo spanEventBo = spanAlign.getSpanEventBo();
|
||||
@@ -474,7 +560,9 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
true);
|
||||
true,
|
||||
null,
|
||||
0);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -529,7 +617,7 @@ public class TransactionInfoServiceImpl implements TransactionInfoService {
|
||||
for (AnnotationBo ann : annotationBoList) {
|
||||
AnnotationKey annotation = findAnnotationKey(ann.getKey());
|
||||
if (annotation.isViewInRecordSet()) {
|
||||
Record record = new Record(depth, getNextId(), parentId, false, annotation.getName(), ann.getValue().toString(), 0L, 0L, 0, null, null, null, null, false, false);
|
||||
Record record = new Record(depth, getNextId(), parentId, false, annotation.getName(), ann.getValue().toString(), 0L, 0L, 0, null, null, null, null, false, false, null, 0);
|
||||
recordList.add(record);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,11 +44,18 @@ public class Record {
|
||||
private final String destinationId;
|
||||
private final boolean excludeFromTimeline;
|
||||
|
||||
private final String transactionId;
|
||||
private final long spanId;
|
||||
|
||||
private boolean focused;
|
||||
private boolean hasChild;
|
||||
private boolean hasException;
|
||||
private String logPageUrl;
|
||||
private String logButtonName;
|
||||
|
||||
|
||||
|
||||
public Record(int tab, int id, int parentId, boolean method, String title, String arguments, long begin, long elapsed, long gap, String agent, String applicationName, ServiceType serviceType, String destinationId, boolean hasChild, boolean hasException) {
|
||||
public Record(int tab, int id, int parentId, boolean method, String title, String arguments, long begin, long elapsed, long gap, String agent, String applicationName, ServiceType serviceType, String destinationId, boolean hasChild, boolean hasException, String transactionId, long spanId) {
|
||||
this.tab = tab;
|
||||
this.id = id;
|
||||
this.parentId = parentId;
|
||||
@@ -68,6 +75,9 @@ public class Record {
|
||||
this.excludeFromTimeline = serviceType == null || serviceType.isInternalMethod();
|
||||
this.hasChild = hasChild;
|
||||
this.hasException = hasException;
|
||||
|
||||
this.transactionId = transactionId;
|
||||
this.spanId = spanId;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
@@ -175,6 +185,30 @@ public class Record {
|
||||
public boolean getHasException() {
|
||||
return hasException;
|
||||
}
|
||||
|
||||
public String getTransactionId() {
|
||||
return transactionId;
|
||||
}
|
||||
|
||||
public long getSpanId() {
|
||||
return spanId;
|
||||
}
|
||||
|
||||
public void setLogPageUrl(String logPageUrl) {
|
||||
this.logPageUrl = logPageUrl;
|
||||
}
|
||||
|
||||
public void setLogButtonName(String logButtonName) {
|
||||
this.logButtonName = logButtonName;
|
||||
}
|
||||
|
||||
public String getLogPageUrl() {
|
||||
return this.logPageUrl;
|
||||
}
|
||||
|
||||
public String getLogButtonName() {
|
||||
return this.logButtonName;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
|
||||
@@ -6,4 +6,9 @@ cluster.zookeeper.sessiontimeout=3000
|
||||
cluster.zookeeper.retry.interval=5000
|
||||
|
||||
# FIXME - should be removed for proper authentication
|
||||
admin.password=admin
|
||||
admin.password=admin
|
||||
|
||||
#log site link
|
||||
#log.enable=false
|
||||
#log.page.url=
|
||||
#log.button.name=
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"callStackStart" : ${callstackStart},
|
||||
"callStackEnd" : ${callstackEnd},
|
||||
"completeState" : "${completeState}",
|
||||
"logLinkEnable" : ${logLinkEnable},
|
||||
"callStackIndex" : {
|
||||
"depth":0,
|
||||
"begin":1,
|
||||
@@ -31,7 +32,9 @@
|
||||
"apiType":17,
|
||||
"agent":18,
|
||||
"isFocused":19,
|
||||
"hasException":20
|
||||
"hasException":20,
|
||||
"logButtonName":21,
|
||||
"logPageUrl":22
|
||||
},
|
||||
"callStack" : [
|
||||
<c:forEach items="${callstack}" var="record" varStatus="status">[
|
||||
@@ -55,7 +58,19 @@ ${record.hasChild},
|
||||
"${record.apiType}",
|
||||
"${record.agent}",
|
||||
${record.focused},
|
||||
${record.hasException}
|
||||
${record.hasException},
|
||||
"${record.logButtonName}",
|
||||
<c:choose>
|
||||
<c:when test="${not empty record.logPageUrl}">
|
||||
<c:url value="${record.logPageUrl}" var="logPageUrl">
|
||||
<c:param name="transactionId" value="${record.transactionId}" />
|
||||
<c:param name="spanId" value="${record.spanId}" />
|
||||
<c:param name="time" value="${record.begin}" />
|
||||
</c:url>
|
||||
"${logPageUrl}"
|
||||
</c:when>
|
||||
<c:otherwise>""</c:otherwise>
|
||||
</c:choose>
|
||||
]<c:if test="${!status.last}">,</c:if></c:forEach>
|
||||
],
|
||||
"applicationMapData" : {
|
||||
|
||||
@@ -13,7 +13,14 @@
|
||||
"agentId" : "${span.agentId}",
|
||||
"endpoint" : "${span.endPoint}",
|
||||
"exception" : ${span.errCode},
|
||||
"remoteAddr" : "${span.remoteAddr}"
|
||||
"remoteAddr" : "${span.remoteAddr}"<c:if test="${not empty logPageUrl}">,
|
||||
"logButtonName" : "${logButtonName}",
|
||||
<c:url value="${logPageUrl}" var="url">
|
||||
<c:param name="transactionId" value="${span.transactionId}" />
|
||||
<c:param name="time" value="${span.startTime}" />
|
||||
</c:url>
|
||||
"logPageUrl" : "${url}"
|
||||
</c:if>
|
||||
}
|
||||
<c:if test="${!status.last}">,</c:if>
|
||||
</c:forEach>
|
||||
|
||||
@@ -12,7 +12,7 @@ pinpointApp.directive('distributedCallFlow', [ '$filter', '$timeout',
|
||||
link: function postLink(scope, element, attrs) {
|
||||
|
||||
// initialize variables
|
||||
var grid, columns, dataView, lastAgent;
|
||||
var grid, dataView, lastAgent;
|
||||
|
||||
// initialize variables of methods
|
||||
var initialize, treeFormatter, treeFilter, parseData, execTimeFormatter,
|
||||
@@ -125,12 +125,24 @@ pinpointApp.directive('distributedCallFlow', [ '$filter', '$timeout',
|
||||
};
|
||||
|
||||
|
||||
linkFormatter = function (row, cell, value, columnDef, dataConrtext) {
|
||||
linkFormatter = function (row, cell, value, columnDef, dataContext) {
|
||||
|
||||
if (!value || 0 === value.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
var html = [];
|
||||
html.push('<a class="btn btn-default btn-xs"');
|
||||
html.push('href="')
|
||||
html.push(value);
|
||||
html.push('" target="_blank">nelo</a>');
|
||||
html.push('" target="_blank">');
|
||||
|
||||
var item = dataView.getItemById(dataContext.id);
|
||||
var logButtonName = item.logButtonName;
|
||||
html.push(logButtonName);
|
||||
|
||||
html.push('</a>');
|
||||
|
||||
return html.join('');
|
||||
};
|
||||
|
||||
@@ -171,21 +183,6 @@ pinpointApp.directive('distributedCallFlow', [ '$filter', '$timeout',
|
||||
return "<span class='percent-complete-bar' style='background:" + color + ";width:" + value + "%'></span>";
|
||||
};
|
||||
|
||||
// columns
|
||||
columns = [
|
||||
{id: "method", name: "Method", field: "method", width: 400, formatter: treeFormatter},
|
||||
{id: "argument", name: "Argument", field: "argument", width: 300, formatter: argumentFormatter},
|
||||
{id: "exec-time", name: "Exec Time", field: "execTime", width: 90, formatter: execTimeFormatter},
|
||||
{id: "gap-ms", name: "Gap(ms)", field: "gapMs", width: 60, cssClass: "right-align"},
|
||||
{id: "time-ms", name: "Time(ms)", field: "timeMs", width: 60, cssClass: "right-align"},
|
||||
{id: "time-per", name: "Time(%)", field: "timePer", width: 100, formatter: progressBarFormatter},
|
||||
{id: "class", name: "Class", field: "class", width: 120},
|
||||
{id: "api-type", name: "Api Type", field: "apiType", width: 90},
|
||||
{id: "agent", name: "Agent", field: "agent", width: 130},
|
||||
{id: "application-name", name: "Application Name", field: "applicationName", width: 150},
|
||||
{id: "Loglink", name: "log", field: "logLink", width: 50, formatter:linkFormatter}
|
||||
];
|
||||
|
||||
/**
|
||||
* parse data
|
||||
* @param index
|
||||
@@ -212,7 +209,8 @@ pinpointApp.directive('distributedCallFlow', [ '$filter', '$timeout',
|
||||
applicationName: val[index['applicationName']],
|
||||
hasException: val[index['hasException']],
|
||||
isMethod: val[index['isMethod']] ,
|
||||
logLink : "http://localhost/NeloLogWithTransactionId.pinpoint?transactionId=minwoo_local_tomcat%5E1425368654938%5E10"
|
||||
logLink : val[index['logPageUrl']],
|
||||
logButtonName : val[index['logButtonName']],
|
||||
});
|
||||
});
|
||||
return result;
|
||||
@@ -253,6 +251,23 @@ pinpointApp.directive('distributedCallFlow', [ '$filter', '$timeout',
|
||||
// };
|
||||
dataView.endUpdate();
|
||||
|
||||
var columns = [
|
||||
{id: "method", name: "Method", field: "method", width: 400, formatter: treeFormatter},
|
||||
{id: "argument", name: "Argument", field: "argument", width: 300, formatter: argumentFormatter},
|
||||
{id: "exec-time", name: "Exec Time", field: "execTime", width: 90, formatter: execTimeFormatter},
|
||||
{id: "gap-ms", name: "Gap(ms)", field: "gapMs", width: 60, cssClass: "right-align"},
|
||||
{id: "time-ms", name: "Time(ms)", field: "timeMs", width: 60, cssClass: "right-align"},
|
||||
{id: "time-per", name: "Time(%)", field: "timePer", width: 100, formatter: progressBarFormatter},
|
||||
{id: "class", name: "Class", field: "class", width: 120},
|
||||
{id: "api-type", name: "Api Type", field: "apiType", width: 90},
|
||||
{id: "agent", name: "Agent", field: "agent", width: 130},
|
||||
{id: "application-name", name: "Application Name", field: "applicationName", width: 150}
|
||||
];
|
||||
|
||||
if (t.logLinkEnable) {
|
||||
columns.push({id: "Loglink", name: "log", field: "logLink", width: 50, formatter:linkFormatter});
|
||||
}
|
||||
|
||||
grid = new Slick.Grid(element.get(0), dataView, columns, options);
|
||||
|
||||
var isSingleClick = true, clickTimeout = false;
|
||||
|
||||
@@ -45,8 +45,6 @@ pinpointApp.directive('transactionTable', ['$window', function ($window) {
|
||||
var index = 1;
|
||||
angular.forEach(scope.transactionList, function (val, key) {
|
||||
val['index'] = index++;
|
||||
val['logName'] = "nelo";
|
||||
val['logUrl'] = "http://localhost/NeloLogWithTransactionId.pinpoint?transactionId=minwoo_local_tomcat%5E1425368654938%5E10";
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
<td ng-click="traceByApplication(transaction)" style="cursor:pointer;text-align:center;"><span class="glyphicon glyphicon-fire" ng-show="transaction.exception == 1"></span></td>
|
||||
<td ng-click="traceByApplication(transaction)" style="cursor:pointer">{{transaction.agentId}}</td>
|
||||
<td ng-click="traceByApplication(transaction)" style="cursor:pointer">{{transaction.remoteAddr}}</td>
|
||||
<td ng-click="traceByApplication(transaction)" style="cursor:pointer">{{transaction.traceId}} <a ng-if="transaction.logUrl" class="btn btn-default btn-xs" href="{{transaction.logUrl}}" target="_blank">{{transaction.logName}}</a> </td>
|
||||
<td ng-click="traceByApplication(transaction)" style="cursor:pointer">{{transaction.traceId}} <a ng-if="transaction.logPageUrl" class="btn btn-default btn-xs" href="{{transaction.logPageUrl}}" target="_blank">{{transaction.logButtonName}}</a> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Reference in New Issue
Block a user