From 1e5c432e1029601a664454388ae366ef69618d62 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Mon, 25 Jun 2018 12:33:13 -0700 Subject: MM-10702 Moving plugins to use hashicorp go-plugin. (#8978) * Moving plugins to use hashicorp go-plugin. * Tweaks from feedback. --- app/plugin_statuses.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 app/plugin_statuses.go (limited to 'app/plugin_statuses.go') 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 +} -- cgit v1.2.3-1-g7c22