You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@htrace.apache.org by cm...@apache.org on 2015/01/28 07:58:57 UTC
incubator-htrace git commit: HTRACE-91. Add usage to htraced,
fix htrace usage and support HTRACED_CONF_DIR (cmccabe)
Repository: incubator-htrace
Updated Branches:
refs/heads/master f0182729e -> df0927283
HTRACE-91. Add usage to htraced, fix htrace usage and support HTRACED_CONF_DIR (cmccabe)
Project: http://git-wip-us.apache.org/repos/asf/incubator-htrace/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-htrace/commit/df092728
Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/df092728
Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/df092728
Branch: refs/heads/master
Commit: df09272838553293865110fb9c90a897374195ac
Parents: f018272
Author: Colin P. Mccabe <cm...@apache.org>
Authored: Tue Jan 27 20:30:09 2015 -0800
Committer: Colin P. Mccabe <cm...@apache.org>
Committed: Tue Jan 27 22:58:30 2015 -0800
----------------------------------------------------------------------
.../src/go/src/org/apache/htrace/conf/config.go | 17 +++++++---
.../src/org/apache/htrace/conf/config_keys.go | 6 +++-
.../src/org/apache/htrace/conf/config_test.go | 15 +++++++++
.../src/go/src/org/apache/htrace/htrace/cmd.go | 33 +++++++++++++-------
.../go/src/org/apache/htrace/htraced/htraced.go | 33 +++++++++++++++++++-
5 files changed, 86 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/df092728/htrace-core/src/go/src/org/apache/htrace/conf/config.go
----------------------------------------------------------------------
diff --git a/htrace-core/src/go/src/org/apache/htrace/conf/config.go b/htrace-core/src/go/src/org/apache/htrace/conf/config.go
index d905322..4453c44 100644
--- a/htrace-core/src/go/src/org/apache/htrace/conf/config.go
+++ b/htrace-core/src/go/src/org/apache/htrace/conf/config.go
@@ -25,6 +25,7 @@ import (
"io"
"log"
"os"
+ "path/filepath"
"strconv"
"strings"
"syscall"
@@ -65,10 +66,19 @@ type Builder struct {
Argv []string
}
+func getHTracedConfDirs() []string {
+ confDir := os.Getenv("HTRACED_CONF_DIR")
+ paths := filepath.SplitList(confDir)
+ if len(paths) < 1 {
+ return []string{"."}
+ }
+ return paths
+}
+
// Load a configuration from the application's argv, configuration file, and the standard
// defaults.
-func LoadApplicationConfig(values map[string]string) *Config {
- reader, err := openFile(CONFIG_FILE_NAME, []string{"."})
+func LoadApplicationConfig() *Config {
+ reader, err := openFile(CONFIG_FILE_NAME, getHTracedConfDirs())
if err != nil {
log.Fatal("Error opening config file: " + err.Error())
}
@@ -79,9 +89,6 @@ func LoadApplicationConfig(values map[string]string) *Config {
}
bld.Argv = os.Args[1:]
bld.Defaults = DEFAULTS
- if values != nil {
- bld.Values = values
- }
var cnf *Config
cnf, err = bld.Build()
if err != nil {
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/df092728/htrace-core/src/go/src/org/apache/htrace/conf/config_keys.go
----------------------------------------------------------------------
diff --git a/htrace-core/src/go/src/org/apache/htrace/conf/config_keys.go b/htrace-core/src/go/src/org/apache/htrace/conf/config_keys.go
index 5e359f7..b22e312 100644
--- a/htrace-core/src/go/src/org/apache/htrace/conf/config_keys.go
+++ b/htrace-core/src/go/src/org/apache/htrace/conf/config_keys.go
@@ -35,7 +35,11 @@ var PATH_SEP string = fmt.Sprintf("%c", os.PathSeparator)
var PATH_LIST_SEP string = fmt.Sprintf("%c", os.PathListSeparator)
// The name of the XML configuration file to look for.
-const CONFIG_FILE_NAME = "htraced.xml"
+const CONFIG_FILE_NAME = "htraced-conf.xml"
+
+// An environment variable containing a list of paths to search for the
+// configuration file in.
+const HTRACED_CONF_DIR = "HTRACED_CONF_DIR"
// The web address to start the REST server on.
const HTRACE_WEB_ADDRESS = "web.address"
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/df092728/htrace-core/src/go/src/org/apache/htrace/conf/config_test.go
----------------------------------------------------------------------
diff --git a/htrace-core/src/go/src/org/apache/htrace/conf/config_test.go b/htrace-core/src/go/src/org/apache/htrace/conf/config_test.go
index b16abb4..1e94ed7 100644
--- a/htrace-core/src/go/src/org/apache/htrace/conf/config_test.go
+++ b/htrace-core/src/go/src/org/apache/htrace/conf/config_test.go
@@ -20,6 +20,7 @@
package conf
import (
+ "os"
"strings"
"testing"
)
@@ -119,3 +120,17 @@ func TestXmlConfigurationFile(t *testing.T) {
t.Fatal()
}
}
+
+// Test our handling of the HTRACE_CONF_DIR environment variable.
+func TestGetHTracedConfDirs(t *testing.T) {
+ os.Setenv("HTRACED_CONF_DIR", "")
+ dirs := getHTracedConfDirs()
+ if len(dirs) != 1 || dirs[0] != "." {
+ t.Fatal()
+ }
+ os.Setenv("HTRACED_CONF_DIR", "/foo/bar:/baz")
+ dirs = getHTracedConfDirs()
+ if len(dirs) != 2 || dirs[0] != "/foo/bar" || dirs[1] != "/baz" {
+ t.Fatal()
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/df092728/htrace-core/src/go/src/org/apache/htrace/htrace/cmd.go
----------------------------------------------------------------------
diff --git a/htrace-core/src/go/src/org/apache/htrace/htrace/cmd.go b/htrace-core/src/go/src/org/apache/htrace/htrace/cmd.go
index 8539914..f1e765f 100644
--- a/htrace-core/src/go/src/org/apache/htrace/htrace/cmd.go
+++ b/htrace-core/src/go/src/org/apache/htrace/htrace/cmd.go
@@ -39,20 +39,31 @@ const EXIT_FAILURE = 1
var verbose *bool
+const USAGE = `The Apache HTrace command-line tool. This tool retrieves and modifies settings and
+other data on a running htraced daemon.
+
+If we find an ` + conf.CONFIG_FILE_NAME + ` configuration file in the list of directories
+specified in ` + conf.HTRACED_CONF_DIR + `, we will use that configuration; otherwise,
+the defaults will be used.
+`
+
func main() {
+ // Load htraced configuration
+ cnf := conf.LoadApplicationConfig()
+
// Parse argv
- app := kingpin.New("htrace", "The HTrace tracing utility.")
- addr := app.Flag("addr", "Server address.").
- Default(conf.DEFAULTS[conf.HTRACE_WEB_ADDRESS]).TCP()
+ app := kingpin.New(os.Args[0], USAGE)
+ app.Flag("Dmy.key", "Set configuration key 'my.key' to 'my.value'. Replace 'my.key' "+
+ "with any key you want to set.").Default("my.value").String()
+ addr := app.Flag("addr", "Server address.").String()
verbose = app.Flag("verbose", "Verbose.").Default("false").Bool()
version := app.Command("version", "Print the version of this program.")
serverInfo := app.Command("serverInfo", "Print information retrieved from an htraced server.")
findSpan := app.Command("findSpan", "Print information about a trace span with a given ID.")
- findSpanId := findSpan.Flag("id", "Span ID to find, as a signed decimal 64-bit "+
- "number").Required().Uint64()
+ findSpanId := findSpan.Arg("id", "Span ID to find. Example: 0x123456789abcdef").Required().Uint64()
findChildren := app.Command("findChildren", "Print out the span IDs that are children of a given span ID.")
- parentSpanId := findChildren.Flag("id", "Span ID to print children for, as a signed decimal 64-bit "+
- "number").Required().Uint64()
+ parentSpanId := findChildren.Arg("id", "Span ID to print children for. Example: 0x123456789abcdef").
+ Required().Uint64()
childLim := findChildren.Flag("lim", "Maximum number of child IDs to print.").Default("20").Int()
writeSpans := app.Command("writeSpans", "Write spans to the server in JSON form.")
spanJson := writeSpans.Flag("json", "The JSON span data to write to the server.").String()
@@ -60,10 +71,10 @@ func main() {
"A file containing JSON span data to write to the server.").String()
cmd := kingpin.MustParse(app.Parse(os.Args[1:]))
- // Load htraced configuration
- values := make(map[string]string)
- values[conf.HTRACE_WEB_ADDRESS] = (*addr).String()
- cnf := conf.LoadApplicationConfig(values)
+ // Add the command-line settings into the configuration.
+ if *addr != "" {
+ cnf = cnf.Clone(conf.HTRACE_WEB_ADDRESS, *addr)
+ }
// Create HTrace client
hcl, err := htrace.NewClient(cnf)
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/df092728/htrace-core/src/go/src/org/apache/htrace/htraced/htraced.go
----------------------------------------------------------------------
diff --git a/htrace-core/src/go/src/org/apache/htrace/htraced/htraced.go b/htrace-core/src/go/src/org/apache/htrace/htraced/htraced.go
index 4694789..d2cbafc 100644
--- a/htrace-core/src/go/src/org/apache/htrace/htraced/htraced.go
+++ b/htrace-core/src/go/src/org/apache/htrace/htraced/htraced.go
@@ -20,17 +20,48 @@
package main
import (
+ "fmt"
"org/apache/htrace/common"
"org/apache/htrace/conf"
"os"
+ "strings"
"time"
)
var RELEASE_VERSION string
var GIT_VERSION string
+const USAGE = `htraced: the HTrace server daemon.
+
+htraced receives trace spans sent from HTrace clients. It exposes a REST
+interface which others can query. It also runs a web server with a graphical
+user interface. htraced stores its span data in levelDB files on the local
+disks.
+
+Usage:
+--help: this help message
+
+-Dk=v: set configuration key 'k' to value 'v'
+For example -Dweb.address=127.0.0.1:8080 sets the web address to localhost,
+port 8080.
+
+-Dk: set configuration key 'k' to 'true'
+
+Normally, configuration options should be set in the ` + conf.CONFIG_FILE_NAME + `
+configuration file. We find this file by searching the paths in the
+` + conf.HTRACED_CONF_DIR + `. The command-line options are just an alternate way
+of setting configuration when launching the daemon.
+`
+
func main() {
- cnf := conf.LoadApplicationConfig(nil)
+ for idx := range os.Args {
+ arg := os.Args[idx]
+ if strings.HasPrefix(arg, "--h") || strings.HasPrefix(arg, "-h") {
+ fmt.Fprintf(os.Stderr, USAGE)
+ os.Exit(0)
+ }
+ }
+ cnf := conf.LoadApplicationConfig()
lg := common.NewLogger("main", cnf)
defer lg.Close()
store, err := CreateDataStore(cnf, nil)