github.com/vnforks/kid@v5.11.1+incompatible/app/plugin_statuses.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 "net/http" 8 9 "github.com/mattermost/mattermost-server/model" 10 ) 11 12 // GetPluginStatus returns the status for a plugin installed on this server. 13 func (a *App) GetPluginStatus(id string) (*model.PluginStatus, *model.AppError) { 14 pluginsEnvironment := a.GetPluginsEnvironment() 15 if pluginsEnvironment == nil { 16 return nil, model.NewAppError("GetPluginStatus", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented) 17 } 18 19 pluginStatuses, err := pluginsEnvironment.Statuses() 20 if err != nil { 21 return nil, model.NewAppError("GetPluginStatus", "app.plugin.get_statuses.app_error", nil, err.Error(), http.StatusInternalServerError) 22 } 23 24 // Add our cluster ID 25 for _, status := range pluginStatuses { 26 if status.PluginId == id { 27 status.ClusterId = a.GetClusterId() 28 return status, nil 29 } 30 } 31 return nil, model.NewAppError("GetPluginStatus", "app.plugin.not_installed.app_error", nil, "", http.StatusBadRequest) 32 } 33 34 // GetPluginStatuses returns the status for plugins installed on this server. 35 func (a *App) GetPluginStatuses() (model.PluginStatuses, *model.AppError) { 36 pluginsEnvironment := a.GetPluginsEnvironment() 37 if pluginsEnvironment == nil { 38 return nil, model.NewAppError("GetPluginStatuses", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented) 39 } 40 41 pluginStatuses, err := pluginsEnvironment.Statuses() 42 if err != nil { 43 return nil, model.NewAppError("GetPluginStatuses", "app.plugin.get_statuses.app_error", nil, err.Error(), http.StatusInternalServerError) 44 } 45 46 // Add our cluster ID 47 for _, status := range pluginStatuses { 48 status.ClusterId = a.GetClusterId() 49 } 50 51 return pluginStatuses, nil 52 } 53 54 // GetClusterPluginStatuses returns the status for plugins installed anywhere in the cluster. 55 func (a *App) GetClusterPluginStatuses() (model.PluginStatuses, *model.AppError) { 56 pluginStatuses, err := a.GetPluginStatuses() 57 if err != nil { 58 return nil, err 59 } 60 61 if a.Cluster != nil && *a.Config().ClusterSettings.Enable { 62 clusterPluginStatuses, err := a.Cluster.GetPluginStatuses() 63 if err != nil { 64 return nil, model.NewAppError("GetClusterPluginStatuses", "app.plugin.get_cluster_plugin_statuses.app_error", nil, err.Error(), http.StatusInternalServerError) 65 } 66 67 pluginStatuses = append(pluginStatuses, clusterPluginStatuses...) 68 } 69 70 return pluginStatuses, nil 71 } 72 73 func (a *App) notifyPluginStatusesChanged() error { 74 pluginStatuses, err := a.GetClusterPluginStatuses() 75 if err != nil { 76 return err 77 } 78 79 // Notify any system admins. 80 message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PLUGIN_STATUSES_CHANGED, "", "", "", nil) 81 message.Add("plugin_statuses", pluginStatuses) 82 message.Broadcast.ContainsSensitiveData = true 83 a.Publish(message) 84 85 return nil 86 }