diff options
Diffstat (limited to '')
-rw-r--r-- | src/jaegertracing/thrift/test/haxe/src/Arguments.hx | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/src/jaegertracing/thrift/test/haxe/src/Arguments.hx b/src/jaegertracing/thrift/test/haxe/src/Arguments.hx new file mode 100644 index 000000000..cc1074987 --- /dev/null +++ b/src/jaegertracing/thrift/test/haxe/src/Arguments.hx @@ -0,0 +1,335 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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; + +import org.apache.thrift.*; +import org.apache.thrift.protocol.*; +import org.apache.thrift.transport.*; +import org.apache.thrift.server.*; +import org.apache.thrift.meta_data.*; +import haxe.io.Path; + +using StringTools; + + +enum ProtocolType { + binary; + json; + compact; +} + +enum EndpointTransport { + socket; + http; +} + +enum ServerType { + simple; + /* + threadpool; + threaded; + nonblocking; + */ +} + + +class Arguments +{ + public var printHelpOnly(default,null) : Bool = false; + + public var server(default,null) : Bool = false; + public var servertype(default,null) : ServerType = simple; + + public var host(default,null) : String = "localhost"; + public var port(default,null) : Int = 9090; + + public var protocol(default,null) : ProtocolType = binary; + public var transport(default,null) : EndpointTransport = socket; + public var framed(default,null) : Bool = false; + public var buffered(default,null) : Bool = false; + + public var numIterations(default,null) : Int = 1; + public var numThreads(default,null) : Int = 1; + public var skipSpeedTest(default,null) : Bool = false; + + + public function new() { + #if sys + #if !phpwebserver + try { + ParseArgs(); + } catch (e : String) { + trace(GetHelp()); + throw e; + } + #else + //forcing server + server = true; + transport = http; + #end + #else + trace("WN: Platform does not support program arguments, using defaults."); + #end + } + + #if sys + + private static function GetHelp() : String { + var sProg = Path.withoutDirectory( Sys.executablePath()); + return "\n" + +sProg+" [client|server] [options]\n" + +"\n" + +"Modus: Either client or server, the default is client.\n" + +"\n" + +"Common options:\n" + +" -h [ --help ] produce help message\n" + +" --port arg (=9090) Port number to listen / connect to\n" + /* not supported yet + +" --domain-socket arg Unix Domain Socket (e.g. /tmp/ThriftTest.thrift)\n" + +" --named-pipe arg Windows Named Pipe (e.g. MyThriftPipe)\n" + */ + +" --protocol arg (=binary) protocol: binary, compact, json\n" + /* not supported yet + +" --ssl Encrypted Transport using SSL\n" + */ + +"\n" + +"Server only options:\n" + +" --transport arg (=sockets) Transport: buffered, framed, http, anonpipe\n" + /* not supported yet + +" --processor-events processor-events\n" + +" --server-type arg (=simple) type of server, \"simple\", \"thread-pool\", \n" + +" \"threaded\", or \"nonblocking\"\n" + +" -n [ --workers ] arg (=4) Number of thread pools workers. Only valid for \n" + +" thread-pool server type\n" + */ + +"\n" + +"Client only options:\n" + +" --host arg (=localhost) Host to connect\n" + +" --transport arg (=sockets) Transport: buffered, framed, http, evhttp\n" + /* not supported yet + +" --anon-pipes hRead hWrite Windows Anonymous Pipes pair (handles)\n" + */ + +" -n [ --testloops ] arg (=1) Number of Tests\n" + +" -t [ --threads ] arg (=1) Number of Test threads\n" + +" --skip-speed-test Skip the speed test\n" + +"\n" + +"All arguments are optional.\n" + ; + } + + + private function ParseArgs() : Void { + + var args = Sys.args().copy(); + if( (args == null) || (args.length <= 0)) { + server = false; + numThreads = 1; + return; + } + + var arg = args.shift(); + if ( arg == "client") { + server = false; + numThreads = 1; + } + else if ( arg == "server") { + server = true; + numThreads = 4; + } + else if ( (arg == "-h") || (arg == "--help")) { + // -h [ --help ] produce help message + Sys.println( GetHelp()); + printHelpOnly = true; + return; + } + else { + throw "First argument must be 'server' or 'client'"; + } + + + while( args.length > 0) { + arg = args.shift(); + + if ( (arg == "-h") || (arg == "--help")) { + // -h [ --help ] produce help message + Sys.println( GetHelp()); + printHelpOnly = true; + return; + } + else if (arg == "--port") { + // --port arg (=9090) Port number to listen + arg = args.shift(); + var tmp = Std.parseInt(arg); + if( tmp != null) { + port = tmp; + } else { + throw "Invalid port number "+arg; + } + } + else if (arg == "--domain-socket") { + // --domain-socket arg Unix Domain Socket (e.g. /tmp/ThriftTest.thrift) + throw "domain sockets not supported yet"; + } + else if (arg == "--named-pipe") { + // --named-pipe arg Windows Named Pipe (e.g. MyThriftPipe) + throw "named pipes not supported yet"; + } + else if (arg == "--protocol") { + // --protocol arg (=binary) protocol: binary, compact, json + arg = args.shift(); + if( arg == "binary") { + protocol = binary; + } else if( arg == "compact") { + protocol = compact; + } else if( arg == "json") { + protocol = json; + } else { + InvalidArg(arg); + } + } + else if (arg == "--ssl") { + // --ssl Encrypted Transport using SSL + throw "SSL not supported yet"; + } + else { + //Server only options: + if( server) { + ParseServerArgument( arg, args); + } else { + ParseClientArgument( arg, args); + } + } + } + } + + + private function ParseServerArgument( arg : String, args : Array<String>) : Void { + if (arg == "--transport") { + // --transport arg (=sockets) Transport: buffered, framed, http, anonpipe + arg = args.shift(); + if( arg == "buffered") { + buffered = true; + } else if( arg == "framed") { + framed = true; + } else if( arg == "http") { + transport = http; + } else if( arg == "anonpipe") { + throw "Anon pipes transport not supported yet"; + } else { + InvalidArg(arg); + } + } + else if (arg == "--processor-events") { + throw "Processor events not supported yet"; + } + else if (arg == "--server-type") { + // --server-type arg (=simple) type of server, + // one of "simple", "thread-pool", "threaded", "nonblocking" + arg = args.shift(); + if( arg == "simple") { + servertype = simple; + } else if( arg == "thread-pool") { + throw arg+" server not supported yet"; + } else if( arg == "threaded") { + throw arg+" server not supported yet"; + } else if( arg == "nonblocking") { + throw arg+" server not supported yet"; + } else { + InvalidArg(arg); + } + } + else if ((arg == "-n") || (arg == "--workers")) { + // -n [ --workers ] arg (=4) Number of thread pools workers. Only valid for + // thread-pool server type + arg = args.shift(); + var tmp = Std.parseInt(arg); + if( tmp != null) { + numThreads = tmp; + } else{ + throw "Invalid number "+arg; + } + } + else { + InvalidArg(arg); + } + } + + + private function ParseClientArgument( arg : String, args : Array<String>) : Void { + if (arg == "--host") { + // --host arg (=localhost) Host to connect + host = args.shift(); + } + else if (arg == "--transport") { + // --transport arg (=sockets) Transport: buffered, framed, http, evhttp + arg = args.shift(); + if( arg == "buffered") { + buffered = true; + } else if( arg == "framed") { + framed = true; + } else if( arg == "http") { + transport = http; + } else if( arg == "evhttp") { + throw "evhttp transport not supported yet"; + } else { + InvalidArg(arg); + } + } + else if (arg == "--anon-pipes") { + // --anon-pipes hRead hWrite Windows Anonymous Pipes pair (handles) + throw "Anon pipes transport not supported yet"; + } + else if ((arg == "-n") || (arg == "--testloops")) { + // -n [ --testloops ] arg (=1) Number of Tests + arg = args.shift(); + var tmp = Std.parseInt(arg); + if( tmp != null) { + numIterations = tmp; + } else { + throw "Invalid number "+arg; + } + } + else if ((arg == "-t") || (arg == "--threads")) { + // -t [ --threads ] arg (=1) Number of Test threads + arg = args.shift(); + var tmp = Std.parseInt(arg); + if( tmp != null) { + numThreads = tmp; + } else { + throw "Invalid number "+arg; + } + } + else if (arg == "--skip-speed-test") { + // --skip-speed-test Skip the speed test + skipSpeedTest = true; + } + else { + InvalidArg(arg); + } + } + + + #end + + + private function InvalidArg( arg : String) : Void { + throw 'Invalid argument $arg'; + } +} |