ngrider socket 사용 문의

classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

ngrider socket 사용 문의

jung youngseok
안녕하세요.
grinder에서 socket을 사용하여 파일 업로드 하는 스크립트를 작성하였는데
Ngrinder에서는 import socket이 되지 않아 스크립트를 사용하지 못하고 있습니다

이에 대한 해결 방안이 있으시면 조언 부탁드립니다.
감사합니다
Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

junoyoon
Administrator
nGrinder 는 grinder-3.9 를 쓰고 있고, 여기에 Jython 2.2 를 올려서 사용하고 있는데
Jython 2.2 에는 python 디폴트 라이브러리가 구현되어 있지 않습니다.
현재 nGrinder 3.2 버전에는 grinder-3.11 로 업그레이드 될꺼구요. 그러면 Jython 2.5 를 사용하게 되어, 테스트가 가능해 지시게 됩니다.

현재 버전에서 socket 을 사용하려면..
- Jython 2.5 를 사용하도록 스크립트 관리에서 lib 폴더를 만드시고 여기에 jython 2.5 standalone jar 를 올리시면 됩니다.
   * http://junoyoon.tistory.com/entry/nGrinder-record%EB%A5%BC-%EC%82%AC%EC%9A%A9%EB%AA%BB%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0 를 참고하세요.
- 아니면 python socket 대신 자바 socket 을 쓰세요.
Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

jung youngseok
네 답변 감사드립니다.

말씀하신대로 jython 2.5 standalone jar를 올려 확인해보니
import socket은 되는것으로 보입니다.

문제는 socket connect가 정상적으로 안되고 있는것 같네요..
Grinder에서는 정상 동작하는 스크립트인데 nGrinder에서는 아래 코드의 exit(2)로 빠지게 되네요..
--------------------------------------------------------------
HOST = '192.168.255.27'
PORT = 8080

    try:
      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error, msg:
      sys.stderr.write("[ERROR] %s\n" % msg[1])
      sys.exit(1)
 
    try:
      sock.connect((HOST, PORT))
    except socket.error, msg:
      sys.stderr.write("[ERROR] %s\n" % msg[1])
      sys.exit(2)
      return
-------------------------------
우선 좀더 확인해보고 잘안되면 JAVA로도 해봐야겠어요...
감사합니다~
Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

junoyoon
Administrator
혹시 SecurityMode 를 On 으로 해 놓으신거 아닌가요? 에러 메시지는 어떠한가요?
Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

jung youngseok
Security Mode에 대해서 별도로 설정하지는 않았습니다.

참고 사항으로 jython 2.5 standalone jar를 lib 폴더에 넣고 HTTPRequest를 사용할경우 다음과 같은 에러가 발생하고 있네요..
--------------------------------------
2013-01-22 14:40:17,239 ERROR Aborted run: Java exception calling TestRunner
net.grinder.scriptengine.jython.JythonScriptExecutionException: Java exception calling TestRunner
        result = login_request.POST('/api/account/login',
        File "/root/.ngrinder_agent/file-store/current/Remove_Upload.py", line 55, in LogIn
        self.LogIn(pcName, processIDX, threadIDX)
        File "/root/.ngrinder_agent/file-store/current/Remove_Upload.py", line 133, in __call__
java.net.NoRouteToHostException: No route to host
        at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.7.0_10]
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) ~[na:1.7.0_10]
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) ~[na:1.7.0_10]
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) ~[na:1.7.0_10]
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) ~[na:1.7.0_10]
        at java.net.Socket.connect(Socket.java:579) ~[na:1.7.0_10]
        at java.net.Socket.connect(Socket.java:528) ~[na:1.7.0_10]
        at java.net.Socket.<init>(Socket.java:425) ~[na:1.7.0_10]
        at java.net.Socket.<init>(Socket.java:241) ~[na:1.7.0_10]
        at HTTPClient.HTTPConnection$EstablishConnection.run(HTTPConnection.java:4082) ~[grinder-httpclient-3.9.1.jar:na]







-----------------------socket 사용해서 Upload 할경우 로그-----------------
14:56:46,010 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
14:56:46,010 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stderr]
14:56:46,010 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:56:46,011 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to TRACE
14:56:46,011 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [filtered_stderr] to Logger[ROOT]
14:56:46,012 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [filtered_stdout] to Logger[ROOT]
14:56:46,012 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [tcpproxy] to INFO
14:56:46,012 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [tcpproxy] to false
14:56:46,019 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:56:46,023 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@1d5b1dc - Registering current configuration as safe fallback point

2013-01-22 14:56:50,948 INFO  serverqa3-KN-0: starting threads
2013-01-22 14:56:50,959 INFO  serverqa3-KN-0: will shut down after 60000 ms
[ERROR] Connection refused
[ERROR] Connection refused
[ERROR] Connection refused
[ERROR] Connection refused
[ERROR] Connection refused
[ERROR] Connection refused
....반복...


이런식으로 Connection refused 가 반복적으로 호출되네요..
--------------------------------------------------
Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

junoyoon
Administrator
이건 호스트명이 없는 듯 한데요? 혹시 접속하시려는 URL의 호스트가 DNS에 등록되어 있지 않나요?

만약 그럴 경우 에이전트 PC상에 /etc/hosts 에 해당 호스트 IP와 호스트명을 등록하시거나..

아니면..

http://www.cubrid.org/wiki_ngrinder/entry/how-to-change-dns

를 참조하셔서 화면상에서 지정해 주시면 됩니다.
Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

jung youngseok
현재 테스트 환경은 hostname 없이 192.168.0.1 네트웍에서 controller / agent 들이 동작하고 있습니다.
DNS의 도움이 필요없는 상황이라..

의심이 가는 사항은 lib 폴더에 넣은 jython-standalone-2.5.3.jar 로 인해
jython lib<-> python lib 버전 문제가 발생한건 아닌지 싶기도 하고..
좀더 확인해 봐야 할것 같습니다.

Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

junoyoon
Administrator
제 생각에는 테스트에서 소켓으로 접속하려고 하는 타겟 서버의 URL 이 host 에 없는 것 같습니다.
agent 와 controller 간의 문제가 아닙니다.

일단 agent PC로 들어가셔서 telnet 테스트서버호스트명 포트 를  치셔서 접속 가능 여부를 확인하시는 게 필요할 것 같습니다.
Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

junoyoon
Administrator
In reply to this post by jung youngseok
해당 Exception을 자세히 살펴보니..

Signals that an error occurred while attempting to connect a
 * socket to a remote address and port.  Typically, the remote
 * host cannot be reached because of an intervening firewall, or
 * if an intermediate router is down.

라고 되어 있네요. 그렇다면.. 앞서 설명드린대로 telnet 으로 테스트하실 서버가 Agent 로부터 접근 가능한지 여부를 먼저 확인해 보시는 게 좋을 것 같습니다.

Firewall 이 문제일 듯 하네요.
Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

jung youngseok
다른 업무로 확인이 늦어 졌네요..
말씀하신대로 Tomcat port와의 통신이 문제였던 것으로 보입니다.
(부하테스트로 Tomcat이 다운되었던것 같습니다.)

재 부팅 후 socket 으로 데이터 전달이 정상적으로 되고 있네요.
문의사항에 적극적으로 답변해 주셔서 감사합니다.



= 결론 =
Lib 폴더에 jython-standalone-2.5.3.jar 올려 놓으시면 socket 사용이 가능합니다.

Reply | Threaded
Open this post in threaded view
|

Re: ngrider socket 사용 문의

junoyoon
Administrator
1주내에 배포될 3.1.1 은 jython 2.5.3 이 디폴트로 포함됩니다.
참고하세요.