GithubHelp home page GithubHelp logo

naver / ngrinder Goto Github PK

View Code? Open in Web Editor NEW
1.9K 120.0 473.0 36.98 MB

enterprise level performance testing solution

Home Page: naver.github.io/ngrinder

License: Apache License 2.0

Shell 0.08% Java 80.74% JavaScript 1.25% Groovy 0.29% CSS 0.18% HTML 0.09% Python 0.18% Batchfile 0.04% FreeMarker 0.37% Dockerfile 0.08% Vue 16.70%

ngrinder's Introduction

nGrinder

Join the chat at https://gitter.im/naver/ngrinder

nGrinder is a platform for stress tests that enables you to execute script creation, test execution, monitoring, and result report generator simultaneously. The open-source nGrinder offers easy ways to conduct stress tests by eliminating inconveniences and providing integrated environments.

Want to know what's changed from the original grinder platform?

To get to know what's different from previous ngrinder 2.0?

To get started,

You can find out what nGrinder looks like with screen-shot.

nGrinder consists of two major components.

nGrinder controller

  • a web application that enables the performance tester to create a test script and configure a test run

nGrinder agent

  • a virtual user generator that creates loads.

Features

  • Use Jython script to create test scenario and generate stress in JVM using multiple agents.
  • Extend tests with custom libraries(jar, py). It's unlimited practically.
  • Provide web-based interface for project management, monitoring, result management and report management.
  • Run multiple tests concurrently. Assign the pre-installed multiple agents to maximize each agent's utilization.
  • Deploy agents on multiple network regions. Execute tests on various network locations
  • Embed Subversion to manage scripts.
  • Allow to monitor the state of agents generating stress and target machines receiving stress
  • Proven solution which is used to test huge systems having more than 100 million users in NHN.

Download

You can download the latest nGrinder in the following link.

Quick Start

You can start nGrinder by executing following command.

java -Djava.io.tmpdir=${NGRINDER_HOME}/lib -jar ngrinder-controller-{version}.war

And then access it by using a browser. http://localhost:8080

NGRINDER_HOME is usually ${HOME}/.ngrinder.

Documentation

You can find the installation guide at the following link.

You can find the user guide at the following location link.

Contribution?

nGrinder welcomes any contributions from users. Please make all pull requests against master branches.

  • Clone the REPO : 'git clone git://github.com/naver/ngrinder.git'

You can find general developer documents at the following link.

Versioning

For transparency and insight into our release cycle, and to strive to maintain backward compatibility, Bootstrap will be maintained under the Semantic Versioning guidelines to the greatest extent possible.

Releases will be numbered in the following format:

  `<major>.<minor>.<patch>`

Release will be constructed based on the following guidelines:

  • Breaking backward compatibility bumps the major (and resets the minor and patch)
  • New additions without breaking backward compatibility bump the minor (and reset the patch)
  • Bug fixes and small enhancement. changes bump the patch

Q/A and Bug tracker

Found the apparent bug? Got a brilliant idea for an enhancement? Please create an issue here on GitHub so you can notify us!

You can join our forum as well

License

 Copyright 2012-present NAVER Corp.

 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. 

nGrinder includes the following software and libraries as follows. See the NOTICE folder for the license and copyright details for each.

ngrinder's People

Contributors

alexqin avatar bbo0915 avatar beanmilk avatar dependabot[bot] avatar donggyu04 avatar facewise avatar gitter-badger avatar gy741 avatar higkoo avatar imbyungjun avatar izeye avatar jinan159 avatar jlleitschuh avatar junoyoon avatar koojanghoi avatar kswoo3740 avatar lijie1010 avatar lzfcome avatar maoyubin avatar mavlarn avatar newpcraft avatar outstanding1301 avatar p- avatar rankyung-hong avatar sh-cho avatar shisheng-1 avatar songeunwoo avatar tolis-e avatar weirdjh avatar yunyoungjin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ngrinder's Issues

语言设置无效?

不确定是是不是我使用的问题。
之前在用ngrinder-core-3.1.2的时候,语言设置是有效的。现在用ngrinder-core-3.1.3,配置:
ngrinder.langauge.default=cn
重启服务后,每次登录还是默认为英文。请查实

Graphs on Detail Report Page are blank and console shows 500 Error

I checked out github project today and built the .war files with maven. I can use the web interface, distribute tests and run them. Everything appears to working perfectly. When I go to the detail report page, none of the graphs display anything, but I can download the CSV file and it contains what I expect. When inspecting the page, the following error shows up in the console:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)

http://localhost:8080/perftest/api/6/perf?dataType=TPS%2CErrors%2CMean_Test_Time_(ms)%2CMean_time_to_first_byte%2CUser_defined%2CVuser&imgWidth=697.777777671814&_=1391891735147

screenshot 2014-02-08 13 47 18

Cannot switch an user who has 2 characters name on switching other user.

nGrinder provide switching other user for sharing their scripts or tests using switch other user function.
By the way, the input name should be more than 3 characters, so some user can't be changed who has two byte names such as some multi-bytes characters users.
So, it would better to reduce as 2 characters.

can not start ngrinder-monitor [ 3.3 ]

first of all, this tool is awesome ! thanks for your great job, really enjoy using it
the controller and agent works very well on my machine
just got below error when I try to start a monitor agent with default agent.conf. can any one help on this?

image

Monitor is not accessible when IP6 is not supported.

Monitor initiate the JMX over RMI and bind it to all available IPs so that all monitor connection request can be accepted. To bind to all IP6 and IP4 , I used "[::]" for JMX-RMI Service URL.
However [::] is not working when the only IP4 is available in the system. Instead, It seems that It tries to bind to a IP which can be resolved by lookup "hostname"

In some linux system, 127.0.0.1 is returned when resolving hostname. Eventually JMX-RMI is accessible only when the client in the same server calls.

https://github.com/nhnopensource/ngrinder/blob/master/ngrinder-core/src/main/java/org/ngrinder/monitor/agent/MonitorServer.java#L72

It's very serious problem. We should fix this by checking IP6 support in the system and use [::](for IP6 and IP4 both supproted system) or 0.0.0.0 (for IP4 only supported system) for JMX RMI server.

안녕하세요.

nGrinder 개발하시느라 수고가 많으세요

매번 감사하고 있습니다.

지금 저는 3000명정도 수용가능한 서버를 구축할려고 하고 있습니다.

그러기엔 가용한 부하가 많이 필요합니다.
ngrinder3.0.4와 ngrinder 3.1로 올해 업데이트 되면서 엄청 기뻤습니다. 아직 이해도가 부족하여 클러스터링까지는 못하겠지만 최대한 nGrinder 기능은 다 써볼려고 합니다.

  1. 같은 물리적 환경에 nGrinder 3.1 controller 1개와 N개의 Agent를 구성하려고 합니다. 매뉴얼대로 진행하였지만 되지 않습니다. 3.0.4는 컨트롤러 매니저에 Agent가 인식이 되었지만 3.1환경에서는 확인이 되지 않습니다.
  2. nGrinder 3.1 controller를 구성한 뒤 원격지에서 Agent를 실행시켜 부하테스트를 진행하였으나 controller ip를 바꿔주었는데도 Agent가 계속 127.0.1.1과 연결이 되지 않는다는 문구만 출력됩니다.

이 2가지 부분이 자꾸 발목을 붙잡네요 ㅠㅠ

Agent can't connect controller port at 16001

SYS ENV is CentOS 5, JKD_1.6.0_38, Tomcat 6
hostname -> intra21
ping hostname -> 10.207.0.200

/etc/hosts
10.207.0.200 localhost
10.207.0.200 intra21

run_agent.sh

2013-02-03 17:55:57,191 INFO org.ngrinder.infra.AgentConfig: Java Sytem Property: ngrinder.agent.home=
2013-02-03 17:55:57,192 WARN org.ngrinder.infra.AgentConfig: The path to ngrinder agent home is ambiguous:
2013-02-03 17:55:57,192 WARN org.ngrinder.infra.AgentConfig: 'null' is accepted.
2013-02-03 17:55:57,216 TRACE org.ngrinder.common.util.PropertiesWrapper: The verbose is not defined in conf file. Use false instead.
2013-02-03 17:55:57,324 INFO org.ngrinder.NGrinderStarter: java.library.path : /usr/java/jdk1.6.0_38/jre/lib/amd64/server:/usr/java/jdk1.6.0_38/jre/lib/amd64:/usr/java/jdk1.6.0_38/jre/../lib/amd64:./native_lib/::/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib:/root/ngrinder-core/./native_lib
2013-02-03 17:55:57,325 INFO org.ngrinder.NGrinderStarter: - Passing mode agent
2013-02-03 17:55:57,326 INFO org.ngrinder.NGrinderStarter: - nGrinder version 3.1.1
2013-02-03 17:55:57,353 INFO org.ngrinder.NGrinderStarter: *************************
2013-02-03 17:55:57,354 INFO org.ngrinder.NGrinderStarter: Start nGrinder Agent ...
2013-02-03 17:55:57,359 INFO org.ngrinder.NGrinderStarter: with console: 127.0.0.1:16001
2013-02-03 17:55:57,400 INFO agent controller daemon: agent controller daemon : started.
2013-02-03 17:55:57,447 ERROR agent controller: Error while connecting to /127.0.0.1:16001 : Failed to connect to '/127.0.0.1:16001'
2013-02-03 17:55:59,455 ERROR agent controller: Error while connecting to /127.0.0.1:16001 : Failed to connect to '/127.0.0.1:16001'

how to run agent ???

"Stopped by error" message when running a test

Hi

I am using nGrinder 3.0.1 (windows 7 environment). The controller and Agent are able to communicate, they are configured in the same box. I created a simple script for http://www.google.com.

When ran the test i got the following error "Stoped by error". I am not able to find a log where i can see the error. i am not able to find anything under Report tab.

I also noticed this under Tomcat command window.

INFO: Invalid chunk starting at byte [335] and ending at byte [336] with a value of [=] ignored Note: further occurrences of parameter error will be logged at DEBUG level.

JDK7 prior to JDK7u50 in windows does not accept the classpath "lib/*"

Several users reported the followings when running ngrinder in windows.

D:\ngrinder-agent>run_agent.bat 
Error: Could not find or load main class lib\asm-3.3.1.jar 

http://ngrinder.642.n7.nabble.com/Re-ngrinder-agent-Error-Could-not-find-or-load-main-class-lib-asm-3-3-1-jar-td1488.html

It seems that it's caused by JDK bug. nGrinder agent batch file puts "lib/*" as the -cp. However from some version of JDK, Java is not successful to resolve the appropriate jar files contained in the lib folder.

For this case, we can make the classpath not to have wildcard and construct the whole classpath by iterating the jar files like the following.

@ECHO OFF
setLocal EnableDelayedExpansion
for /R ./lib %%a in (*.jar) do (
  set CLASSPATH=!CLASSPATH!;%%a
)
set CLASSPATH=!CLASSPATH!
java -server -cp "%CLASSPATH%" org.ngrinder.NGrinderAgentStarter --mode agent --command run %*

Fix wrong chart interval on the monitor page

In the monitor page, the chart interval is retrieved by chartInterval json variable. However the value passed from controller is named "interval". It makes the charInterval undefined and it make the graph always rendered with "1 sec interval".

The time differences b/w controller and agents causes agent.conf overwriting.

When the user downloads the agent, the agent package (when it's firstly downloaded) contains the __agent.conf having same lastmodifiedtime as downloading time.

If the agent machine has the time settings slower than controller, the newly copied ${NGRINDER_AGENT_HOME}/agent.conf might have the older lastmodifiedtime timestamp. In this case, the any modification on ${NGRINDER_AGENT_HOME}/agent.conf might overwritten by __agent.conf.

To fix this, we need to set agent.conf's timestamp as the __agent.conf when it's copied.

Value too long for column "AGENT_STAT VARCHAR(2000)"

Caused by: org.h2.jdbc.JdbcSQLException: Value too long for column "AGENT_STAT VARCHAR(2000)": "'{""agent32.higkoo.org"":{""port"":0,""system"":""LINUX"",""collectTime"":1362982622754,""freeMemory"":1587248,""totalMemory"":3924216,""cpuUse... (3234)"; SQL statement:
update PERF_TEST set last_modified_date=?, last_modified_user=?, agent_count=?, agent_stat=?, description=?, distribution_path=?, duration=?, errors=?, finish_time=?, ignore_sample_count=?, init_processes=?, init_sleep_time=?, last_progress_message=?, mean_test_time=?, monitor_stat=?, peak_tps=?, port=?, process_increment=?, process_increment_interval=?, processes=?, progress_message=?, region=?, run_count=?, running_sample=?, safe_distribution=?, scheduled_time=?, script_name=?, script_revision=?, send_mail=?, start_time=?, status=?, stop_request=?, tag_string=?, target_hosts=?, test_comment=?, test_error_cause=?, name=?, test_time_standard_deviation=?, tests=?, threads=?, threshold=?, tps=?, use_rampup=?, vuser_per_agent=? where id=? [22001-168]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
at org.h2.message.DbException.get(DbException.java:169)
at org.h2.table.Column.validateConvertUpdateSequence(Column.java:315)
at org.h2.table.Table.validateConvertUpdateSequence(Table.java:689)
at org.h2.command.dml.Update.update(Update.java:123)
at org.h2.command.CommandContainer.update(CommandContainer.java:75)
at org.h2.command.Command.executeUpdate(Command.java:230)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:156)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:142)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
at sun.reflect.GeneratedMethodAccessor75.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
... 40 more

Abnormal execution result if the script has a null character(0x0)

While running a test, the agent shows the following exception if it has a null character even the script has no error.
When it is saved by the editor of ngrinder controller, there are no issue because the null character has already trimmed by the editor. However, while saving a script content by rest api, null characters are not handled.
So, it maybe need to trim a null character in the script content due to improve reliability.

ERROR worker-bootstrap: Error running worker process
net.grinder.engine.common.EngineException: Error while initialize test runner
    at net.grinder.scriptengine.groovy.GroovyScriptEngine.<init>(GroovyScriptEngine.java:71) ~[ngrinder-groovy-3.3.1-SNAPSHOT.jar:na]
    at net.grinder.scriptengine.groovy.GroovyScriptEngineService.createScriptEngine(GroovyScriptEngineService.java:109) ~[ngrinder-groovy-3.3.1-SNAPSHOT.jar:na]
    at net.grinder.engine.process.ScriptEngineContainer.getScriptEngine(ScriptEngineContainer.java:105) ~[grinder-core-3.9.1.jar:na]
    at net.grinder.engine.process.GrinderProcess.run(GrinderProcess.java:329) ~[ngrinder-runtime-3.3.1-SNAPSHOT.jar:na]
    at net.grinder.engine.process.WorkerProcessEntryPoint.run(WorkerProcessEntryPoint.java:87) [grinder-core-3.9.1.jar:na]
    at net.grinder.engine.process.WorkerProcessEntryPoint.main(WorkerProcessEntryPoint.java:60) [grinder-core-3.9.1.jar:na]
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/Users/NAVER/.ngrinder_agent/file-store/admin/current/TestRunner.groovy: 26: unexpected char: 0x0 @ line 26, column 1.

   ^

1 error

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:309) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:149) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:119) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:131) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.SourceUnit.addError(SourceUnit.java:359) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:137) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:108) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:236) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.CompilationUnit$1.call(CompilationUnit.java:162) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:912) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:574) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:550) ~[groovy-all-2.2.1.jar:2.2.1]
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:527) ~[groovy-all-2.2.1.jar:2.2.1]
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:279) ~[groovy-all-2.2.1.jar:2.2.1]
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:258) ~[groovy-all-2.2.1.jar:2.2.1]
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:244) ~[groovy-all-2.2.1.jar:2.2.1]
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:185) ~[groovy-all-2.2.1.jar:2.2.1]
    at net.grinder.scriptengine.groovy.GroovyScriptEngine.<init>(GroovyScriptEngine.java:62) ~[ngrinder-groovy-3.3.1-SNAPSHOT.jar:na]
    ... 5 common frames omitted

nGrinder 3.1.1 is now available.

nGrinder team proudly releases nGrinder 3.1.1 which is the minor update.

This version focused to improve the UX. It's fast and more visible than 3.1 and fix/improve 21 issues.

http://www.cubrid.org/wiki_ngrinder/entry/ngrinder-3-1-1-release-note

We highly recommend nGrinder 3.1 users upgrade to nGrinder 3.1.1 controller and agents.

You can download nGrinder 3.1.1 binary in the following location.

http://sourceforge.net/projects/ngrinder/files/ngrinder-3.1.1/

Please check the release note before you replace the existing version. It's a little bit tricky to upgrade well.

Enjoy the easy and happy performance testing.

Make the agent work with JRE under security mode

nGrinder 3.3 only works with JDK not JRE under the security mode. It's because SecurityManager tries to resolve the JAVA_HOME and JAVA_HOME can be only available with JDK. In the NGrinderSecurityManager JAVA_HOME is used to resolve the jre location. However jre location can be resolved with System.getProperty("java.home"), then we might not need to resolve JAVA_HOME explicitly.

Getting exception while running 'ngrinder-controller.WAR' on java 8

ERROR ContextLoader.java:307 : Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from relative location [applicationContext-springdata.xml]
Offending resource: class path resource [applicationContext.xml]; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to read candidate component class: file [/home/user/.ngrinder/webapp/WEB-INF/classes/org/ngrinder/home/controller/HomeController$1.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1320
Offending resource: class path resource [applicationContext-springdata.xml]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1320
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:271) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:196) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:181) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) ~[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) ~[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131) ~[spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522) ~[spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436) ~[spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384) ~[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) ~[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548) [ngrinder-controller-3.3.war:na]
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136) [ngrinder-controller-3.3.war:na]
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1272) [ngrinder-controller-3.3.war:na]
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) [ngrinder-controller-3.3.war:na]
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:489) [ngrinder-controller-3.3.war:na]
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) [ngrinder-controller-3.3.war:na]
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) [ngrinder-controller-3.3.war:na]
at org.mortbay.jetty.Server.doStart(Server.java:224) [ngrinder-controller-3.3.war:na]
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) [ngrinder-controller-3.3.war:na]
at org.ngrinder.NGrinderControllerStarter.run(NGrinderControllerStarter.java:235) [ngrinder-controller-3.3.war:na]
at org.ngrinder.NGrinderControllerStarter.main(NGrinderControllerStarter.java:307) [ngrinder-controller-3.3.war:na]
Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to read candidate component class: file [/home/user/.ngrinder/webapp/WEB-INF/classes/org/ngrinder/home/controller/HomeController$1.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1320
Offending resource: class path resource [applicationContext-springdata.xml]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1320
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.data.repository.config.AbstractRepositoryConfigDefinitionParser.handleError(AbstractRepositoryConfigDefinitionParser.java:182) ~[spring-data-commons-core-1.1.0.RELEASE.jar:na]
at org.springframework.data.repository.config.AbstractRepositoryConfigDefinitionParser.parse(AbstractRepositoryConfigDefinitionParser.java:94) ~[spring-data-commons-core-1.1.0.RELEASE.jar:na]
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1419) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:255) ~[spring-beans-3.1.0.RELEASE.jar:3.1.0.RELEASE]
... 30 common frames omitted
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1320
at org.springframework.asm.ClassReader.readClass(Unknown Source) ~[spring-asm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.asm.ClassReader.accept(Unknown Source) ~[spring-asm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.asm.ClassReader.accept(Unknown Source) ~[spring-asm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.core.type.classreading.SimpleMetadataReader.(SimpleMetadataReader.java:54) ~[spring-core-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80) ~[spring-core-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:101) ~[spring-core-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76) ~[spring-core-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.core.type.filter.AbstractTypeHierarchyTraversingFilter.match(AbstractTypeHierarchyTraversingFilter.java:105) ~[spring-core-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.core.type.filter.AbstractTypeHierarchyTraversingFilter.match(AbstractTypeHierarchyTraversingFilter.java:95) ~[spring-core-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent(ClassPathScanningCandidateComponentProvider.java:303) ~[spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:237) ~[spring-context-3.1.0.RELEASE.jar:3.1.0.RELEASE]
at org.springframework.data.repository.config.AbstractRepositoryConfigDefinitionParser.getRepositoryInterfacesForAutoConfig(AbstractRepositoryConfigDefinitionParser.java:140) ~[spring-data-commons-core-1.1.0.RELEASE.jar:na]
at org.springframework.data.repository.config.AbstractRepositoryConfigDefinitionParser.doAutoConfiguration(AbstractRepositoryConfigDefinitionParser.java:116) ~[spring-data-commons-core-1.1.0.RELEASE.jar:na]
at org.springframework.data.repository.config.AbstractRepositoryConfigDefinitionParser.parse(AbstractRepositoryConfigDefinitionParser.java:87) ~[spring-data-commons-core-1.1.0.RELEASE.jar:na]
... 41 common frames omitted
2014-12-23 16:11:22.468:WARN::Failed startup of context org.mortbay.jetty.webapp.WebAppContext@76c3e77a{/,file:/home/user/ngrinder/ngrinder-controller/target/ngrinder-controller-3.3.war}
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from relative location [applicationContext-springdata.xml]|Offending resource: class path resource [applicationContext.xml]; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to read candidate component class: file [/home/user/.ngrinder/webapp/WEB-INF/classes/org/ngrinder/home/controller/HomeController$1.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1320|Offending resource: class path resource [applicationContext-springdata.xml]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1320
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:271)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:196)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:181)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1272)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:489)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.ngrinder.NGrinderControllerStarter.run(NGrinderControllerStarter.java:235)
at org.ngrinder.NGrinderControllerStarter.main(NGrinderControllerStarter.java:307)

Not able to login

when i initially setup ngrinder i was able to log into the application. When i setup 3.0.2 i was not able to login. Even when i shifted back to 3.0.1 i still am not able to login.

i have tried "user" "admin". After entering the username and password it returns back to the login page and not error message is shown on the screen

i have reinstall apachi and cleared the browser cache reinstalled .war file many times

I am using windows 7 system

But in the log file below message appears.

19:07:58 INFO ClassPathInit.java:51 : Total Class Path for validation is /D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/asm-3.3.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/dnsjava-2.1.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/grinder-3.9.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/grinder-core-3.9.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/grinder-dcr-agent-3.9.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/grinder-http-3.9.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/grinder-httpclient-3.9.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/grinder-xmlbeans-3.9.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/jsr173-1.0.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/jython-2.2.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/logback-classic-1.0.0.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/logback-core-1.0.0.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/ngrinder-dns-3.0.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/picocontainer-2.13.6.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/slf4j-api-1.6.4.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/stax-api-1.0.1.jar;/D:/apache-tomcat-7.0.32/webapps/ngrinder-controller/WEB-INF/lib/xmlbeans-2.5.0.jar
19:07:59 WARN Cglib2AopProxy.java:255 : Unable to proxy method [public final void org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.afterPropertiesSet() throws java.lang.Exception] because it is final: All calls to this method via a proxy will be routed directly to the proxy.
19:07:59 INFO PluginManager.java:115 : Initializing Plugin System
19:07:59 INFO PluginManager.java:231 : plugin descriptor org.ngrinder.infra.plugin.OnLoginModuleDescriptor with on-login is initiated.
19:07:59 INFO PluginManager.java:231 : plugin descriptor org.ngrinder.infra.plugin.OnServletFilterModuleDescriptor with on-servletfilter is initiated.
19:07:59 INFO PluginManager.java:231 : plugin descriptor org.ngrinder.infra.plugin.OnControllerLifeCycleModuleDescriptor with on-start is initiated.
19:07:59 INFO PluginManager.java:231 : plugin descriptor org.ngrinder.infra.plugin.OnTestLifeCycleModuleDescriptor with on-test-start is initiated.
19:08:00 INFO PluginManager.java:152 : Plugin System is started.
19:08:29 INFO HomeController.java:155 : Login Failure No athenticated
19:08:38 INFO HomeController.java:155 : Login Failure No athenticated

agent的配置文件位置不合理

目前agent只读用户家目录下的配置文件,这种做法很不科学!
比如,想用nobody运行agent都不可以。
此应用应该是和用户无关的,理论应该在/etc下独立一个目录放配置。当然,也可以支持在/etc下没有时用家目录。

Target host field should be longer

nGrinder 3.3 allows 256 characters in the target host field. However it should be longer if the multiple host entries are used especially when L4 simulation mimics back end servers more than 10 back end.

For example, www.aaa.com:255.255.255.255; consists of 28 characters, hosts fields can only contain 8 hosts under the 256 characters.

Downloading agent from controller

nGrinder agent is easy to install.
'''Just download the binary, modify the agent.conf to connect to appropriate controller then run.'''

However there are several problems about this.

  • When a agent should be upgraded, each admin should visit each machine and reinstall ngrinder agents. If the agent machine is not ours and we needs somebody's help to install an agent, it might be a really difficult job. I have already had this experience.
  • A user may confuse which controller the agent should be connected to especially if controllers are run under the cluster mode.
  • Packaging separate ngrinder controller and agent is painful.
  • Sourceforge download statistics shows that some users download only controllers not agents.

What I firstly thought was JNLP. Actually this idea came from Jenkins. Jenkins allows to run a slave in the each machine by downloading jnlp from Jenkins master. This dramatically simplifies the slave installation. However I've found this is not much feasible way in ngrinder agent. Because agents can be executed by jnlp. But they can not execute worker processes. When a agent invokes worker processes, it takes the classpaths from the current class loader and filter them to minimize the dependencies. Worker processes will load several user defined library. so we should minimize dependencies which worker processes itself needs to minimize the dependency conflicts.

However jar files downloaded from JNLP are stored in the local java cache and renamed to weird name like 0Xw320ajsd. It has no jar file extension. Therefore, It's not readable and filterable. I failed to infer the original jar files name from this mangled jar file name.

In addition, JNLP needs signed jar files. To sign jar files, we need a certificate. This can be a reason for developers not to participate ngrinder dev.

So.. I concluded that we should drop JNLP approach. We need something different.
Following is one of the candidates I think.

  • Make the agent package(tar.gz) downloadable from controller not sourceforge.

    url should be http://controller-host/download/agent

  • The agent package contains predefined agent.conf file to connect current controller

    ngrinder controller might need the dynamic tar.gz composition.
    we may use some cache not to repackage tar.gz when there are no changes.

  • Unzip the binary and just run run_agent.sh

  • ngrinder agent detects the pre-defined agent.conf in the current folder and copy it to ${NGRINDER_AGENT_HOME}/agent.conf if the pre-packaged agent.conf is newer than ${NGRINDER_AGENT_HOME}/agent.conf.

  • Make the ngrinder update command in agent controller work again so that controller can order all the connected agent download agent package into ${NGRINDER_AGENT_INSTALLATION_FOLDER}/update_package folder.

    if there exists update folder, copy this to the root installation folder and execute run_agent_internal.sh.
    This was already implemented here

What do you think about this idea?

Need to allow changing a timeout which is related while @BeforeProcess is running

Actually, ngrinder agent try to handle a timeout while running in @BeforeProcess routine. Test would be failed if the first test method didn't be started within 30 seconds.
However, because some ngrinder test might consume long time to prepare testing data on @BeforeProcess routine, we need to implement to adjust this timeout period in a configuration file of ngrinder controller.

Exception is occurred when assigning multiple process.

The script is reporting no errors in validation phase. However when I assigned it in the test, It show following error logs and is stopped by errors. Why?

잘 쓰고 있는 사용자입니다. 궁금한 점이 있는데요. 아래의 로그 내용은 .ngrinder/log/agent.log에 적힌 내용을 가져온 것 입니다. 이상하게 에이전트 별 가상사용자의 수, 그 중에서도 process를 1로 지정하면 잘 작동합니다만, 이것을 1이상으로 지정하면 아래와 같은 에러 메시지와 함께 종료됩니다. 왜 그런 걸까요?
(한글로 커뮤니케이션하는 것을 선호하지 않으시면 답장후에 삭제하셔도 됩니다 ^^)

15:28:50 INFO ConsoleFoundationEx.java:155 : console 10.160.223.188:12009 has been started
15:28:50 INFO PerfTestService.java:717 : egoing.net/script.py is being written in /usr/share/tomcat7/.ngrinder/perftest/10/dist for test perftest_10_admin
15:28:50 INFO PerfTestService.java:721 : File write is completed in /usr/share/tomcat7/.ngrinder/perftest/10/dist
15:28:50 INFO PerfTestService.java:659 : Grinder Properties : {grinder.threads=1, grinder.numberOfOldLogs=1, grinder.jvm.classpath=., grinder.test.id=test_10, grinder.duration=60000, grinder.sleepTimeVariation=0.2, grinder.runs=0, grinder.useConsole=true, grinder.script=script.py, grinder.jvm=java, grinder.security=false, grinder.processIncrement=0, grinder.sleepTimeFactor=1, ngrinder.etc.hosts=egoing.net, grinder.reportTimesToConsole=true, grinder.debug.singleprocess=false, grinder.processes=2, grinder.ignoreSampleCount=0, grinder.reportToConsole.interval=500, grinder.dcrinstrumentation=false, grinder.logProcessStreams=true}
15:29:15 INFO SingleConsole.java:1064 : Sampling is started
15:29:59 ERROR PerfTestRunnable.java:393 : Abnormal test 10 by SCRIPT_ERROR
15:30:00 ERROR PerfTestRunnable.java:445 : Terminate 10
15:30:00 INFO PerfTestService.java:1029 : Total Statistics for test 10 is {}
15:30:00 INFO SingleConsole.java:1080 : Sampling is stopped
15:30:00 INFO PerfTestRunnable.java:360 : remove monitors on [org.ngrinder.agent.model.AgentInfo@74fa477c[ip=egoing.net,port=13243,agentIdentity=,hostName=,status=,region=,approved=false,id=]] for perftest 10
15:30:00 ERROR MonitorAgentService.java:73 : Error occurs while remove monitor for egoing.net

Multiple agent registration failed

Hello,

When I try to add multiple agent, ngrinder displays same multiple instances.

https://www.dropbox.com/s/cg5pio6p47a6rad/capture.PNG
in this picture, I try to add two agent from 10.89.5.68 and 10.89.3.55, but ngrinder shows two same 127.0.0.1 instances.

Test Environment:

  • controller : Ubuntu 12.04 64bit, tomcat7
  • agent: Ubuntu 10.04 32bit and Ubuntu 12.04 64bit

I think if you use the agent's IP address as the key of the agent, you need to change the getHostAddress() routine in ./main/java/net/grinder/AgentController.java

Thanks.

Safe transmission threshold option should be long

controller.safe_dist_threshold takes the int value so if the option value is more than integer range, this option is resolved as the 0 and all file transmission is done under safe file transmission logic.

So.. we need to get this in long type.

Remove unnecessarily verbose log in controller

Mistakenly, nGrinder 3.3 controller's default log level set as DEBUG.

In the controller-properties.map includes the following line.

controller.verbose,true,verbose

It should be false, if we want to minimize the log size. Fix this.

Release 3.3.1

@newpcraft @maoyubin @Mavlarn @Chojiwon

I think we're almost ready to release 3.3.1 which includes. #32 #33 #34, #36 and http://jira.cubrid.org/browse/NGRINDER-725 fixes?

What do you think you guys? If you agree with this, please add the +1 comment (It's the very conventional way to get agreed.

If we all agree on this, we should do following as you guys know.

  1. I have to move all 3.3.1-SNAPSHOT to 3.3.1 and tag the version.
  2. @maoyubin deploys ngrinder 3.3.1 parent, core, runtime, groovy into maven repo.
  3. @newpcraft deploys ngrinder 3.3.1 and JVM plugin into the internal instance(test)
  4. @Chojiwon does testing.
  5. I or @newpcraft writes the release note.
  6. @newpcraft and I fix the bugs @Chojiwon found
  7. @Chojiwon deploys 3.3.1 into demo machine
  8. @newpcraft deploys 3.3.1 into real machine.
  9. I upload the binary into sourceforge.

Too fast timeout when connecting Mbean.

Whenever the mbeanclient is used, nGrinder makes timeout exception when it takes more than 1 sec. Usually it works when the ngrinder controller and target is close, However it might not workable in the distant environment.

    private JMXConnector connectWithTimeout(final JMXServiceURL jmxUrl, int timeout) throws NGrinderRuntimeException, TimeoutException {
        try {
            ExecutorService executor = Executors.newSingleThreadExecutor();
            Future<JMXConnector> future = executor.submit(new Callable<JMXConnector>() {
                public JMXConnector call() throws IOException {
                    return JMXConnectorFactory.connect(jmxUrl);
                }
            });

            return future.get(timeout, TimeUnit.MILLISECONDS);
        } catch (TimeoutException e) {
            throw e;
        } catch (Exception e) {
            throw processException(e);
        }
    }

We need to make it configurable, so that the Mbeanclient client uses its own connection timeout value.

Provide intellij profile in groovy maven project

When running nGrinder test in the intellij, the dependency to the ngrinder-groovy should be compile scope. It's because intellij excludes the dependencies in the classpath when running JUnit test by default. However puttting ngrinder-groovy dependency to the compile scope, test under ngrinder context might be failed. There we need to put the maven profile to activate the dependency only in the intelliJ context . I've already provided the description in the following url,
http://www.cubrid.org/wiki_ngrinder/entry/import-groovy-maven-project-in-intellij

However it might be better to provide these profiles in the default maven template by default.

  <profiles>
        <!-- Following dependency is mandatory -->
        <profile>
            <id>default</id>
            <activation>
                   <activeByDefault>true</activeByDefault>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>org.ngrinder</groupId>
                    <artifactId>ngrinder-groovy</artifactId>
                    <version>${ngrinder.version}</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        </profile>
        <!-- Use intellij profile when running tests in the intellij -->
        <profile>
            <id>intellij</id>
            <dependencies>
                <dependency>
                    <groupId>org.ngrinder</groupId>
                    <artifactId>ngrinder-groovy</artifactId>
                    <version>${ngrinder.version}</version>
                    <scope>compile</scope>
                </dependency>
            </dependencies>
        </profile>
    </profiles>

nGrinder 3.1 is now available.

nGrinder team proudly releases nGrinder 3.1 which is the major update.

If your organization is big enough, you may be satisfied with nGrinder 3.1 features. This version is majorly targeting the company which uses multiple IDCs.

http://www.cubrid.org/wiki_ngrinder/entry/ngrinder-3-1-release-note

Even if your organization is small, nGrinder 3.1 might be beneficial either.

It has more stable agents and shareable user account.

We highly recommend nGrinder 3.0 users upgrade to nGrinder 3.1 controller and agents.

You can download nGrinder 3.1 binary in the following location.

http://sourceforge.net/projects/ngrinder/files/ngrinder-3.1/

You can upgrade it by just replace existing files.

Enjoy easy and happy performance testing.

Make the target host field expand the size which could be added a lot of hosts

According the following issue, it possible to added hosts more than before.

3f45c5a

But, sometimes, 1024 bytes also might not be sufficient to store hosts if the host name is quite long.
So, it would be better to expand to 65535.

Because of varchar field, even it expand to 65535, it wouldn't affect any performance issue both of cubrid and h2 database.

Support Tomcat JMX Monitoring by default

Currently ngrinder collects the target system status which are emitted from ngrinder monitor.
However most people don't use it. The one of the reasons might be because the monitor emits only memory/cpu/network. They can be not very useful much for java web service developers. For example the memory is bound to the XMX setting so it never goes beyond this setting. What java web service developers needs is not free memory but heap/permgen memroy size.

We have already plugin extension point which allows ngrinder to perform some job whenever the sampling is executed. What If we provides the plugin which connects the JMX in tomcat and collects Heap/PermGen/GC count/Threads from target JVM?

Unable to connect SVN to Shared Account for uploading scripts, resources and assets

We have started to make proper use of the Account Share feature (http://www.cubrid.org/wiki_ngrinder/entry/user-account-share) to allow users to work on a "project" user, so all members of the project team share resources. However we appear to have an issue with SVN access to the "project" user. The scenario is as follows:

Project P1, user U1, admin user A1
P1 has shared their account with U1

  • U1 can upload scripts, etc. into area U1
  • A1 can upload scripts, etc. into areas P1, U1 and A1
  • U1 cannot upload scripts, etc. into P1 but the tortoise client sits using increasing amounts of memory until it crashed.

(If U1 is made an administrator, they can upload to U1, A1 and P1 but we do not want to use this as a work-around for obvious reasons.)

Given that the account-share feature is intended to be our standard way of working this is a little awkward.

Please can you help - am I doing something wrong?

Make service component method name consistent.

As time goes by, our code is evolving inconsistently. We use commit first approach so we didn't block commiter's commits which harms consistency. Even I made a lot of mistakes. For example... FileEntryController contains following methods.

addFolder(User, String, String, String): void
createUserRepo(User, File): SVNURL
delete(User, String): void
delete(User, String, String[]): void
dividePathAndFile(String): String[]
getAllFileEntries(User): List<FileEntry>
getCurrentContextPathFromUserRequest(): String
getFileEntries(User, String, Long): List<FileEntry>
getFileEntry(User, String): FileEntry
getFileEntry(User, String, long): FileEntry
getFileEntry(User, String, Long): FileEntry

Some times we used (verb)FileEntry or just verb.

getFileEntry...
delete...

If we have to make them consistent, we should take out FileEntry from all methods or put FileEntry in all methods. What do you think which one is better?

Reduce unnecessary cache invalidate

All versions of nGrinder clears file distribution caches before distributing the files.
Normally it's not a problem. Usually users locate the controller and agents in the near place and file transmission b/w the controller and agents is fast enough, so even bunch of files(maybe < 20mb) can be transmitted in a very short time. However if the file size is big and the network bandwidth is limited, ngrinder automatically turns on the safe distribution feature and slow down the whole transmission process.

Scripting coding with Groovy maven project

@junoyoon
I am trying to use Groovy maven project to write script, maybe there is a problem with pom.

I used the eclipse plugin for groovy, the plugin version is 2.9. The groovy latest compiler it provides is 2.1, but the dependency of ngrinder-groovy 3.3 is groovy-all 2.2.

Then when I run the groovy as a unit test, there is an error as below. Then I exclude the groovy-all dependency from ngrinder-groovy, and used the eclipse provided groovy compiler. Then it can run.

So, is it necessary to mention about this conflicts in pom template? Or, am I making some mistake to run.

java.lang.ExceptionInInitializerError
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:162)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:192)
at org.codehaus.groovy.runtime.callsite.ClassMetaClassGetPropertySite.(ClassMetaClassGetPropertySite.java:35)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.createClassMetaClassGetPropertySite(AbstractCallSite.java:296)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.createGetPropertySite(AbstractCallSite.java:248)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.acceptGetProperty(AbstractCallSite.java:235)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227)
at TestDBCache.beforeProcess(TestDBCache.groovy:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at net.grinder.scriptengine.groovy.junit.RunAfterThreads.evaluate(RunAfterThreads.java:56)
at net.grinder.scriptengine.groovy.junit.GrinderRunner.run(GrinderRunner.java:170)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.1.6 and you are trying to load version 2.2.1
at TestDBCache.beforeProcess(TestDBCache.groovy:31)
... 8 more

Quick Start allows URLs containing ";" characters but resultant test cannot be navigated to

One of my users was attempting to create a "Quick Start" test with the URL "http://test-system/flights/departures;gateRequested=false;departureDate=2013-11-14;" and the system creates a folder structure with the most nested folder called "departures;gateRequested=false;departureDate=2013-11-14;" (I can see this from within my desktop SVN client).
However because this contains semi-colons it cannot be navigated to from within nGrinder and, being longer than the maximum permitted, may cause issues later on.

The URL parser already stops parsing the final "folder" name if it encounters a "?" character - please can we have a change so that it stops on the first invalid character (or the 20th character if sooner)?

Many thanks,

Colin Main

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.