Use dyntmpl for the analytics panes.
Localised a few more things on the dashboard. Use questions marks instead of numbers for placeholders on the dashboard. Added the panel_dashboard_cpu phrase. Added the panel_dashboard_ram phrase.
This commit is contained in:
parent
d14a7f028f
commit
6bed36b8c6
|
@ -283,9 +283,23 @@ type ResetPage struct {
|
|||
type Panel struct {
|
||||
*BasePanelPage
|
||||
HTMLID string
|
||||
ClassNames string
|
||||
TmplName string
|
||||
Inner nobreak
|
||||
}
|
||||
type PanelAnalytics struct {
|
||||
*BasePanelPage
|
||||
FormAction string
|
||||
TmplName string
|
||||
Inner nobreak
|
||||
}
|
||||
type PanelAnalyticsStd struct{
|
||||
Graph PanelTimeGraph
|
||||
ViewItems []PanelAnalyticsItem
|
||||
TimeRange string
|
||||
Unit string
|
||||
TimeType string
|
||||
}
|
||||
|
||||
type PanelStats struct {
|
||||
Users int
|
||||
|
|
|
@ -301,7 +301,8 @@ func compileTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName string
|
|||
tmpls.AddStd("account", "common.Account", accountPage)
|
||||
|
||||
basePage := &BasePanelPage{header, PanelStats{}, "dashboard", ReportForumID}
|
||||
tmpls.AddStd("panel", "common.Panel", Panel{basePage, "panel_dashboard_right","panel_dashboard", inter})
|
||||
tmpls.AddStd("panel", "common.Panel", Panel{basePage, "panel_dashboard_right","","panel_dashboard", inter})
|
||||
//tmpls.AddStd("panel_analytics", "common.PanelAnalytics", Panel{basePage, "panel_dashboard_right","panel_dashboard", inter})
|
||||
|
||||
var writeTemplate = func(name string, content interface{}) {
|
||||
log.Print("Writing template '" + name + "'")
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
/*
|
||||
*
|
||||
* Gosora WebSocket Subsystem
|
||||
* Copyright Azareal 2017 - 2019
|
||||
* Copyright Azareal 2017 - 2020
|
||||
*
|
||||
*/
|
||||
package common
|
||||
|
@ -19,7 +19,7 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/Azareal/Gosora/common/phrases"
|
||||
p "github.com/Azareal/Gosora/common/phrases"
|
||||
"github.com/Azareal/gopsutil/cpu"
|
||||
"github.com/Azareal/gopsutil/mem"
|
||||
"github.com/gorilla/websocket"
|
||||
|
@ -375,9 +375,9 @@ AdminStatLoop:
|
|||
// nolint
|
||||
// TODO: Use JSON for this to make things more portable and easier to convert to MessagePack, if need be?
|
||||
if !noStatUpdates {
|
||||
w.Write([]byte("set #dash-totonline <span>" + phrases.GetTmplPhrasef("panel_dashboard_online", totonline, totunit) + "</span>\r"))
|
||||
w.Write([]byte("set #dash-gonline <span>" + phrases.GetTmplPhrasef("panel_dashboard_guests_online", gonline, gunit) + "</span>\r"))
|
||||
w.Write([]byte("set #dash-uonline <span>" + phrases.GetTmplPhrasef("panel_dashboard_users_online", uonline, uunit) + "</span>\r"))
|
||||
w.Write([]byte("set #dash-totonline <span>" + p.GetTmplPhrasef("panel_dashboard_online", totonline, totunit) + "</span>\r"))
|
||||
w.Write([]byte("set #dash-gonline <span>" + p.GetTmplPhrasef("panel_dashboard_guests_online", gonline, gunit) + "</span>\r"))
|
||||
w.Write([]byte("set #dash-uonline <span>" + p.GetTmplPhrasef("panel_dashboard_users_online", uonline, uunit) + "</span>\r"))
|
||||
w.Write([]byte("set #dash-reqs <span>" + strconv.Itoa(reqCount) + " reqs / second</span>\r"))
|
||||
|
||||
w.Write([]byte("set-class #dash-totonline grid_item grid_stat " + onlineColour + "\r"))
|
||||
|
@ -386,11 +386,11 @@ AdminStatLoop:
|
|||
//w.Write([]byte("set-class #dash-reqs grid_item grid_stat grid_end_group \r"))
|
||||
}
|
||||
|
||||
w.Write([]byte("set #dash-cpu <span>CPU: " + cpustr + "%</span>\r"))
|
||||
w.Write([]byte("set #dash-cpu <span>" + p.GetTmplPhrasef("panel_dashboard_cpu",cpustr) + "%</span>\r"))
|
||||
w.Write([]byte("set-class #dash-cpu grid_item grid_istat " + cpuColour + "\r"))
|
||||
|
||||
if !noRAMUpdates {
|
||||
w.Write([]byte("set #dash-ram <span>RAM: " + ramstr + "</span>\r"))
|
||||
w.Write([]byte("set #dash-ram <span>" + p.GetTmplPhrasef("panel_dashboard_ram",ramstr) + "</span>\r"))
|
||||
w.Write([]byte("set-class #dash-ram grid_item grid_istat " + ramColour + "\r"))
|
||||
}
|
||||
|
||||
|
|
|
@ -751,7 +751,9 @@
|
|||
"panel_menu_debug":"Debug",
|
||||
|
||||
"panel_dashboard_head":"Dashboard",
|
||||
"panel_dashboard_cpu":"CPU: %s",
|
||||
"panel_dashboard_cpu_desc":"The global CPU usage of this server",
|
||||
"panel_dashboard_ram":"RAM: %s",
|
||||
"panel_dashboard_ram_desc":"The global RAM usage of this server",
|
||||
"panel_dashboard_online": "%d%s online",
|
||||
"panel_dashboard_online_desc":"The number of people who are currently online",
|
||||
|
|
|
@ -164,8 +164,9 @@ func AnalyticsViews(w http.ResponseWriter, r *http.Request, user c.User) c.Route
|
|||
if timeRange.Range == "six-hours" || timeRange.Range == "twelve-hours" || timeRange.Range == "one-day" {
|
||||
ttime = "time"
|
||||
}
|
||||
pi := c.PanelAnalyticsPage{basePage, graph, viewItems, timeRange.Range, timeRange.Unit, ttime}
|
||||
return renderTemplate("panel_analytics_views", w, r, basePage.Header, &pi)
|
||||
|
||||
pi := c.PanelAnalyticsStd{graph, viewItems, timeRange.Range, timeRange.Unit, ttime}
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_views", pi})
|
||||
}
|
||||
|
||||
func AnalyticsRouteViews(w http.ResponseWriter, r *http.Request, user c.User, route string) c.RouteError {
|
||||
|
@ -200,7 +201,7 @@ func AnalyticsRouteViews(w http.ResponseWriter, r *http.Request, user c.User, ro
|
|||
c.DebugLogf("graph: %+v\n", graph)
|
||||
|
||||
pi := c.PanelAnalyticsRoutePage{basePage, c.SanitiseSingleLine(route), graph, viewItems, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_route_views", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_route_views", pi})
|
||||
}
|
||||
|
||||
func AnalyticsAgentViews(w http.ResponseWriter, r *http.Request, user c.User, agent string) c.RouteError {
|
||||
|
@ -240,7 +241,7 @@ func AnalyticsAgentViews(w http.ResponseWriter, r *http.Request, user c.User, ag
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsAgentPage{basePage, agent, friendlyAgent, graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_agent_views", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_agent_views", pi})
|
||||
}
|
||||
|
||||
func AnalyticsForumViews(w http.ResponseWriter, r *http.Request, user c.User, sfid string) c.RouteError {
|
||||
|
@ -283,7 +284,7 @@ func AnalyticsForumViews(w http.ResponseWriter, r *http.Request, user c.User, sf
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsAgentPage{basePage, sfid, forum.Name, graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_forum_views", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_forum_views", pi})
|
||||
}
|
||||
|
||||
func AnalyticsSystemViews(w http.ResponseWriter, r *http.Request, user c.User, system string) c.RouteError {
|
||||
|
@ -322,7 +323,7 @@ func AnalyticsSystemViews(w http.ResponseWriter, r *http.Request, user c.User, s
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsAgentPage{basePage, system, friendlySystem, graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_system_views", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_system_views", pi})
|
||||
}
|
||||
|
||||
func AnalyticsLanguageViews(w http.ResponseWriter, r *http.Request, user c.User, lang string) c.RouteError {
|
||||
|
@ -362,7 +363,7 @@ func AnalyticsLanguageViews(w http.ResponseWriter, r *http.Request, user c.User,
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsAgentPage{basePage, lang, friendlyLang, graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_lang_views", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_lang_views", pi})
|
||||
}
|
||||
|
||||
func AnalyticsReferrerViews(w http.ResponseWriter, r *http.Request, user c.User, domain string) c.RouteError {
|
||||
|
@ -394,7 +395,7 @@ func AnalyticsReferrerViews(w http.ResponseWriter, r *http.Request, user c.User,
|
|||
graph := c.PanelTimeGraph{Series: [][]int64{viewList}, Labels: labelList}
|
||||
c.DebugLogf("graph: %+v\n", graph)
|
||||
pi := c.PanelAnalyticsAgentPage{basePage, c.SanitiseSingleLine(domain), "", graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_referrer_views", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_referrer_views", pi})
|
||||
}
|
||||
|
||||
func AnalyticsTopics(w http.ResponseWriter, r *http.Request, user c.User) c.RouteError {
|
||||
|
@ -426,8 +427,8 @@ func AnalyticsTopics(w http.ResponseWriter, r *http.Request, user c.User) c.Rout
|
|||
}
|
||||
graph := c.PanelTimeGraph{Series: [][]int64{viewList}, Labels: labelList}
|
||||
c.DebugLogf("graph: %+v\n", graph)
|
||||
pi := c.PanelAnalyticsPage{basePage, graph, viewItems, timeRange.Range, timeRange.Unit, "time"}
|
||||
return renderTemplate("panel_analytics_topics", w, r, basePage.Header, &pi)
|
||||
pi := c.PanelAnalyticsStd{graph, viewItems, timeRange.Range, timeRange.Unit, "time"}
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_topics", pi})
|
||||
}
|
||||
|
||||
func AnalyticsPosts(w http.ResponseWriter, r *http.Request, user c.User) c.RouteError {
|
||||
|
@ -459,8 +460,8 @@ func AnalyticsPosts(w http.ResponseWriter, r *http.Request, user c.User) c.Route
|
|||
}
|
||||
graph := c.PanelTimeGraph{Series: [][]int64{viewList}, Labels: labelList}
|
||||
c.DebugLogf("graph: %+v\n", graph)
|
||||
pi := c.PanelAnalyticsPage{basePage, graph, viewItems, timeRange.Range, timeRange.Unit, "time"}
|
||||
return renderTemplate("panel_analytics_posts", w, r, basePage.Header, &pi)
|
||||
pi := c.PanelAnalyticsStd{graph, viewItems, timeRange.Range, timeRange.Unit, "time"}
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_posts", pi})
|
||||
}
|
||||
|
||||
func analyticsRowsToNameMap(rows *sql.Rows) (map[string]int, error) {
|
||||
|
@ -504,6 +505,7 @@ func analyticsRowsToDuoMap(rows *sql.Rows, labelList []int64, viewMap map[int64]
|
|||
log.Print("createdAt: ", createdAt)
|
||||
log.Print("unixCreatedAt: ", unixCreatedAt)
|
||||
}
|
||||
|
||||
vvMap, ok := vMap[name]
|
||||
if !ok {
|
||||
vvMap = make(map[int64]int64)
|
||||
|
@ -639,7 +641,7 @@ func AnalyticsForums(w http.ResponseWriter, r *http.Request, user c.User) c.Rout
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsDuoPage{basePage, forumItems, graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_forums", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_forums", pi})
|
||||
}
|
||||
|
||||
func AnalyticsRoutes(w http.ResponseWriter, r *http.Request, user c.User) c.RouteError {
|
||||
|
@ -694,7 +696,7 @@ func AnalyticsRoutes(w http.ResponseWriter, r *http.Request, user c.User) c.Rout
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsRoutesPage{basePage, routeItems, graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_routes", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_routes", pi})
|
||||
}
|
||||
|
||||
// Trialling multi-series charts
|
||||
|
@ -759,7 +761,7 @@ func AnalyticsAgents(w http.ResponseWriter, r *http.Request, user c.User) c.Rout
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsDuoPage{basePage, agentItems, graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_agents", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_agents", pi})
|
||||
}
|
||||
|
||||
func AnalyticsSystems(w http.ResponseWriter, r *http.Request, user c.User) c.RouteError {
|
||||
|
@ -823,7 +825,7 @@ func AnalyticsSystems(w http.ResponseWriter, r *http.Request, user c.User) c.Rou
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsDuoPage{basePage, systemItems, graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_systems", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_systems", pi})
|
||||
}
|
||||
|
||||
func AnalyticsLanguages(w http.ResponseWriter, r *http.Request, user c.User) c.RouteError {
|
||||
|
@ -888,7 +890,7 @@ func AnalyticsLanguages(w http.ResponseWriter, r *http.Request, user c.User) c.R
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsDuoPage{basePage, langItems, graph, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_langs", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_langs", pi})
|
||||
}
|
||||
|
||||
func AnalyticsReferrers(w http.ResponseWriter, r *http.Request, user c.User) c.RouteError {
|
||||
|
@ -920,5 +922,5 @@ func AnalyticsReferrers(w http.ResponseWriter, r *http.Request, user c.User) c.R
|
|||
}
|
||||
|
||||
pi := c.PanelAnalyticsAgentsPage{basePage, refItems, timeRange.Range}
|
||||
return renderTemplate("panel_analytics_referrers", w, r, basePage.Header, &pi)
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_analytics_right","analytics","panel_analytics_referrers", pi})
|
||||
}
|
||||
|
|
|
@ -172,8 +172,8 @@ func Dashboard(w http.ResponseWriter, r *http.Request, user c.User) c.RouteError
|
|||
//GE{"dash-version", "v" + version.String(), 0, "grid_istat stat_green", "", "", "Gosora is up-to-date :)"},
|
||||
GE{"dash-version", "v" + c.SoftwareVersion.String(), 0, "grid_istat", "", "", ""},
|
||||
|
||||
GE{"dash-cpu", "CPU: " + cpustr, 1, "grid_istat " + cpuColour, "", "", p.GetTmplPhrase("panel_dashboard_cpu_desc")},
|
||||
GE{"dash-ram", "RAM: " + ramstr, 2, "grid_istat " + ramColour, "", "", p.GetTmplPhrase("panel_dashboard_ram_desc")},
|
||||
GE{"dash-cpu", p.GetTmplPhrasef("panel_dashboard_cpu",cpustr), 1, "grid_istat " + cpuColour, "", "", p.GetTmplPhrase("panel_dashboard_cpu_desc")},
|
||||
GE{"dash-ram", p.GetTmplPhrasef("panel_dashboard_ram",ramstr), 2, "grid_istat " + ramColour, "", "", p.GetTmplPhrase("panel_dashboard_ram_desc")},
|
||||
}
|
||||
var addElement = func(element GE) {
|
||||
gridElements = append(gridElements, element)
|
||||
|
@ -208,10 +208,10 @@ func Dashboard(w http.ResponseWriter, r *http.Request, user c.User) c.RouteError
|
|||
addElement(GE{"dash-reports", strconv.Itoa(reportCount) + " reports" + reportInterval, 11, "grid_stat", "", "", "The number of reports over the last 7 days"})
|
||||
|
||||
if false {
|
||||
addElement(GE{"dash-minperuser", "2 minutes / user / week", 12, "grid_stat stat_disabled", "", "", p.GetTmplPhrase("panel_dashboard_coming_soon") /*"The average number of number of minutes spent by each active user over the last 7 days"*/})
|
||||
addElement(GE{"dash-visitorsperweek", "2 visitors / week", 13, "grid_stat stat_disabled", "", "", p.GetTmplPhrase("panel_dashboard_coming_soon") /*"The number of unique visitors we've had over the last 7 days"*/})
|
||||
addElement(GE{"dash-postsperuser", "5 posts / user / week", 14, "grid_stat stat_disabled", "", "", p.GetTmplPhrase("panel_dashboard_coming_soon") /*"The average number of posts made by each active user over the past week"*/})
|
||||
addElement(GE{"dash-minperuser", "?? minutes / user / week", 12, "grid_stat stat_disabled", "", "", p.GetTmplPhrase("panel_dashboard_coming_soon") /*"The average number of number of minutes spent by each active user over the last 7 days"*/})
|
||||
addElement(GE{"dash-visitorsperweek", "?? visitors / week", 13, "grid_stat stat_disabled", "", "", p.GetTmplPhrase("panel_dashboard_coming_soon") /*"The number of unique visitors we've had over the last 7 days"*/})
|
||||
addElement(GE{"dash-postsperuser", "?? posts / user / week", 14, "grid_stat stat_disabled", "", "", p.GetTmplPhrase("panel_dashboard_coming_soon") /*"The average number of posts made by each active user over the past week"*/})
|
||||
}
|
||||
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_dashboard_right","panel_dashboard", gridElements})
|
||||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "panel_dashboard_right","","panel_dashboard", gridElements})
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<main id="{{.HTMLID}}" class="colstack_right">
|
||||
<main id="{{.HTMLID}}" class="colstack_right {{.ClassNames}}">
|
||||
{{template "panel_before_head.html" . }}
|
||||
{{dyntmpl .TmplName .Inner .Header}}
|
||||
</main>
|
||||
|
|
|
@ -1,19 +1,11 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/agent/{{.Agent}}" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{.FriendlyAgent}}{{lang "panel_statistics_views_head_suffix"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/agent/{{.Agent}}" method="get"></form>
|
||||
<div id="panel_analytics_views" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/agents/" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{lang "panel_statistics_user_agents_head"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/agents/" method="get"></form>
|
||||
<div id="panel_analytics_agents_chart" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
|
@ -21,7 +16,4 @@
|
|||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_statistics_user_agents_no_user_agents"}}</div>{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,19 +1,11 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/forum/{{.Agent}}" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{.FriendlyAgent}}{{lang "panel_statistics_views_head_suffix"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/forum/{{.Agent}}" method="get"></form>
|
||||
<div id="panel_analytics_views" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/forums/" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{lang "panel_statistics_forums_head"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/forums/" method="get"></form>
|
||||
<div id="panel_analytics_forums_chart" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
|
@ -21,7 +16,4 @@
|
|||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_statistics_forums_no_forums"}}</div>{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
||||
|
|
|
@ -1,19 +1,11 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/lang/{{.Agent}}" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{.FriendlyAgent}}{{lang "panel_statistics_views_head_suffix"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/lang/{{.Agent}}" method="get"></form>
|
||||
<div id="panel_analytics_langs" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/langs/" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{lang "panel_statistics_languages_head"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/langs/" method="get"></form>
|
||||
<div id="panel_analytics_langs_chart" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
|
@ -21,7 +16,4 @@
|
|||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_statistics_languages_no_languages"}}</div>{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
||||
|
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/posts/" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{lang "panel_statistics_post_counts_head"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/posts/" method="get"></form>
|
||||
<div id="panel_analytics_posts" class="colstack_graph_holder">
|
||||
<div class="ct_chart" aria-label="{{lang "panel_statistics_post_counts_chart_aria"}}"></div>
|
||||
</div>
|
||||
|
@ -24,7 +19,4 @@
|
|||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_statistics_post_counts_no_post_counts"}}</div>{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,19 +1,11 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/referrer/{{.Agent}}" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{.Agent}}{{lang "panel_statistics_views_head_suffix"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/referrer/{{.Agent}}" method="get"></form>
|
||||
<div id="panel_analytics_referrers" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/referrers/" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{lang "panel_statistics_referrers_head"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/referrers/" method="get"></form>
|
||||
<div id="panel_analytics_referrers" class="colstack_item rowlist">
|
||||
{{range .ItemList}}
|
||||
<div class="rowitem panel_compactrow editable_parent">
|
||||
|
@ -18,6 +13,3 @@
|
|||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_statistics_referrers_no_referrers"}}</div>{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "footer.html" . }}
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/route/{{.Route}}" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{.Route}}{{lang "panel_statistics_views_head_suffix"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/route/{{.Route}}" method="get"></form>
|
||||
<div id="panel_analytics_views" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
|
@ -24,7 +19,4 @@
|
|||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/routes/" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{lang "panel_statistics_routes_head"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/routes/" method="get"></form>
|
||||
<div id="panel_analytics_routes_chart" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
|
@ -21,7 +16,4 @@
|
|||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_statistics_routes_no_routes"}}</div>{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,19 +1,11 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/system/{{.Agent}}" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{.FriendlyAgent}}{{lang "panel_statistics_views_head_suffix"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/system/{{.Agent}}" method="get"></form>
|
||||
<div id="panel_analytics_systems" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/systems/" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{lang "panel_statistics_operating_systems_head"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/systems/" method="get"></form>
|
||||
<div id="panel_analytics_systems_chart" class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
|
@ -21,7 +16,4 @@
|
|||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_statistics_operating_systems_no_operating_systems"}}</div>{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/topics/" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{lang "panel_statistics_topic_counts_head"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/topics/" method="get"></form>
|
||||
<div id="panel_analytics_topics" class="colstack_graph_holder">
|
||||
<div class="ct_chart" aria-label="{{lang "panel_statistics_topic_counts_chart_aria"}}"></div>
|
||||
</div>
|
||||
|
@ -24,7 +19,4 @@
|
|||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
||||
|
|
|
@ -1,15 +1,10 @@
|
|||
{{template "header.html" . }}
|
||||
<div class="colstack panel_stack">
|
||||
{{template "panel_menu.html" . }}
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/views/" method="get"></form>
|
||||
<main id="panel_analytics_right" class="colstack_right analytics">
|
||||
{{template "panel_before_head.html" . }}
|
||||
<div class="colstack_item colstack_head">
|
||||
<div class="rowitem">
|
||||
<h1>{{lang "panel_statistics_requests_head"}}</h1>
|
||||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/views/" method="get"></form>
|
||||
<div id="panel_analytics_views" class="colstack_graph_holder">
|
||||
<div class="ct_chart" aria-label="{{lang "panel_statistics_requests_chart_aria"}}"></div>
|
||||
</div>
|
||||
|
@ -24,7 +19,4 @@
|
|||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
||||
{{template "footer.html" . }}
|
Loading…
Reference in New Issue