Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change 'enterprise-client' to 'usage-client' #83

Merged
merged 1 commit into from
Dec 14, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion cmd/kapacitord/run/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ type Config struct {

Hostname string `toml:"hostname"`
DataDir string `toml:"data_dir"`
Token string `toml:"token"`
}

// NewConfig returns an instance of Config with reasonable defaults.
Expand Down
6 changes: 3 additions & 3 deletions cmd/kapacitord/run/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ func NewServer(c *Config, buildInfo *BuildInfo, logService logging.Interface) (*
// append StatsService and ReportingService last so all stats are ready
// to be reported
s.appendStatsService(c.Stats)
s.appendReportingService(c.Reporting, c.Token)
s.appendReportingService(c.Reporting)

return s, nil
}
Expand Down Expand Up @@ -306,10 +306,10 @@ func (s *Server) appendStatsService(c stats.Config) {
}
}

func (s *Server) appendReportingService(c reporting.Config, token string) {
func (s *Server) appendReportingService(c reporting.Config) {
if c.Enabled {
l := s.LogService.NewLogger("[reporting] ", log.LstdFlags)
srv := reporting.NewService(c, token, l)
srv := reporting.NewService(c, l)

s.Services = append(s.Services, srv)
}
Expand Down
12 changes: 1 addition & 11 deletions etc/kapacitor/kapacitor.conf
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,6 @@
hostname = "localhost"
# Directory for storing a small amount of metadata about the server.
data_dir = "/var/lib/kapacitor"
# Your Enterprise token. By using Enterprise you can
# send all internal statistics to the Enterprise
# endpoints which will store and report on the
# activity of your instances.
token = ""

[http]
# HTTP API Server for Kapacitor
Expand Down Expand Up @@ -140,12 +135,7 @@ token = ""
# Send anonymous usage statistics
# every 12 hours to Enterprise.
enabled = true
enterprise-url = "https://enterprise.influxdata.com"
# The interval at which to send all
# internal statistics to Enterprise.
# If no token is specified this
# setting has no effect.
stats-interval = "1m0s"
url = "https://usage.influxdata.com"

##################################
# Input Methods, same as InfluxDB
Expand Down
15 changes: 5 additions & 10 deletions services/reporting/config.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
package reporting

import (
"time"

"github.com/influxdb/enterprise-client/v1"
"github.com/influxdb/influxdb/toml"
"github.com/influxdb/usage-client/v1"
)

type Config struct {
Enabled bool `toml:"enabled"`
EnterpriseURL string `toml:"enterprise-url"`
StatsInterval toml.Duration `toml:"stats-interval"`
Enabled bool `toml:"enabled"`
URL string `toml:"url"`
}

func NewConfig() Config {
return Config{
Enabled: true,
EnterpriseURL: client.URL,
StatsInterval: toml.Duration(time.Minute),
Enabled: true,
URL: client.URL,
}
}
106 changes: 13 additions & 93 deletions services/reporting/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,13 @@ import (
"sync"
"time"

"github.com/influxdb/enterprise-client/v1"
"github.com/influxdb/kapacitor"
"github.com/influxdb/usage-client/v1"
)

const reportingInterval = time.Hour * 12

// Sends periodic information to Enterprise.
// If not registered with Enterprise just
// registers the server on startup and sends anonymous
// stats every 12 hours.
//
// If registered with Enterprise also sends
// all expvar statistics at the Config.StatsInterval.
// Sends anonymous usage information every 12 hours.
type Service struct {
tags client.Tags

Expand All @@ -31,21 +25,19 @@ type Service struct {
version string
product string

statsInterval time.Duration
statsTicker *time.Ticker
usageTicker *time.Ticker
closing chan struct{}
logger *log.Logger
wg sync.WaitGroup
statsTicker *time.Ticker
usageTicker *time.Ticker
closing chan struct{}
logger *log.Logger
wg sync.WaitGroup
}

func NewService(c Config, token string, l *log.Logger) *Service {
client := client.New(token)
client.URL = c.EnterpriseURL
func NewService(c Config, l *log.Logger) *Service {
client := client.New("")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@timraymond I don't need the token any more correct?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nathanielc Yep, that's fine ✂️ . The empty string token is the same approach we've taken in Chronograf and Core for usage-only reporting.

client.URL = c.URL
return &Service{
client: client,
logger: l,
statsInterval: time.Duration(c.StatsInterval),
client: client,
logger: l,
}
}

Expand All @@ -67,30 +59,9 @@ func (s *Service) Open() error {
s.tags["arch"] = runtime.GOARCH
s.tags["os"] = runtime.GOOS

// Check for enterprise token
if s.client.Token == "" {
r := client.Registration{
ClusterID: s.clusterID,
Product: s.product,
}
u, _ := s.client.RegistrationURL(r)
s.logger.Println("E! No Enterprise token configured, please register at", u)
} else {
// Send periodic stats
s.statsTicker = time.NewTicker(s.statsInterval)
s.wg.Add(1)
go s.stats()
}

// Register server on startup
err := s.registerServer()
if err != nil {
s.logger.Println("E! error registering server:", err)
}

// Send anonymous usage stats on startup
s.usageTicker = time.NewTicker(reportingInterval)
err = s.sendUsageReport()
err := s.sendUsageReport()
if err != nil {
s.logger.Println("E! error sending usage stats:", err)
}
Expand Down Expand Up @@ -130,37 +101,6 @@ func (s *Service) usage() {
}
}

func (s *Service) stats() {
defer s.wg.Done()
for {
select {
case <-s.closing:
return
case <-s.statsTicker.C:
err := s.sendStatsReport()
if err != nil {
s.logger.Println("E! error while sending stats report:", err)
}
}
}
}

// Register this server with Enterprise.
func (s *Service) registerServer() error {
server := client.Server{
ClusterID: s.clusterID,
ServerID: s.serverID,
Host: s.hostname,
Version: s.version,
Product: s.product,
}
resp, err := s.client.Save(server)
if resp != nil {
resp.Body.Close()
}
return err
}

// Send anonymous usage report.
func (s *Service) sendUsageReport() error {
data := client.UsageData{
Expand All @@ -186,23 +126,3 @@ func (s *Service) sendUsageReport() error {
}
return err
}

// Send all internal stats.
func (s *Service) sendStatsReport() error {
data, err := kapacitor.GetStatsData()
if err != nil {
return err
}
stats := client.Stats{
ClusterID: s.clusterID,
ServerID: s.serverID,
Product: s.product,
Data: data,
}

resp, err := s.client.Save(stats)
if resp != nil {
resp.Body.Close()
}
return err
}
27 changes: 16 additions & 11 deletions stats.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"sync"
"time"

"github.com/influxdb/enterprise-client/v1"
"github.com/twinj/uuid"
)

Expand Down Expand Up @@ -116,13 +115,19 @@ func NewStatistics(name string, tags map[string]string) *expvar.Map {
return statMap
}

type StatsData struct {
Name string `json:"name"`
Tags map[string]string `json:"tags"`
Values map[string]interface{} `json:"values"`
}

// Return all stats data from the expvars.
func GetStatsData() ([]client.StatsData, error) {
allData := make([]client.StatsData, 0)
func GetStatsData() ([]StatsData, error) {
allData := make([]StatsData, 0)
// Add Global expvars
globalData := client.StatsData{
globalData := StatsData{
Name: "kapacitor",
Values: make(client.Values),
Values: make(map[string]interface{}),
}

allData = append(allData, globalData)
Expand All @@ -142,9 +147,9 @@ func GetStatsData() ([]client.StatsData, error) {
globalData.Values[kv.Key] = f
}
case *expvar.Map:
data := client.StatsData{
Tags: make(client.Tags),
Values: make(client.Values),
data := StatsData{
Tags: make(map[string]string),
Values: make(map[string]interface{}),
}

v.Do(func(subKV expvar.KeyValue) {
Expand Down Expand Up @@ -191,7 +196,7 @@ func GetStatsData() ([]client.StatsData, error) {
}
})

// If a registered client has no field data, don't include it in the results
// If no field data, don't include it in the results
if len(data.Values) == 0 {
return
}
Expand All @@ -204,13 +209,13 @@ func GetStatsData() ([]client.StatsData, error) {
globalData.Values[UptimeVarName] = Uptime().Seconds()

// Add Go memstats.
data := client.StatsData{
data := StatsData{
Name: "runtime",
}

var rt runtime.MemStats
runtime.ReadMemStats(&rt)
data.Values = client.Values{
data.Values = map[string]interface{}{
"Alloc": int64(rt.Alloc),
"TotalAlloc": int64(rt.TotalAlloc),
"Sys": int64(rt.Sys),
Expand Down