89 lines
2.7 KiB
Go
89 lines
2.7 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package pluggable
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
const (
|
|
EndorsementPluginEnvVar = "ENDORSEMENT_PLUGIN_ENV_VAR"
|
|
ValidationPluginEnvVar = "VALIDATION_PLUGIN_ENV_VAR"
|
|
)
|
|
|
|
// EndorsementPluginActivationFolder returns the name of the folder that if
|
|
// the file of the peer's id in it exists - it indicates that the endorsement plugin was activated
|
|
// for that peer
|
|
func EndorsementPluginActivationFolder() string {
|
|
return os.Getenv(EndorsementPluginEnvVar)
|
|
}
|
|
|
|
// SetEndorsementPluginActivationFolder sets the name of the folder
|
|
// that if the file of the peer's id in it exists - it indicates that the endorsement plugin was activated
|
|
// for that peer
|
|
func SetEndorsementPluginActivationFolder(path string) {
|
|
os.Setenv(EndorsementPluginEnvVar, path)
|
|
}
|
|
|
|
// ValidationPluginActivationFilePath returns the name of the folder that if
|
|
// the file of the peer's id in it exists - it indicates that the validation plugin was activated
|
|
// for that peer
|
|
func ValidationPluginActivationFolder() string {
|
|
return os.Getenv(ValidationPluginEnvVar)
|
|
}
|
|
|
|
// SetValidationPluginActivationFolder sets the name of the folder
|
|
// that if the file of the peer's id in it exists - it indicates that the validation plugin was activated
|
|
// for that peer
|
|
func SetValidationPluginActivationFolder(path string) {
|
|
os.Setenv(ValidationPluginEnvVar, path)
|
|
}
|
|
|
|
func markPluginActivation(dir string) {
|
|
fileName := filepath.Join(dir, viper.GetString("peer.id"))
|
|
_, err := os.Create(fileName)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to create file %s: %v", fileName, err))
|
|
}
|
|
}
|
|
|
|
// PublishEndorsementPluginActivation makes it known that the endorsement plugin
|
|
// was activated for the peer that is invoking this function
|
|
func PublishEndorsementPluginActivation() {
|
|
markPluginActivation(EndorsementPluginActivationFolder())
|
|
}
|
|
|
|
// PublishValidationPluginActivation makes it known that the validation plugin
|
|
// was activated for the peer that is invoking this function
|
|
func PublishValidationPluginActivation() {
|
|
markPluginActivation(ValidationPluginActivationFolder())
|
|
}
|
|
|
|
// CountEndorsementPluginActivations returns the number of peers that activated
|
|
// the endorsement plugin
|
|
func CountEndorsementPluginActivations() int {
|
|
return listDir(EndorsementPluginActivationFolder())
|
|
}
|
|
|
|
// CountValidationPluginActivations returns the number of peers that activated
|
|
// the validation plugin
|
|
func CountValidationPluginActivations() int {
|
|
return listDir(ValidationPluginActivationFolder())
|
|
}
|
|
|
|
func listDir(d string) int {
|
|
dir, err := os.ReadDir(d)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed listing directory %s: %v", d, err))
|
|
}
|
|
return len(dir)
|
|
}
|