Skip to content

Commit

Permalink
fix: added missing events
Browse files Browse the repository at this point in the history
  • Loading branch information
mlabouardy committed Mar 8, 2023
1 parent 61109ba commit d14fb58
Show file tree
Hide file tree
Showing 17 changed files with 186 additions and 49 deletions.
3 changes: 2 additions & 1 deletion cmd/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/tailwarden/komiser/internal"
"github.com/tailwarden/komiser/utils"
)

var startCmd = &cobra.Command{
Expand All @@ -29,7 +30,7 @@ var startCmd = &cobra.Command{
verbose, _ := cmd.Flags().GetBool("verbose")
setupLogging(verbose)

analytics := internal.Analytics{}
analytics := utils.Analytics{}

telemetry, _ := cmd.Flags().GetBool("telemetry")
if !telemetry {
Expand Down
7 changes: 7 additions & 0 deletions handlers/alerts_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@ func (handler *ApiHandler) NewAlertHandler(w http.ResponseWriter, r *http.Reques
alertId, _ := result.LastInsertId()
alert.Id = alertId

if handler.telemetry {
handler.analytics.TrackEvent("creating_alert", map[string]interface{}{
"type": alert.Type,
"destination": "Slack",
})
}

respondWithJSON(w, 200, alert)
}

Expand Down
21 changes: 12 additions & 9 deletions handlers/resources_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,26 @@ import (

"github.com/tailwarden/komiser/models"
. "github.com/tailwarden/komiser/models"
"github.com/tailwarden/komiser/utils"
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect"
)

type ApiHandler struct {
db *bun.DB
ctx context.Context
noTracking bool
cfg models.Config
db *bun.DB
ctx context.Context
telemetry bool
cfg models.Config
analytics utils.Analytics
}

func NewApiHandler(ctx context.Context, noTracking bool, db *bun.DB, cfg models.Config) *ApiHandler {
func NewApiHandler(ctx context.Context, telemetry bool, analytics utils.Analytics, db *bun.DB, cfg models.Config) *ApiHandler {
handler := ApiHandler{
db: db,
ctx: ctx,
noTracking: noTracking,
cfg: cfg,
db: db,
ctx: ctx,
telemetry: telemetry,
cfg: cfg,
analytics: analytics,
}
return &handler
}
Expand Down
4 changes: 4 additions & 0 deletions handlers/views_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ func (handler *ApiHandler) NewViewHandler(w http.ResponseWriter, r *http.Request
viewId, _ := result.LastInsertId()
view.Id = viewId

if handler.telemetry {
handler.analytics.TrackEvent("creating_view", nil)
}

respondWithJSON(w, 200, view)
}

Expand Down
5 changes: 3 additions & 2 deletions internal/api/v1/endpoints.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ import (
"github.com/gorilla/mux"
"github.com/tailwarden/komiser/handlers"
"github.com/tailwarden/komiser/models"
"github.com/tailwarden/komiser/utils"
"github.com/uptrace/bun"
)

func Endpoints(ctx context.Context, telemetry bool, db *bun.DB, cfg models.Config) *mux.Router {
func Endpoints(ctx context.Context, telemetry bool, analytics utils.Analytics, db *bun.DB, cfg models.Config) *mux.Router {
r := mux.NewRouter()

api := handlers.NewApiHandler(ctx, telemetry, db, cfg)
api := handlers.NewApiHandler(ctx, telemetry, analytics, db, cfg)

r.HandleFunc("/resources/search", api.FilterResourcesHandler).Methods("POST")
r.HandleFunc("/resources/tags", api.BulkUpdateTagsHandler).Methods("POST")
Expand Down
57 changes: 56 additions & 1 deletion internal/config/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/scaleway/scaleway-sdk-go/scw"
. "github.com/tailwarden/komiser/models"
"github.com/tailwarden/komiser/providers"
"github.com/tailwarden/komiser/utils"
tccommon "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/regions"
Expand Down Expand Up @@ -58,7 +59,7 @@ func loadConfigFromBytes(b []byte) (*Config, error) {
return &config, nil
}

func Load(configPath string) (*Config, []providers.ProviderClient, error) {
func Load(configPath string, telemetry bool, analytics utils.Analytics) (*Config, []providers.ProviderClient, error) {
config, err := loadConfigFromFile(configPath)
if err != nil {
return nil, nil, err
Expand Down Expand Up @@ -105,6 +106,12 @@ func Load(configPath string) (*Config, []providers.ProviderClient, error) {
})
}
}
if telemetry {
analytics.TrackEvent("connected_account", map[string]interface{}{
"type": len(config.AWS),
"provider": "AWS",
})
}
}

if len(config.DigitalOcean) > 0 {
Expand All @@ -115,6 +122,12 @@ func Load(configPath string) (*Config, []providers.ProviderClient, error) {
Name: account.Name,
})
}
if telemetry {
analytics.TrackEvent("connected_account", map[string]interface{}{
"type": len(config.DigitalOcean),
"provider": "DigitalOcean",
})
}
}

if len(config.Oci) > 0 {
Expand All @@ -127,6 +140,12 @@ func Load(configPath string) (*Config, []providers.ProviderClient, error) {
})
}
}
if telemetry {
analytics.TrackEvent("connected_account", map[string]interface{}{
"type": len(config.Oci),
"provider": "OCI",
})
}
}

if len(config.Civo) > 0 {
Expand All @@ -140,6 +159,12 @@ func Load(configPath string) (*Config, []providers.ProviderClient, error) {
Name: account.Name,
})
}
if telemetry {
analytics.TrackEvent("connected_account", map[string]interface{}{
"type": len(config.Civo),
"provider": "Civo",
})
}
}

if len(config.Kubernetes) > 0 {
Expand All @@ -161,6 +186,12 @@ func Load(configPath string) (*Config, []providers.ProviderClient, error) {
Name: account.Name,
})
}
if telemetry {
analytics.TrackEvent("connected_account", map[string]interface{}{
"type": len(config.Kubernetes),
"provider": "Kubernetes",
})
}
}

if len(config.Linode) > 0 {
Expand All @@ -178,6 +209,12 @@ func Load(configPath string) (*Config, []providers.ProviderClient, error) {
Name: account.Name,
})
}
if telemetry {
analytics.TrackEvent("connected_account", map[string]interface{}{
"type": len(config.Linode),
"provider": "Linode",
})
}
}

if len(config.Tencent) > 0 {
Expand All @@ -195,6 +232,12 @@ func Load(configPath string) (*Config, []providers.ProviderClient, error) {
Name: account.Name,
})
}
if telemetry {
analytics.TrackEvent("connected_account", map[string]interface{}{
"type": len(config.Tencent),
"provider": "Tencent",
})
}
}

if len(config.Azure) > 0 {
Expand All @@ -214,6 +257,12 @@ func Load(configPath string) (*Config, []providers.ProviderClient, error) {
Name: account.Name,
})
}
if telemetry {
analytics.TrackEvent("connected_account", map[string]interface{}{
"type": len(config.Azure),
"provider": "Azure",
})
}
}

if len(config.Scaleway) > 0 {
Expand All @@ -231,6 +280,12 @@ func Load(configPath string) (*Config, []providers.ProviderClient, error) {
Name: account.Name,
})
}
if telemetry {
analytics.TrackEvent("connected_account", map[string]interface{}{
"type": len(config.Scaleway),
"provider": "Scaleway",
})
}
}

return config, clients, nil
Expand Down
31 changes: 16 additions & 15 deletions internal/internal.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (
oci "github.com/tailwarden/komiser/providers/oci"
scaleway "github.com/tailwarden/komiser/providers/scaleway"
"github.com/tailwarden/komiser/providers/tencent"
"github.com/tailwarden/komiser/utils"
"github.com/uptrace/bun"
)

Expand All @@ -49,16 +50,16 @@ var Commit = "Unknown"
var Os = runtime.GOOS
var Arch = runtime.GOARCH
var db *bun.DB
var analytics Analytics
var analytics utils.Analytics

func Exec(address string, port int, configPath string, telemetry bool, a Analytics, regions []string, cmd *cobra.Command) error {
cfg, clients, err := config.Load(configPath)
func Exec(address string, port int, configPath string, telemetry bool, a utils.Analytics, regions []string, cmd *cobra.Command) error {
analytics = a

cfg, clients, err := config.Load(configPath, telemetry, analytics)
if err != nil {
return err
}

analytics = a

err = setupSchema(cfg)
if err != nil {
return err
Expand Down Expand Up @@ -96,7 +97,7 @@ func Exec(address string, port int, configPath string, telemetry bool, a Analyti
func runServer(address string, port int, telemetry bool, cfg models.Config) error {
log.Infof("Komiser version: %s, commit: %s, buildt: %s", Version, Commit, Buildtime)

r := v1.Endpoints(context.Background(), telemetry, db, cfg)
r := v1.Endpoints(context.Background(), telemetry, analytics, db, cfg)

cors := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
Expand Down Expand Up @@ -197,7 +198,7 @@ func fetchResources(ctx context.Context, clients []providers.ProviderClient, reg
"provider": "AWS",
})
}
aws.FetchResources(ctx, client, regions, db)
aws.FetchResources(ctx, client, regions, db, telemetry, analytics)
}(ctx, client, regions)
} else if client.DigitalOceanClient != nil {
go func(ctx context.Context, client providers.ProviderClient) {
Expand All @@ -206,7 +207,7 @@ func fetchResources(ctx context.Context, clients []providers.ProviderClient, reg
"provider": "DigitalOcean",
})
}
do.FetchResources(ctx, client, db)
do.FetchResources(ctx, client, db, telemetry, analytics)
}(ctx, client)
} else if client.OciClient != nil {
go func(ctx context.Context, client providers.ProviderClient) {
Expand All @@ -215,7 +216,7 @@ func fetchResources(ctx context.Context, clients []providers.ProviderClient, reg
"provider": "OCI",
})
}
oci.FetchResources(ctx, client, db)
oci.FetchResources(ctx, client, db, telemetry, analytics)
}(ctx, client)
} else if client.CivoClient != nil {
go func(ctx context.Context, client providers.ProviderClient) {
Expand All @@ -224,7 +225,7 @@ func fetchResources(ctx context.Context, clients []providers.ProviderClient, reg
"provider": "Civo",
})
}
civo.FetchResources(ctx, client, db)
civo.FetchResources(ctx, client, db, telemetry, analytics)
}(ctx, client)
} else if client.K8sClient != nil {
go func(ctx context.Context, client providers.ProviderClient) {
Expand All @@ -233,7 +234,7 @@ func fetchResources(ctx context.Context, clients []providers.ProviderClient, reg
"provider": "Kubernetes",
})
}
k8s.FetchResources(ctx, client, db)
k8s.FetchResources(ctx, client, db, telemetry, analytics)
}(ctx, client)
} else if client.LinodeClient != nil {
go func(ctx context.Context, client providers.ProviderClient) {
Expand All @@ -242,7 +243,7 @@ func fetchResources(ctx context.Context, clients []providers.ProviderClient, reg
"provider": "Linode",
})
}
linode.FetchResources(ctx, client, db)
linode.FetchResources(ctx, client, db, telemetry, analytics)
}(ctx, client)
} else if client.TencentClient != nil {
go func(ctx context.Context, client providers.ProviderClient) {
Expand All @@ -251,7 +252,7 @@ func fetchResources(ctx context.Context, clients []providers.ProviderClient, reg
"provider": "Tencent",
})
}
tencent.FetchResources(ctx, client, db)
tencent.FetchResources(ctx, client, db, telemetry, analytics)
}(ctx, client)
} else if client.AzureClient != nil {
go func(ctx context.Context, client providers.ProviderClient) {
Expand All @@ -260,7 +261,7 @@ func fetchResources(ctx context.Context, clients []providers.ProviderClient, reg
"provider": "Azure",
})
}
azure.FetchResources(ctx, client, db)
azure.FetchResources(ctx, client, db, telemetry, analytics)
}(ctx, client)
} else if client.ScalewayClient != nil {
go func(ctx context.Context, client providers.ProviderClient) {
Expand All @@ -269,7 +270,7 @@ func fetchResources(ctx context.Context, clients []providers.ProviderClient, reg
"provider": "Scaleway",
})
}
scaleway.FetchResources(ctx, client, db)
scaleway.FetchResources(ctx, client, db, telemetry, analytics)
}(ctx, client)
}
}
Expand Down
11 changes: 9 additions & 2 deletions providers/aws/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/tailwarden/komiser/providers/aws/s3"
"github.com/tailwarden/komiser/providers/aws/sns"
"github.com/tailwarden/komiser/providers/aws/sqs"
"github.com/tailwarden/komiser/utils"
"github.com/uptrace/bun"
)

Expand Down Expand Up @@ -59,7 +60,7 @@ func listOfSupportedServices() []providers.FetchDataFunction {
}
}

func FetchResources(ctx context.Context, client providers.ProviderClient, regions []string, db *bun.DB) {
func FetchResources(ctx context.Context, client providers.ProviderClient, regions []string, db *bun.DB, telemetry bool, analytics utils.Analytics) {
listOfSupportedRegions := getRegions()
if len(regions) > 0 {
log.Infof("Komiser will fetch resources from the following regions: %s", strings.Join(regions, ","))
Expand All @@ -74,7 +75,13 @@ func FetchResources(ctx context.Context, client providers.ProviderClient, region
log.Warn("[%s][AWS] %s", client.Name, err)
} else {
for _, resource := range resources {
db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("link = EXCLUDED.link, cost = EXCLUDED.cost").Exec(context.Background())
db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
}
if telemetry {
analytics.TrackEvent("discovered_resources", map[string]interface{}{
"provider": "AWS",
"resources": len(resources),
})
}
}
}
Expand Down
Loading

0 comments on commit d14fb58

Please sign in to comment.