├── VERSION
├── agent
├── config.go
├── context.go
├── agent_test.go
├── saver.go
├── rpc_client_test.go
├── msg_queue.go
├── options.go
├── monitor.go
├── loader.go
├── http.go
├── rpc_client.go
└── agent.go
├── dashboard
├── template
│ ├── public_html
│ │ ├── system.html
│ │ ├── common
│ │ │ ├── layout.html
│ │ │ ├── footer.html
│ │ │ ├── header.html
│ │ │ └── left.html
│ │ ├── index.html
│ │ ├── var.html
│ │ ├── heartbeat.html
│ │ └── agent.html
│ └── asset
│ │ ├── css
│ │ ├── .DS_Store
│ │ ├── sb-admin-rtl.css
│ │ ├── morris.css
│ │ └── sb-admin.css
│ │ ├── js
│ │ ├── .DS_Store
│ │ ├── jquery.flot.resize.js
│ │ ├── jquery.flot.tooltip.min.js
│ │ ├── morris-data.js
│ │ └── excanvas.min.js
│ │ └── font-awesome
│ │ ├── fonts
│ │ ├── FontAwesome.otf
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.ttf
│ │ └── fontawesome-webfont.woff
│ │ ├── less
│ │ ├── fixed-width.less
│ │ ├── bordered-pulled.less
│ │ ├── larger.less
│ │ ├── core.less
│ │ ├── list.less
│ │ ├── font-awesome.less
│ │ ├── stacked.less
│ │ ├── rotated-flipped.less
│ │ ├── spinning.less
│ │ ├── path.less
│ │ ├── mixins.less
│ │ └── variables.less
│ │ └── scss
│ │ ├── _fixed-width.scss
│ │ ├── _bordered-pulled.scss
│ │ ├── _larger.scss
│ │ ├── _core.scss
│ │ ├── _list.scss
│ │ ├── font-awesome.scss
│ │ ├── _stacked.scss
│ │ ├── _spinning.scss
│ │ ├── _path.scss
│ │ ├── _rotated-flipped.scss
│ │ ├── _mixins.scss
│ │ └── _variables.scss
├── context.go
├── options.go
├── dashboard_test.go
├── dashboard.go
└── http.go
├── registry
├── frontend
│ ├── leveldb.go
│ ├── empty.go
│ ├── file_test.go
│ ├── shm.go
│ └── file.go
├── .DS_Store
├── frontend.go
├── backend.go
└── backend
│ ├── etcd_test.go
│ └── etcd.go
├── cmd
├── .DS_Store
├── monitor
│ ├── monitor.toml
│ └── main.go
├── dashboard
│ ├── dashboard.toml
│ └── main.go
└── agent
│ ├── agent.toml
│ └── main.go
├── sdk
├── .DS_Store
├── goconfd_test.go
└── goconfd.go
├── store
├── .DS_Store
├── store.go
├── db
│ ├── adapter.go
│ └── mongo
│ │ ├── mongo_test.go
│ │ └── mongo.go
└── types
│ └── types.go
├── documents
└── img0.png
├── monitor
├── .DS_Store
├── context.go
├── options.go
├── rpc.go
├── monitor.go
└── service.go
├── libs
├── util
│ ├── host.go
│ ├── wait_group_wrapper.go
│ ├── string_array.go
│ ├── key_test.go
│ ├── file_test.go
│ ├── key.go
│ └── file.go
├── version
│ └── binary.go
├── shm
│ ├── common_test.go
│ ├── shm_test.go
│ ├── common.go
│ └── shm.go
├── reflect
│ ├── tag.go
│ └── tag_test.go
├── kv
│ ├── json.go
│ ├── kv.go
│ ├── kv_test.go
│ └── php.go
├── node
│ └── node.go
├── client
│ ├── selector_test.go
│ ├── selector.go
│ └── rpc.go
├── try
│ └── try.go
├── protocol
│ └── protocol.go
├── net2
│ ├── net_test.go
│ └── net.go
└── ringhash
│ └── ringhash.go
├── run.sh
├── .vscode
└── launch.json
├── Makefile
└── README.md
/VERSION:
--------------------------------------------------------------------------------
1 | v0.1.1
--------------------------------------------------------------------------------
/agent/config.go:
--------------------------------------------------------------------------------
1 | package agent
2 |
--------------------------------------------------------------------------------
/dashboard/template/public_html/system.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/registry/frontend/leveldb.go:
--------------------------------------------------------------------------------
1 | package frontend
2 |
--------------------------------------------------------------------------------
/cmd/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/cmd/.DS_Store
--------------------------------------------------------------------------------
/sdk/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/sdk/.DS_Store
--------------------------------------------------------------------------------
/store/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/store/.DS_Store
--------------------------------------------------------------------------------
/documents/img0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/documents/img0.png
--------------------------------------------------------------------------------
/monitor/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/monitor/.DS_Store
--------------------------------------------------------------------------------
/registry/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/registry/.DS_Store
--------------------------------------------------------------------------------
/monitor/context.go:
--------------------------------------------------------------------------------
1 | package monitor
2 |
3 | type Context struct {
4 | Monitor *Monitor
5 | }
6 |
--------------------------------------------------------------------------------
/dashboard/context.go:
--------------------------------------------------------------------------------
1 | package dashboard
2 |
3 | type Context struct {
4 | Dashboard *Dashboard
5 | }
6 |
--------------------------------------------------------------------------------
/agent/context.go:
--------------------------------------------------------------------------------
1 | package agent
2 |
3 | import ()
4 |
5 | type Context struct {
6 | Agent *Agent
7 | }
8 |
--------------------------------------------------------------------------------
/dashboard/template/asset/css/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/dashboard/template/asset/css/.DS_Store
--------------------------------------------------------------------------------
/dashboard/template/asset/js/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/dashboard/template/asset/js/.DS_Store
--------------------------------------------------------------------------------
/cmd/monitor/monitor.toml:
--------------------------------------------------------------------------------
1 | db_url="127.0.0.1:27017"
2 | db_name="goconfd"
3 | hosts = "127.0.0.1:2379" #etcd hosts
4 | heartbeat_interval=30
--------------------------------------------------------------------------------
/libs/util/host.go:
--------------------------------------------------------------------------------
1 | package util
2 |
3 | import (
4 | "os"
5 | )
6 |
7 | func GetHostName() (string, error) {
8 | return os.Hostname()
9 | }
10 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/dashboard/template/asset/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/dashboard/template/asset/css/sb-admin-rtl.css:
--------------------------------------------------------------------------------
1 |
2 | @media (min-width: 768px){
3 | #wrapper {padding-right: 225px; padding-left: 0;}
4 | .side-nav{right: 0;left: auto;}
5 | }
--------------------------------------------------------------------------------
/cmd/dashboard/dashboard.toml:
--------------------------------------------------------------------------------
1 | etcd_hosts = "localhost:2379"
2 | db_url="127.0.0.1:27017"
3 | db_name="goconfd"
4 | template_path="/Users/pengleon/gopath/goconfd/dashboard/template/"
5 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/dashboard/template/asset/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/dashboard/template/asset/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Leon2012/goconfd/HEAD/dashboard/template/asset/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/less/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/scss/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/run.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 | rm -rf ./nohup.out
4 | nohup ./build/monitor --config ./build/monitor.toml &
5 | nohup ./build/agent --config ./build/agent.toml &
6 | nohup ./build/dashboard --config ./build/dashboard.toml &
--------------------------------------------------------------------------------
/dashboard/template/public_html/common/layout.html:
--------------------------------------------------------------------------------
1 | {{define "layout"}}
2 | {{template "header"}}
3 | {{template "left"}}
4 |
5 | {{template "content" .}}
6 |
7 |
8 | {{template "footer"}}
9 | {{end}}
--------------------------------------------------------------------------------
/libs/version/binary.go:
--------------------------------------------------------------------------------
1 | package version
2 |
3 | import (
4 | "fmt"
5 | "runtime"
6 | )
7 |
8 | const Binary = "0.0.1"
9 |
10 | func String(app string) string {
11 | return fmt.Sprintf("%s v%s (built w/%s)", app, Binary, runtime.Version())
12 | }
13 |
--------------------------------------------------------------------------------
/cmd/agent/agent.toml:
--------------------------------------------------------------------------------
1 | hosts = "127.0.0.1:2379" #etcd hosts
2 | save_type=2 #1=file, 2=share memory
3 | save_path = "/tmp/goconfd" #file or share memory save path
4 | file_ext = "php"
5 | key_prefix= "develop.activity" #monitor key prefix
6 | heartbeat_interval=30
--------------------------------------------------------------------------------
/registry/frontend.go:
--------------------------------------------------------------------------------
1 | package registry
2 |
3 | import (
4 | _ "time"
5 |
6 | "github.com/Leon2012/goconfd/libs/kv"
7 | )
8 |
9 | type Frontend interface {
10 | Save(k *kv.Kv) error
11 | Get(k string) (*kv.Kv, error)
12 | Keys() []string
13 | }
14 |
15 | var DefaultFrontend Frontend
16 |
--------------------------------------------------------------------------------
/libs/util/wait_group_wrapper.go:
--------------------------------------------------------------------------------
1 | package util
2 |
3 | import (
4 | "sync"
5 | )
6 |
7 | type WaitGroupWrapper struct {
8 | sync.WaitGroup
9 | }
10 |
11 | func (w *WaitGroupWrapper) Wrap(cb func()) {
12 | w.Add(1)
13 | go func() {
14 | cb()
15 | w.Done()
16 | }()
17 | }
18 |
--------------------------------------------------------------------------------
/libs/shm/common_test.go:
--------------------------------------------------------------------------------
1 | package shm
2 |
3 | import (
4 | "testing"
5 | )
6 |
7 | func TestFtok(t *testing.T) {
8 | pathname := "/tmp/queue1"
9 | projID := uint8(0x01)
10 | key, err := Ftok(pathname, projID)
11 | if err != nil {
12 | t.Error(err)
13 | } else {
14 | t.Log(key)
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/libs/util/string_array.go:
--------------------------------------------------------------------------------
1 | package util
2 |
3 | import (
4 | "strings"
5 | )
6 |
7 | type StringArray []string
8 |
9 | func (a *StringArray) Set(s string) error {
10 | *a = append(*a, s)
11 | return nil
12 | }
13 |
14 | func (a *StringArray) String() string {
15 | return strings.Join(*a, ";")
16 | }
17 |
--------------------------------------------------------------------------------
/libs/reflect/tag.go:
--------------------------------------------------------------------------------
1 | package reflect
2 |
3 | import (
4 | "reflect"
5 | )
6 |
7 | func GetTag(s interface{}, fieldName, tagName string) string {
8 | t := reflect.TypeOf(s)
9 | field, b := t.Elem().FieldByName(fieldName)
10 | if !b {
11 | return ""
12 | }
13 | tag := field.Tag.Get(tagName)
14 | return tag
15 | }
16 |
--------------------------------------------------------------------------------
/agent/agent_test.go:
--------------------------------------------------------------------------------
1 | package agent
2 |
3 | import (
4 | "testing"
5 | )
6 |
7 | func TestAgent(t *testing.T) {
8 | opts := NewOptions()
9 | opts.Hosts = "localhost:2379"
10 | opts.KeyPrefix = "/develop/activity/"
11 | opts.SavePath = "/home/vagrant"
12 |
13 | agent := NewAgent(opts)
14 | defer agent.Exit()
15 |
16 | agent.Main()
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/libs/kv/json.go:
--------------------------------------------------------------------------------
1 | package kv
2 |
3 | import "encoding/json"
4 |
5 | func JsonEncode(kv *Kv) ([]byte, error) {
6 | b, err := json.Marshal(kv)
7 | return b, err
8 | }
9 |
10 | func JsonDecode(data []byte) (*Kv, error) {
11 | var k Kv
12 | err := json.Unmarshal(data, &k)
13 | if err != nil {
14 | return nil, err
15 | } else {
16 | return &k, nil
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/store/store.go:
--------------------------------------------------------------------------------
1 | package store
2 |
3 | import (
4 | "github.com/Leon2012/goconfd/store/db"
5 | )
6 |
7 | var adaptr db.Adapter
8 |
9 | func Register(name string, adapter db.Adapter) {
10 | if adapter == nil {
11 | panic("store: Register adapter is nil")
12 | }
13 | if adaptr != nil {
14 | panic("store: Adapter already registered")
15 | }
16 | adaptr = adapter
17 | }
18 |
--------------------------------------------------------------------------------
/registry/frontend/empty.go:
--------------------------------------------------------------------------------
1 | package frontend
2 |
3 | import (
4 | "fmt"
5 | "github.com/Leon2012/goconfd/libs/kv"
6 | )
7 |
8 | type Empty struct{}
9 |
10 | func (e *Empty) Save(k *kv.Kv) error {
11 | //fmt.Printf("key : %s, value : %s \n", k.Key, k.Value)
12 | fmt.Println(k)
13 | return nil
14 | }
15 |
16 | func (e *Empty) Get(k string) (*kv.Kv, error) {
17 | fmt.Printf("get key : %s \n", k)
18 | return nil, nil
19 | }
20 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/less/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .@{fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/scss/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/dashboard/template/asset/css/morris.css:
--------------------------------------------------------------------------------
1 | .morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0}
2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0}
3 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/less/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/scss/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/libs/reflect/tag_test.go:
--------------------------------------------------------------------------------
1 | package reflect
2 |
3 | import (
4 | "testing"
5 | )
6 |
7 | type Kv struct {
8 | KeyPrefix string `json:"prefix" php:"prefix"`
9 | Revision int64 `json:"rev" php:"rev"`
10 | Event int32 `json:"type" php:"type"`
11 | Key string `json:"key" php:"key"`
12 | Value string `json:"value" php:"value"`
13 | }
14 |
15 | func TestGetTag(t *testing.T) {
16 | kv := &Kv{}
17 | tag := GetTag(kv, "Revision", "php")
18 | t.Log(tag)
19 | }
20 |
--------------------------------------------------------------------------------
/agent/saver.go:
--------------------------------------------------------------------------------
1 | package agent
2 |
3 | import (
4 | "github.com/Leon2012/goconfd/libs/kv"
5 | )
6 |
7 | func SaveKV(ctx *Context) {
8 | var kv *kv.Kv
9 | for {
10 | select {
11 | case kv = <-ctx.Agent.watchKVChan:
12 | err := ctx.Agent.local.Save(kv)
13 | if err != nil {
14 | ctx.Agent.logf(err.Error())
15 | } else {
16 | ctx.Agent.setLastHeartbeat(kv)
17 | ctx.Agent.logf("key:" + kv.Key + " save success")
18 | }
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/less/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/less/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: (-@fa-li-width + (4em / 14));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/scss/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/scss/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 |
5 | {
6 | "name": "Launch",
7 | "type": "go",
8 | "request": "launch",
9 | "mode": "debug",
10 | "remotePath": "",
11 | "port": 2345,
12 | "host": "127.0.0.1",
13 | "program": "${workspaceRoot}/cmd/agent",
14 | "env": {},
15 | "args": [],
16 | "showLog": true
17 | }
18 | ]
19 | }
--------------------------------------------------------------------------------
/dashboard/template/asset/font-awesome/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "spinning";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 |
--------------------------------------------------------------------------------
/dashboard/template/public_html/common/footer.html:
--------------------------------------------------------------------------------
1 | {{define "footer"}}
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |