Use proper error handling, fix up data structure, attempt to send telemetry data.
Этот коммит содержится в:
@@ -303,13 +303,14 @@ func getPrevTrialLicense(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) {
|
func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||||
license := c.App.Channels().License()
|
license := c.App.Channels().License()
|
||||||
if license == nil {
|
if license == nil {
|
||||||
|
http.Error(w, "A License is required to perform a true-up review", http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
userId := c.AppContext.Session().UserId
|
userId := c.AppContext.Session().UserId
|
||||||
subscription, err := c.App.Cloud().GetSubscription(userId)
|
subscription, err := c.App.Cloud().GetSubscription(userId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("1: %+v", err)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,26 +326,26 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
reviewProfile.LicensedSeats = subscription.Seats
|
reviewProfile.LicensedSeats = subscription.Seats
|
||||||
reviewProfile.LicensePlan = license.SkuName
|
reviewProfile.LicensePlan = license.SkuName
|
||||||
|
|
||||||
|
// Customer Info & Usage Analytics
|
||||||
activeUserCount, err := c.App.Srv().GetStore().Status().GetTotalActiveUsersCount()
|
activeUserCount, err := c.App.Srv().GetStore().Status().GetTotalActiveUsersCount()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("2: %+v", err)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Customer Info & Usage Analytics
|
|
||||||
reviewProfile.CustomerName = license.Customer.Name
|
reviewProfile.CustomerName = license.Customer.Name
|
||||||
reviewProfile.ActiveUsers = activeUserCount
|
reviewProfile.ActiveUsers = activeUserCount
|
||||||
|
|
||||||
// Webhook, call, board, playbook counts
|
// Webhook, calls, boards, and playbook counts
|
||||||
var totalWebHookCount int64 = 0
|
var totalWebHookCount int64 = 0
|
||||||
incomingWebhookCount, err := c.App.Srv().Store().Webhook().GetIncomingTotal()
|
incomingWebhookCount, err := c.App.Srv().Store().Webhook().GetIncomingTotal()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("3: %+v", err)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
outgoingWebhookCount, err := c.App.Srv().Store().Webhook().GetOutgoingTotal()
|
outgoingWebhookCount, err := c.App.Srv().Store().Webhook().GetOutgoingTotal()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("4: %+v", err)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,12 +353,16 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
totalWebHookCount += outgoingWebhookCount
|
totalWebHookCount += outgoingWebhookCount
|
||||||
|
|
||||||
reviewProfile.TotalWebhooks = totalWebHookCount
|
reviewProfile.TotalWebhooks = totalWebHookCount
|
||||||
reviewProfile.TotalCalls = 0
|
reviewProfile.TotalCalls = 0 // TODO: Maybe from plugin?
|
||||||
reviewProfile.TotalBoards = 0
|
reviewProfile.TotalBoards = 0 // TODO: Maybe from plugin?
|
||||||
reviewProfile.TotalPlaybooks = 0
|
reviewProfile.TotalPlaybooks = 0 // TODO: Maybe from plugin?
|
||||||
|
|
||||||
// Plugin Data
|
// Plugin Data
|
||||||
trueUpReviewPlugins := model.TrueUpReviewPlugins{}
|
trueUpReviewPlugins := model.TrueUpReviewPlugins{
|
||||||
|
ActivePluginNames: []string{},
|
||||||
|
InactivePluginNames: []string{},
|
||||||
|
}
|
||||||
|
|
||||||
if pluginResponse, err := c.App.GetPlugins(); err == nil {
|
if pluginResponse, err := c.App.GetPlugins(); err == nil {
|
||||||
for _, plugin := range pluginResponse.Active {
|
for _, plugin := range pluginResponse.Active {
|
||||||
trueUpReviewPlugins.ActivePluginNames = append(trueUpReviewPlugins.ActivePluginNames, plugin.Name)
|
trueUpReviewPlugins.ActivePluginNames = append(trueUpReviewPlugins.ActivePluginNames, plugin.Name)
|
||||||
@@ -369,12 +374,42 @@ func requestTrueUpReview(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
trueUpReviewPlugins.TotalInactivePlugins += 1
|
trueUpReviewPlugins.TotalInactivePlugins += 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
reviewProfile.Plugins = trueUpReviewPlugins
|
reviewProfile.Plugins = trueUpReviewPlugins
|
||||||
|
|
||||||
|
// Authentication Data
|
||||||
|
mfaUsed := c.App.Config().ServiceSettings.EnforceMultifactorAuthentication
|
||||||
|
ldapUsed := c.App.Config().LdapSettings.Enable
|
||||||
|
samlUsed := c.App.Config().SamlSettings.Enable
|
||||||
|
openIdUsed := c.App.Config().OpenIdSettings.Enable
|
||||||
|
guessAccessAllowed := c.App.Config().GuestAccountsSettings.Enable
|
||||||
|
|
||||||
|
authFeatures := map[string]*bool{
|
||||||
|
model.TrueUpReviewAuthFeaturesMfa: mfaUsed,
|
||||||
|
model.TueUpReviewAuthFeaturesAdLdap: ldapUsed,
|
||||||
|
model.TrueUpReviewauthFeaturesSaml: samlUsed,
|
||||||
|
model.TrueUpReviewAuthFeatureOpenId: openIdUsed,
|
||||||
|
model.TrueUpReviewAuthFeatureGuestAccess: guessAccessAllowed,
|
||||||
|
}
|
||||||
|
|
||||||
|
reviewProfile.AuthenticationFeatures = []string{}
|
||||||
|
for feature, used := range authFeatures {
|
||||||
|
if used != nil && *used {
|
||||||
|
reviewProfile.AuthenticationFeatures = append(reviewProfile.AuthenticationFeatures, feature)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert true up review profile struct to map
|
||||||
|
var telemetryProperties map[string]interface{}
|
||||||
|
marshalled, _ := json.Marshal(reviewProfile)
|
||||||
|
json.Unmarshal(marshalled, &telemetryProperties)
|
||||||
|
|
||||||
|
// Send telemetry data.
|
||||||
|
telemetryService := c.App.Srv().GetTelemetryService()
|
||||||
|
telemetryService.SendTelemetry(model.TrueUpReviewTelemetryName, telemetryProperties)
|
||||||
|
|
||||||
json, err := json.Marshal(reviewProfile)
|
json, err := json.Marshal(reviewProfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("5: %+v", err)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.Write(json)
|
w.Write(json)
|
||||||
|
|||||||
@@ -39,6 +39,15 @@ var (
|
|||||||
sanctionedTrialDurationUpperBound = 29*(time.Hour*24) + (time.Hour * 23) + (time.Minute * 59) + (time.Second * 59) // 696 hours (29 days) + 23 hours, 59 mins and 59 seconds
|
sanctionedTrialDurationUpperBound = 29*(time.Hour*24) + (time.Hour * 23) + (time.Minute * 59) + (time.Second * 59) // 696 hours (29 days) + 23 hours, 59 mins and 59 seconds
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
TrueUpReviewTelemetryName = "true-up-review-sent"
|
||||||
|
TrueUpReviewAuthFeaturesMfa = "multi_factor_authentication"
|
||||||
|
TueUpReviewAuthFeaturesAdLdap = "ad_ldap_sign_in"
|
||||||
|
TrueUpReviewauthFeaturesSaml = "saml_sign_in"
|
||||||
|
TrueUpReviewAuthFeatureOpenId = "openid_connect"
|
||||||
|
TrueUpReviewAuthFeatureGuestAccess = "guest_access"
|
||||||
|
)
|
||||||
|
|
||||||
type LicenseRecord struct {
|
type LicenseRecord struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
CreateAt int64 `json:"create_at"`
|
CreateAt int64 `json:"create_at"`
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ type TrueUpReviewProfile struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type TrueUpReviewPlugins struct {
|
type TrueUpReviewPlugins struct {
|
||||||
TotalPlugins int `json:"total_plugins"`
|
|
||||||
TotalActivePlugins int `json:"total_active_plugins"`
|
TotalActivePlugins int `json:"total_active_plugins"`
|
||||||
TotalInactivePlugins int `json:"total_inactive_plugins"`
|
TotalInactivePlugins int `json:"total_inactive_plugins"`
|
||||||
ActivePluginNames []string `json:"active_plugin_names"`
|
ActivePluginNames []string `json:"active_plugin_names"`
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user