HTRACE-122. Remove bundler
diff --git a/htrace-core/src/go/gobuild.sh b/htrace-core/src/go/gobuild.sh
index 91cefbf..40cb4bf 100755
--- a/htrace-core/src/go/gobuild.sh
+++ b/htrace-core/src/go/gobuild.sh
@@ -95,9 +95,6 @@
# Download dependencies into the build directory.
echo "godep restore..."
godep restore || die "failed to set up dependencies"
- go run "$SCRIPT_DIR/src/org/apache/htrace/bundler/bundler.go" \
- --src="$SCRIPT_DIR/../web/" --dst="$SCRIPT_DIR/src/org/apache/htrace/resource/" \
- || die "bundler failed"
# Discover the git version
GIT_VERSION=$(git rev-parse HEAD)
diff --git a/htrace-core/src/go/src/org/apache/htrace/bundler/bundler.go b/htrace-core/src/go/src/org/apache/htrace/bundler/bundler.go
deleted file mode 100644
index 11c3292..0000000
--- a/htrace-core/src/go/src/org/apache/htrace/bundler/bundler.go
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * 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 main
-
-//
-// The bundler turns files into resources contained in go code.
-//
-// This is useful for serving HTML and Javascript files from a self-contained binary.
-//
-
-import (
- "bufio"
- "flag"
- "fmt"
- "io/ioutil"
- "log"
- "os"
- "path/filepath"
- "strings"
-)
-
-const APACHE_HEADER = `/*
- * 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.
- */
-`
-
-const GENERATED_CODE_COMMENT = "// THIS IS GENERATED CODE. DO NOT EDIT."
-
-var SEP string = string(os.PathSeparator)
-
-// Return true if a file contains a given string.
-func fileContainsString(path, line string) (bool, error) {
- file, err := os.Open(path)
- if err != nil {
- return false, err
- }
- defer file.Close()
- scanner := bufio.NewScanner(file)
- for scanner.Scan() {
- if strings.Contains(scanner.Text(), line) {
- return true, nil
- }
- }
- if err := scanner.Err(); err != nil {
- return false, err
- }
- return false, nil
-}
-
-// Converts a source file path to a destination file path
-func sfileToDfile(sfile string) string {
- return strings.Replace(sfile, SEP, "__", -1) + ".go"
-}
-
-// Delete generated files that are in dfiles but not sfiles.
-// sfiles and dfiles must be sorted by file name.
-func deleteUnusedDst(sfiles []string, dst string, dfiles []os.FileInfo) error {
- s := 0
- for d := range dfiles {
- fullDst := dst + SEP + dfiles[d].Name()
- generated, err := fileContainsString(fullDst, GENERATED_CODE_COMMENT)
- if err != nil {
- return err
- }
- if !generated {
- // Skip this destination file, since it is not generated.
- continue
- }
- found := false
- for {
- if s >= len(sfiles) {
- break
- }
- tgt := sfileToDfile(sfiles[s])
- if tgt == dfiles[d].Name() {
- found = true
- break
- }
- if tgt > dfiles[d].Name() {
- break
- }
- s++
- }
- if !found {
- log.Printf("Removing %s\n", fullDst)
- err := os.Remove(fullDst)
- if err != nil {
- return err
- }
- }
- }
- return nil
-}
-
-func createBundleFile(pkg, src, sfile, dst string) error {
- // Open destination file and write header.
- tgt := sfileToDfile(sfile)
- fullDst := dst + SEP + tgt
- out, err := os.Create(fullDst)
- if err != nil {
- return err
- }
- defer out.Close()
- _, err = out.WriteString(APACHE_HEADER)
- if err != nil {
- return err
- }
- _, err = out.WriteString("\n" + GENERATED_CODE_COMMENT + "\n")
- if err != nil {
- return err
- }
- _, err = out.WriteString(fmt.Sprintf("\npackage %s\n", pkg))
- if err != nil {
- return err
- }
- _, err = out.WriteString(fmt.Sprintf("var _ = addResource(\"%s\", `\n", tgt[:len(tgt)-3]))
- if err != nil {
- return err
- }
-
- // Open source file and create scanner.
- fullSrc := src + SEP + sfile
- in, err := os.Open(fullSrc)
- if err != nil {
- return err
- }
- defer in.Close()
- reader := bufio.NewReader(in)
- scanner := bufio.NewScanner(reader)
- for scanner.Scan() {
- str := strings.Replace(scanner.Text(), "`", "` + \"`\" + `", -1) + "\n"
- // Avoid "Unicode (UTF-8) BOM in middle of file" error.
- str = strings.Replace(str, "\uFEFF", "` + \"\\uFEFF\" + `", -1)
- _, err := out.WriteString(str)
- if err != nil {
- return err
- }
- }
- _, err = out.WriteString("`)\n")
- if err != nil {
- return err
- }
- err = out.Close()
- if err != nil {
- return err
- }
- return nil
-}
-
-var src = flag.String("src", "", "Source path for bundled resources.")
-var dst = flag.String("dst", "", "Destination path for bundled resources.")
-var pkg = flag.String("pkg", "resource", "Package name to use for bundled resources")
-
-func main() {
- flag.Parse()
- if *src == "" {
- log.Fatal("You must supply a src directory to bundle.")
- }
- if *dst == "" {
- log.Fatal("You must supply a dst directory for output.")
- }
- sfiles := make([]string, 0, 32)
- absSrc, err := filepath.Abs(filepath.Clean(*src))
- if err != nil {
- log.Fatalf("Error getting absolute path for %s: %s\n", *src, err.Error())
- }
- err = filepath.Walk(absSrc, func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return err
- }
- if info.IsDir() {
- return nil
- }
- var suffix string
- suffix, err = filepath.Rel(absSrc, path)
- if err != nil {
- return err
- }
- sfiles = append(sfiles, suffix)
- return nil
- })
- if err != nil {
- log.Fatalf("Error listing files in src directory %s: %s\n", absSrc, err.Error())
- }
- var dfiles []os.FileInfo
- dfiles, err = ioutil.ReadDir(*dst)
- if err != nil {
- log.Fatalf("Error listing files in output directory %s: %s\n", *dst, err.Error())
- }
- deleteUnusedDst(sfiles, *dst, dfiles)
- for s := range sfiles {
- err = createBundleFile(*pkg, absSrc, sfiles[s], *dst)
- if err != nil {
- log.Fatalf("Error creating bundle file for %s in %s: %s\n",
- sfiles[s], *dst, err.Error())
- }
- log.Printf("Bundled %s as %s\n", absSrc, *dst+SEP+sfileToDfile(sfiles[s]))
- }
-}
diff --git a/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go b/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
index dc9a061..58486f1 100644
--- a/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
+++ b/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
@@ -31,6 +31,7 @@
"org/apache/htrace/common"
"org/apache/htrace/conf"
"org/apache/htrace/resource"
+ "os"
"path/filepath"
"strconv"
"strings"
@@ -292,7 +293,17 @@
span.Handle("/{id}/children", findChildrenH).Methods("GET")
// Default Handler. This will serve requests for static requests.
- r.PathPrefix("/").Handler(&defaultServeHandler{lg: rsv.lg}).Methods("GET")
+ webdir := os.Getenv("HTRACED_WEB_DIR")
+ if webdir == "" {
+ webdir, err = filepath.Abs(filepath.Join(filepath.Dir(os.Args[0]), "..", "..", "web"))
+
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ rsv.lg.Infof("Serving static files from %s\n.", webdir)
+ r.PathPrefix("/").Handler(http.FileServer(http.Dir(webdir))).Methods("GET")
// Log an error message for unknown non-GET requests.
r.PathPrefix("/").Handler(&logErrorHandler{lg: rsv.lg})