Skip to content

Commit

Permalink
add uniq visitor view
Browse files Browse the repository at this point in the history
  • Loading branch information
ScouterProject committed Jul 14, 2015
1 parent 57da863 commit ef4c179
Show file tree
Hide file tree
Showing 14 changed files with 407 additions and 30 deletions.
8 changes: 4 additions & 4 deletions scouter.agent/src/scouter/agent/trace/TraceMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,8 @@ public static void endHttpService(Object stat, Throwable thr) {
return;
}
XLogPack pack = new XLogPack();
pack.endTime = System.currentTimeMillis();
pack.elapsed = (int) (pack.endTime - ctx.startTime);
//pack.endTime = System.currentTimeMillis();
pack.elapsed = (int) (System.currentTimeMillis() - ctx.startTime);
boolean sendOk = pack.elapsed >= conf.xlog_time_limit;
ctx.profile.close(sendOk);
ctx.serviceHash = StringHashCache.getUrlHash(ctx.serviceName);
Expand Down Expand Up @@ -350,8 +350,8 @@ public static void endService(Object stat, Object returnValue, Throwable thr) {
TraceContextManager.end(ctx.threadId);
XLogPack pack = new XLogPack();
pack.cpu = (int) (SysJMX.getCurrentThreadCPU() - ctx.startCpu);
pack.endTime = System.currentTimeMillis();
pack.elapsed = (int) (pack.endTime - ctx.startTime);
//pack.endTime = System.currentTimeMillis();
pack.elapsed = (int) (System.currentTimeMillis() - ctx.startTime);
boolean sendOk = pack.elapsed >= Configure.getInstance().xlog_time_limit;
ctx.profile.close(sendOk);
DataProxy.sendServiceName(ctx.serviceHash, ctx.serviceName);
Expand Down
150 changes: 150 additions & 0 deletions scouter.agent/src/scouter/test/Service24H.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
/*
* Copyright 2015 LG CNS.
*
* 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 scouter.test;

import java.util.Random;
import java.util.Stack;

import scouter.AnyTrace;
import scouter.agent.Configure;
import scouter.agent.LazyAgentBoot;
import scouter.agent.netio.data.net.TcpRequestMgr;
import scouter.agent.trace.StringHashCache;
import scouter.agent.trace.TraceContext;
import scouter.agent.trace.TraceContextManager;
import scouter.agent.trace.TraceMain;
import scouter.io.DataOutputX;
import scouter.lang.pack.XLogPack;
import scouter.util.CastUtil;
import scouter.util.DateUtil;
import scouter.util.IPUtil;
import scouter.util.KeyGen;
import scouter.util.ShellArg;
import scouter.util.SysJMX;
import scouter.util.ThreadUtil;

public class Service24H {
public static void main(String[] args) {

ShellArg sh = new ShellArg(args);
String server = sh.get("-h", "127.0.0.1");
String port = sh.get("-p", "6100");
int tps =CastUtil.cint(sh.get("-tps","1000"));
String type = sh.get("-type", "tomcat");
String name = sh.get("-name", "java"+SysJMX.getProcessPID());
System.setProperty("scouter_type", type);
System.setProperty("scouter_name", name);

System.setProperty("server.addr", server);
System.setProperty("server.port", port);


System.out.println("Scouter Test Simulation!!");
System.out.println(" server = " + server + ":" +port);
System.out.println(" tcp = " + tps);

LazyAgentBoot.boot();
TcpRequestMgr.getInstance();

double interval = 1000.0/tps;

long now = System.currentTimeMillis();

Random r = new Random();

long txcount = 0 ;
double tm = 0;
long last_unit = 0;
while (true) {
txcount++;

String serviceName = "service" + (next(r, 1000));
int service_hash = StringHashCache.getUrlHash(serviceName);
long txid = KeyGen.next();
profile(txid,service_hash);
long endtime = getEndTime();


int elapsed =next(r, 10000);
int cpu = next(r, 10000);
int sqlCount = next(r, 100);
int sqlTime = next(r, 1000);
String remoteAddr = IPUtil.toString(DataOutputX.toBytes(next(r,255)));
String error = null;
long visitor = KeyGen.next();



XLogPack pack = TraceMain.txperf(endtime, txid, service_hash,serviceName, elapsed, cpu, sqlCount, sqlTime, remoteAddr, error, visitor);
TraceMain.metering(pack);

long unit=endtime/5000;
if(last_unit!=unit){
last_unit = unit;
System.out.println(DateUtil.timestamp(endtime) + " exe-tx=" + txcount+ " " + Configure.getInstance().objName);
}
tm = tm+interval;
if(tm>1){
ThreadUtil.sleep((int)tm);
tm = tm - ((int)tm);
}
long x = System.currentTimeMillis();
if(x-now >1000000)
break;
}
ThreadUtil.sleep(100000);
}

static int rate[]={2,2,3,3,4,
5,6,7,8,9,
10,10,9,10,8,
7,6,5,4,3,
3,2,1,1};
static Stack<Integer> stack = new Stack<Integer>();
static Random r = new Random();
static long time= DateUtil.yyyymmdd(DateUtil.yyyymmdd());
private static long getEndTime() {
if(stack.size()==0){
for(int i = 0 ; i <24 ; i++){
for(int j=0;j<rate[i] ;j++){
stack.add(i);
}
}
}
int h = stack.pop();
return time + h*3600*1000L +r.nextInt(3600)*1000L;
}

private static void profile(long txid, int serviceHash) {
TraceContext ctx = new TraceContext(false);
ctx.txid=txid;
ctx.serviceHash=serviceHash;
ctx.startTime=System.currentTimeMillis();

long key = TraceContextManager.start(Thread.currentThread(), ctx);

AnyTrace.message("profile 1");
AnyTrace.message("profile 2");

ctx.profile.close(true);
TraceContextManager.end(key);
}

private static int next(Random r, int max) {
return Math.abs(r.nextInt() % max);
}
}
2 changes: 1 addition & 1 deletion scouter.client/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -824,7 +824,7 @@
icon="icons/monitor.png"
id="scouter.client.views.DigitalCountView"
name="DigitalCountView"
restorable="true">
restorable="false">
</view>
<view
allowMultiple="true"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Copyright 2015 LG CNS.
*
* 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 scouter.client.counter.actions;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;

import scouter.client.Images;
import scouter.client.server.ServerManager;
import scouter.client.util.ImageUtil;
import scouter.client.views.DigitalCountView;
import scouter.lang.pack.MapPack;
import scouter.net.RequestCmd;

public class OpenUniqueTotalVisitorAction extends Action {
public final static String ID = OpenUniqueTotalVisitorAction.class.getName();

private final IWorkbenchWindow win;
private String objType;
private int serverId;

public OpenUniqueTotalVisitorAction(IWorkbenchWindow win, int serverId, String objType) {
this.win = win;
this.objType = objType;
this.serverId = serverId;
setText("Unique Visitor");
setImageDescriptor(ImageUtil.getImageDescriptor(Images.monitor));
}

public void run() {
if (win != null) {
try {
DigitalCountView view = (DigitalCountView) win.getActivePage().showView(
DigitalCountView.ID, serverId + "&" + objType, IWorkbenchPage.VIEW_ACTIVATE);
if (view != null) {
MapPack param = new MapPack();
param.put("objType", this.objType);
String displayObjType = ServerManager.getInstance().getServer(serverId).getCounterEngine().getDisplayNameObjectType(objType);
view.setInput(displayObjType + "'s Unique Visitor", RequestCmd.VISITOR_REALTIME_TOTAL, param);
}
} catch (PartInitException e) {
MessageDialog.openError(win.getShell(), "Error", "Error opening view:" + e.getMessage());
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Copyright 2015 LG CNS.
*
* 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 scouter.client.counter.actions;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;

import scouter.client.Images;
import scouter.client.model.TextProxy;
import scouter.client.util.ImageUtil;
import scouter.client.views.DigitalCountView;
import scouter.lang.pack.MapPack;
import scouter.net.RequestCmd;

public class OpenUniqueVisitorAction extends Action {
public final static String ID = OpenUniqueVisitorAction.class.getName();

private final IWorkbenchWindow win;
private int objHash;
private int serverId;

public OpenUniqueVisitorAction(IWorkbenchWindow win, int serverId, int objHash) {
this.win = win;
this.objHash = objHash;
this.serverId = serverId;
setText("Unique Visitor");
setImageDescriptor(ImageUtil.getImageDescriptor(Images.monitor));
}

public void run() {
if (win != null) {
try {
DigitalCountView view = (DigitalCountView) win.getActivePage().showView(
DigitalCountView.ID, serverId + "&" + objHash, IWorkbenchPage.VIEW_ACTIVATE);
if (view != null) {
MapPack param = new MapPack();
param.put("objHash", this.objHash);
String objName = TextProxy.object.getText(objHash);
view.setInput(objName + "'s Unique Visitor", RequestCmd.VISITOR_REALTIME, param);
}
} catch (PartInitException e) {
MessageDialog.openError(win.getShell(), "Error", "Error opening view:" + e.getMessage());
}
}
}
}
1 change: 1 addition & 0 deletions scouter.client/src/scouter/client/tags/TagCountView.java
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ public void createPartControl(Composite parent) {
tagGroupCombo.setBackground(ColorUtil.getInstance().getColor(SWT.COLOR_WHITE));
tagGroupCombo.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
removeTagCountAll();
loadTagNames(tagGroupCombo.getText());
loadTotalCount(tagGroupCombo.getText());
openDataTable();
Expand Down
19 changes: 17 additions & 2 deletions scouter.client/src/scouter/client/util/MenuUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@
import scouter.client.counter.actions.OpenTodayAllAction;
import scouter.client.counter.actions.OpenTodayServiceCountAction;
import scouter.client.counter.actions.OpenTodayTotalAction;
import scouter.client.counter.actions.OpenUniqueTotalVisitorAction;
import scouter.client.counter.actions.OpenUniqueVisitorAction;
import scouter.client.heapdump.actions.HeapDumpAction;
import scouter.client.heapdump.actions.HeapDumpListAction;
import scouter.client.host.actions.OpenDiskUsageAction;
Expand Down Expand Up @@ -350,6 +352,15 @@ public static HashMap<String, Action> getCounterActionList(IWorkbenchWindow wind
new OpenServiceGroupAction(window, serverId, objType));
}

objTypeList = counterEngine.getObjTypeListWithDisplay(CounterConstants.UNIQUE_VISITOR);
for (int inx = 0; inx < objTypeList.size(); inx++) {
String[] splitedKey = objTypeList.get(inx).split(":");
String objType = splitedKey[1];
actions.put(
objType + ":" + CounterConstants.UNIQUE_VISITOR,
new OpenUniqueTotalVisitorAction(window, serverId, objType));
}

return actions;
}

Expand Down Expand Up @@ -433,6 +444,7 @@ public static void addObjectContextMenu(IMenuManager mgr, IWorkbenchWindow win,
Server server = ServerManager.getInstance().getServer(serverId);
CounterEngine counterEngine = server.getCounterEngine();
String[] counterNames = counterEngine.getSortedCounterName(objType);
boolean javaee = counterEngine.isChildOf(objType, CounterConstants.FAMILY_JAVAEE);

MenuManager performanceCounter = new MenuManager(MenuStr.PERFORMANCE_COUNTER, ImageUtil.getImageDescriptor(Images.CTXMENU_RTC), MenuStr.PERFORMANCE_COUNTER_ID);
mgr.add(performanceCounter);
Expand All @@ -458,12 +470,15 @@ public static void addObjectContextMenu(IMenuManager mgr, IWorkbenchWindow win,
}
}

if(javaee) {
performanceCounter.add(new Separator());
performanceCounter.add(new OpenUniqueVisitorAction(win, serverId, objHash));
}

if (object.isAlive()) {
MenuManager performanceSnapshot = new MenuManager(MenuStr.PERFORMANCE_STATUS, Images.CAPTURE, MenuStr.PERFORMANCE_STATUS_ID);
mgr.add(performanceSnapshot);


boolean javaee = counterEngine.isChildOf(objType, CounterConstants.FAMILY_JAVAEE);
if (javaee) {
performanceSnapshot.add(new OpenCxtmenuThreadListAction(win, MenuStr.THREAD_LIST, objHash, serverId));
performanceSnapshot.add(new OpenCxtmenuActiveServiceListAction(win, MenuStr.ACTIVE_SERVICE_LIST, objHash, objType, serverId));
Expand Down
Loading

0 comments on commit ef4c179

Please sign in to comment.