github.com/ashishbhate/mattermost-server@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  }