github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/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/v5/model" 10 ) 11 12 // GetPluginStatus returns the status for a plugin installed on this server. 13 func (s *Server) GetPluginStatus(id string) (*model.PluginStatus, *model.AppError) { 14 pluginsEnvironment := s.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 && s.Cluster != nil { 27 status.ClusterId = s.Cluster.GetClusterId() 28 return status, nil 29 } 30 } 31 return nil, model.NewAppError("GetPluginStatus", "app.plugin.not_installed.app_error", nil, "", http.StatusNotFound) 32 } 33 34 // GetPluginStatus returns the status for a plugin installed on this server. 35 func (a *App) GetPluginStatus(id string) (*model.PluginStatus, *model.AppError) { 36 return a.Srv().GetPluginStatus(id) 37 } 38 39 // GetPluginStatuses returns the status for plugins installed on this server. 40 func (s *Server) GetPluginStatuses() (model.PluginStatuses, *model.AppError) { 41 pluginsEnvironment := s.GetPluginsEnvironment() 42 if pluginsEnvironment == nil { 43 return nil, model.NewAppError("GetPluginStatuses", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented) 44 } 45 46 pluginStatuses, err := pluginsEnvironment.Statuses() 47 if err != nil { 48 return nil, model.NewAppError("GetPluginStatuses", "app.plugin.get_statuses.app_error", nil, err.Error(), http.StatusInternalServerError) 49 } 50 51 // Add our cluster ID 52 for _, status := range pluginStatuses { 53 if s.Cluster != nil { 54 status.ClusterId = s.Cluster.GetClusterId() 55 } else { 56 status.ClusterId = "" 57 } 58 } 59 60 return pluginStatuses, nil 61 } 62 63 // GetPluginStatuses returns the status for plugins installed on this server. 64 func (a *App) GetPluginStatuses() (model.PluginStatuses, *model.AppError) { 65 return a.Srv().GetPluginStatuses() 66 } 67 68 // GetClusterPluginStatuses returns the status for plugins installed anywhere in the cluster. 69 func (a *App) GetClusterPluginStatuses() (model.PluginStatuses, *model.AppError) { 70 pluginStatuses, err := a.GetPluginStatuses() 71 if err != nil { 72 return nil, err 73 } 74 75 if a.Cluster() != nil && *a.Config().ClusterSettings.Enable { 76 clusterPluginStatuses, err := a.Cluster().GetPluginStatuses() 77 if err != nil { 78 return nil, model.NewAppError("GetClusterPluginStatuses", "app.plugin.get_cluster_plugin_statuses.app_error", nil, err.Error(), http.StatusInternalServerError) 79 } 80 81 pluginStatuses = append(pluginStatuses, clusterPluginStatuses...) 82 } 83 84 return pluginStatuses, nil 85 } 86 87 func (a *App) notifyPluginStatusesChanged() error { 88 pluginStatuses, err := a.GetClusterPluginStatuses() 89 if err != nil { 90 return err 91 } 92 93 // Notify any system admins. 94 message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PLUGIN_STATUSES_CHANGED, "", "", "", nil) 95 message.Add("plugin_statuses", pluginStatuses) 96 message.GetBroadcast().ContainsSensitiveData = true 97 a.Publish(message) 98 99 return nil 100 }