Add segment integration

This commit is contained in:
marcos
2017-12-01 17:37:20 -03:00
parent 2ef157f4cf
commit efaa37e0ad
5 changed files with 69 additions and 5 deletions

View File

@@ -39,6 +39,8 @@ var DockerClientID, DockerClientSecret string
var PlaygroundDomain string
var SegmentId string
func ParseFlags() {
flag.StringVar(&LetsEncryptCertsDir, "letsencrypt-certs-dir", "/certs", "Path where let's encrypt certs will be stored")
flag.BoolVar(&UseLetsEncrypt, "letsencrypt-enable", false, "Enabled let's encrypt tls certificates")
@@ -74,6 +76,8 @@ func ParseFlags() {
flag.StringVar(&PlaygroundDomain, "playground-domain", "localhost", "Domain to use for the playground")
flag.StringVar(&AdminToken, "admin-token", "", "Token to validate admin user for admin endpoints")
flag.StringVar(&SegmentId, "segment-id", "", "Segment id to post metrics")
flag.Parse()
SecureCookie = securecookie.New([]byte(CookieHashKey), []byte(CookieBlockKey))

View File

@@ -1,9 +1,12 @@
package handlers
import (
"bytes"
"context"
"crypto/tls"
"fmt"
"html/template"
"io/ioutil"
"log"
"net/http"
"time"
@@ -22,6 +25,7 @@ import (
var core pwd.PWDApi
var e event.EventApi
var landings = map[string][]byte{}
type HandlerExtender func(h *mux.Router)
@@ -31,6 +35,8 @@ func Bootstrap(c pwd.PWDApi, ev event.EventApi) {
}
func Register(extend HandlerExtender) {
initLandings()
r := mux.NewRouter()
corsRouter := mux.NewRouter()
@@ -143,3 +149,29 @@ func Register(extend HandlerExtender) {
log.Fatal(httpServer.ListenAndServe())
}
}
func initLandings() {
pgs, err := core.PlaygroundList()
if err != nil {
log.Fatal("Error getting playgrounds to initialize landings")
}
for _, p := range pgs {
if p.AssetsDir == "" {
p.AssetsDir = "default"
}
var b bytes.Buffer
t, err := template.New("landing.html").Delims("[[", "]]").ParseFiles(fmt.Sprintf("./www/%s/landing.html", p.AssetsDir))
if err != nil {
log.Fatalf("Error parsing template %v", err)
}
if err := t.Execute(&b, struct{ SegmentId string }{config.SegmentId}); err != nil {
log.Fatalf("Error executing template %v", err)
}
landingBytes, err := ioutil.ReadAll(&b)
if err != nil {
log.Fatalf("Error reading template bytes %v", err)
}
landings[p.Id] = landingBytes
}
}

View File

@@ -46,10 +46,6 @@ func Landing(rw http.ResponseWriter, req *http.Request) {
return
}
index := filepath.Join("./www", playground.AssetsDir, "/landing.html")
if _, err := os.Stat(index); os.IsNotExist(err) {
index = "./www/default/landing.html"
}
rw.Write(landings[playground.Id])
http.ServeFile(rw, req, index)
}

View File

@@ -64,6 +64,16 @@
</footer>
</div>
[[ if .SegmentId ]]
<script>
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="4.0.0";
analytics.load('[[ .SegmentId ]]');
analytics.page();
}}();
</script>
[[ end ]]
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
@@ -79,9 +89,15 @@
method: 'GET',
url: '/users/me'
}).then(function(response) {
[[ if .SegmentId ]]
analytics.identify(response.data.email);
[[ end ]]
$scope.user = response.data;
$scope.loggedIn = true;
}, function(response) {
[[ if .SegmentId ]]
analytics.identify();
[[ end ]]
console.log('ERROR', response);
$scope.user = null;
$scope.loggedIn = false;

View File

@@ -64,6 +64,16 @@
</footer>
</div>
[[ if .SegmentId ]]
<script>
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="4.0.0";
analytics.load('[[ .SegmentId ]]');
analytics.page();
}}();
</script>
[[ end ]]
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
@@ -79,9 +89,15 @@
method: 'GET',
url: '/users/me'
}).then(function(response) {
[[ if .SegmentId ]]
analytics.identify(response.data.email);
[[ end ]]
$scope.user = response.data;
$scope.loggedIn = true;
}, function(response) {
[[ if .SegmentId ]]
analytics.identify();
[[ end ]]
console.log('ERROR', response);
$scope.user = null;
$scope.loggedIn = false;