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  }