70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
// Licensed to Elasticsearch B.V. under one or more contributor
|
|
// license agreements. See the NOTICE file distributed with
|
|
// this work for additional information regarding copyright
|
|
// ownership. Elasticsearch B.V. licenses this file to you under
|
|
// the Apache License, Version 2.0 (the "License"); you may
|
|
// not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
//+build linux,go1.8 darwin,go1.10
|
|
//+build cgo
|
|
|
|
package plugin
|
|
|
|
import (
|
|
"flag"
|
|
"strings"
|
|
|
|
"github.com/elastic/beats/libbeat/common/cfgwarn"
|
|
"github.com/elastic/beats/libbeat/logp"
|
|
)
|
|
|
|
type pluginList struct {
|
|
paths []string
|
|
}
|
|
|
|
func (p *pluginList) String() string {
|
|
return strings.Join(p.paths, ",")
|
|
}
|
|
|
|
func (p *pluginList) Set(v string) error {
|
|
for _, path := range p.paths {
|
|
if path == v {
|
|
logp.Warn("%s is already a registered plugin")
|
|
return nil
|
|
}
|
|
}
|
|
p.paths = append(p.paths, v)
|
|
return nil
|
|
}
|
|
|
|
var plugins = &pluginList{}
|
|
|
|
func init() {
|
|
flag.Var(plugins, "plugin", "Load additional plugins")
|
|
}
|
|
|
|
func Initialize() error {
|
|
if len(plugins.paths) > 0 {
|
|
cfgwarn.Experimental("loadable plugin support is experimental")
|
|
}
|
|
|
|
for _, path := range plugins.paths {
|
|
logp.Info("loading plugin bundle: %v", path)
|
|
|
|
if err := LoadPlugins(path); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|