Repository: incubator-htrace
Updated Branches:
  refs/heads/master 6b36b1aa6 -> a303830fc


HTRACE-35. bundler: support nested js and html files (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/a303830f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/a303830f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/a303830f

Branch: refs/heads/master
Commit: a303830fc0a97e2a5ef1fb30a3e5cd318b65ef3e
Parents: 6b36b1a
Author: Colin P. Mccabe <[email protected]>
Authored: Tue Dec 30 14:36:00 2014 -0800
Committer: Colin P. Mccabe <[email protected]>
Committed: Tue Dec 30 16:10:42 2014 -0800

----------------------------------------------------------------------
 .../go/src/org/apache/htrace/bundler/bundler.go | 63 +++++++++++++-------
 .../go/src/org/apache/htrace/htraced/rest.go    |  6 +-
 htrace-core/src/web/index.html                  |  4 +-
 htrace-core/src/web/nested/nested.html          | 24 ++++++++
 4 files changed, 73 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/a303830f/htrace-core/src/go/src/org/apache/htrace/bundler/bundler.go
----------------------------------------------------------------------
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
index 7e6f542..9a71eed 100644
--- a/htrace-core/src/go/src/org/apache/htrace/bundler/bundler.go
+++ b/htrace-core/src/go/src/org/apache/htrace/bundler/bundler.go
@@ -32,6 +32,7 @@ import (
        "io/ioutil"
        "log"
        "os"
+       "path/filepath"
        "strings"
 )
 
@@ -57,6 +58,8 @@ const APACHE_HEADER = `/*
 
 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)
@@ -76,12 +79,17 @@ func fileContainsString(path, line string) (bool, error) {
        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 []os.FileInfo, dst string, dfiles []os.FileInfo) 
error {
+func deleteUnusedDst(sfiles []string, dst string, dfiles []os.FileInfo) error {
        s := 0
        for d := range dfiles {
-               fullDst := dst + string(os.PathSeparator) + dfiles[d].Name()
+               fullDst := dst + SEP + dfiles[d].Name()
                generated, err := fileContainsString(fullDst, 
GENERATED_CODE_COMMENT)
                if err != nil {
                        return err
@@ -95,11 +103,12 @@ func deleteUnusedDst(sfiles []os.FileInfo, dst string, 
dfiles []os.FileInfo) err
                        if s >= len(sfiles) {
                                break
                        }
-                       if sfiles[s].Name()+".go" == dfiles[d].Name() {
+                       tgt := sfileToDfile(sfiles[s])
+                       if tgt == dfiles[d].Name() {
                                found = true
                                break
                        }
-                       if sfiles[s].Name()+".go" > dfiles[d].Name() {
+                       if tgt > dfiles[d].Name() {
                                break
                        }
                        s++
@@ -115,17 +124,10 @@ func deleteUnusedDst(sfiles []os.FileInfo, dst string, 
dfiles []os.FileInfo) err
        return nil
 }
 
-func stripSuffixes(str string) string {
-       idx := strings.Index(str, ".")
-       if idx < 0 {
-               return str
-       }
-       return str[0:idx]
-}
-
-func createBundleFile(pkg, src, sfile, tdir string) error {
+func createBundleFile(pkg, src, sfile, dst string) error {
        // Open destination file and write header.
-       fullDst := tdir + string(os.PathSeparator) + sfile + ".go"
+       tgt := sfileToDfile(sfile)
+       fullDst := dst + SEP + tgt
        out, err := os.Create(fullDst)
        if err != nil {
                return err
@@ -143,13 +145,13 @@ func createBundleFile(pkg, src, sfile, tdir string) error 
{
        if err != nil {
                return err
        }
-       _, err = out.WriteString(fmt.Sprintf("var _ = addResource(\"/%s\", 
`\n", stripSuffixes(sfile)))
+       _, 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 + string(os.PathSeparator) + sfile
+       fullSrc := src + SEP + sfile
        in, err := os.Open(fullSrc)
        if err != nil {
                return err
@@ -186,9 +188,28 @@ func main() {
        if *dst == "" {
                log.Fatal("You must supply a dst directory for output.")
        }
-       sfiles, err := ioutil.ReadDir(*src)
+       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.Fatal("Error listing files in src directory %s: %s\n", 
*src, err.Error())
+               log.Fatal("Error listing files in src directory %s: %s\n", 
absSrc, err.Error())
        }
        var dfiles []os.FileInfo
        dfiles, err = ioutil.ReadDir(*dst)
@@ -197,11 +218,11 @@ func main() {
        }
        deleteUnusedDst(sfiles, *dst, dfiles)
        for s := range sfiles {
-               err = createBundleFile(*pkg, *src, sfiles[s].Name(), *dst)
+               err = createBundleFile(*pkg, absSrc, sfiles[s], *dst)
                if err != nil {
-                       log.Fatal("Error creating bundle file for %s in %s: 
%s\n",
+                       log.Fatalf("Error creating bundle file for %s in %s: 
%s\n",
                                sfiles[s], *dst, err.Error())
                }
-               log.Printf("Bundled %s\n", 
*dst+string(os.PathSeparator)+sfiles[s].Name())
+               log.Printf("Bundled %s as %s\n", absSrc, absSrc + SEP + 
sfileToDfile(sfiles[s]))
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/a303830f/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
----------------------------------------------------------------------
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 5b97313..b704bd2 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
@@ -27,6 +27,7 @@ import (
        "org/apache/htrace/conf"
        "org/apache/htrace/resource"
        "strconv"
+       "strings"
 )
 
 type serverInfoHandler struct {
@@ -130,8 +131,11 @@ type defaultServeHandler struct {
 }
 
 func (hand *defaultServeHandler) ServeHTTP(w http.ResponseWriter, req 
*http.Request) {
-       rsc := resource.Catalog[req.URL.Path]
+       ident := strings.TrimLeft(req.URL.Path, "/")
+       ident = strings.Replace(ident, "/", "__", -1)
+       rsc := resource.Catalog[ident]
        if rsc == "" {
+               log.Printf("failed to find entry for %s\n", ident)
                w.WriteHeader(http.StatusNotFound)
                return
        }

http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/a303830f/htrace-core/src/web/index.html
----------------------------------------------------------------------
diff --git a/htrace-core/src/web/index.html b/htrace-core/src/web/index.html
index 1cab08b..cc73492 100644
--- a/htrace-core/src/web/index.html
+++ b/htrace-core/src/web/index.html
@@ -1,3 +1,5 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
 <!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -14,8 +16,6 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
 <html xmlns="http://www.w3.org/1999/xhtml";>
 <body>
 <head><title>HTRACE</title></head>

http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/a303830f/htrace-core/src/web/nested/nested.html
----------------------------------------------------------------------
diff --git a/htrace-core/src/web/nested/nested.html 
b/htrace-core/src/web/nested/nested.html
new file mode 100644
index 0000000..18fa410
--- /dev/null
+++ b/htrace-core/src/web/nested/nested.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
+<!--
+   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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml";>
+<body>
+<head><title>HTRACE</title></head>
+Nested world.<p/>
+</body>
+</html>

Reply via email to