summaryrefslogtreecommitdiffstats
path: root/app/plugin_statuses.go
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2018-06-25 12:33:13 -0700
committerGitHub <noreply@github.com>2018-06-25 12:33:13 -0700
commit1e5c432e1029601a664454388ae366ef69618d62 (patch)
treecb9e8bfb66640ac3b29c934bb2c3202d25aeb368 /app/plugin_statuses.go
parentecefa6cdd1e7376046bbec82c1b47f7756fea646 (diff)
downloadchat-1e5c432e1029601a664454388ae366ef69618d62.tar.gz
chat-1e5c432e1029601a664454388ae366ef69618d62.tar.bz2
chat-1e5c432e1029601a664454388ae366ef69618d62.zip
MM-10702 Moving plugins to use hashicorp go-plugin. (#8978)
* Moving plugins to use hashicorp go-plugin. * Tweaks from feedback.
Diffstat (limited to 'app/plugin_statuses.go')
-rw-r--r--app/plugin_statuses.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/app/plugin_statuses.go b/app/plugin_statuses.go
new file mode 100644
index 000000000..1a80beaab
--- /dev/null
+++ b/app/plugin_statuses.go
@@ -0,0 +1,63 @@
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
+// See LICENSE.txt for license information.
+
+package app
+
+import (
+ "net/http"
+
+ "github.com/mattermost/mattermost-server/model"
+)
+
+// GetPluginStatuses returns the status for plugins installed on this server.
+func (a *App) GetPluginStatuses() (model.PluginStatuses, *model.AppError) {
+ if a.Plugins == nil || !*a.Config().PluginSettings.Enable {
+ return nil, model.NewAppError("GetPluginStatuses", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented)
+ }
+
+ pluginStatuses, err := a.Plugins.Statuses()
+ if err != nil {
+ return nil, model.NewAppError("GetPluginStatuses", "Unable to get plugin statuses", nil, err.Error(), http.StatusInternalServerError)
+ }
+
+ // Add our cluster ID
+ for _, status := range pluginStatuses {
+ status.ClusterId = a.GetClusterId()
+ }
+
+ return pluginStatuses, nil
+}
+
+// GetClusterPluginStatuses returns the status for plugins installed anywhere in the cluster.
+func (a *App) GetClusterPluginStatuses() (model.PluginStatuses, *model.AppError) {
+ pluginStatuses, err := a.GetPluginStatuses()
+ if err != nil {
+ return nil, err
+ }
+
+ if a.Cluster != nil && *a.Config().ClusterSettings.Enable {
+ clusterPluginStatuses, err := a.Cluster.GetPluginStatuses()
+ if err != nil {
+ return nil, model.NewAppError("GetClusterPluginStatuses", "app.plugin.get_cluster_plugin_statuses.app_error", nil, err.Error(), http.StatusInternalServerError)
+ }
+
+ pluginStatuses = append(pluginStatuses, clusterPluginStatuses...)
+ }
+
+ return pluginStatuses, nil
+}
+
+func (a *App) notifyPluginStatusesChanged() error {
+ pluginStatuses, err := a.GetClusterPluginStatuses()
+ if err != nil {
+ return err
+ }
+
+ // Notify any system admins.
+ message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PLUGIN_STATUSES_CHANGED, "", "", "", nil)
+ message.Add("plugin_statuses", pluginStatuses)
+ message.Broadcast.ContainsSensitiveData = true
+ a.Publish(message)
+
+ return nil
+}