Skip to content

Commit

Permalink
fix(windows): Windows service not starting up (#1512)
Browse files Browse the repository at this point in the history
Upstream code was modified, which broke the Windows service startup logic.
  • Loading branch information
fguimond authored Mar 20, 2024
1 parent d2d4c35 commit 751e0b4
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
1 change: 1 addition & 0 deletions .changelog/1512.fixed.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
+ fix(windows): Fixed startup problem when running as a Windows service
31 changes: 20 additions & 11 deletions otelcolbuilder/cmd/collector_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,17 @@ func (s *windowsService) start(elog *eventlog.Log, colErrorChannel chan error) e
// Parse all the flags manually.
_ = elog.Info(6668, "parsing arguments")
if err := s.flags.Parse(os.Args[1:]); err != nil {
_ = elog.Info(6669, fmt.Sprintf("error parsing argumetn: %v", err))
_ = elog.Info(6669, fmt.Sprintf("error parsing argument: %v", err))
return err
}

_ = elog.Info(6670, "new collector with flags")
var err error
s.col, err = newCollectorWithFlags(s.settings, s.flags)
err = updateSettingsUsingFlags(&s.settings, s.flags)
if err != nil {
return err
}
s.col, err = otelcol.NewCollector(s.settings)
if err != nil {
return err
}
Expand Down Expand Up @@ -220,20 +224,25 @@ func withWindowsCore(elog *eventlog.Log) func(zapcore.Core) zapcore.Core {
}
}

func newCollectorWithFlags(set otelcol.CollectorSettings, flags *flag.FlagSet) (*otelcol.Collector, error) {
func updateSettingsUsingFlags(set *otelcol.CollectorSettings, flags *flag.FlagSet) error {
if set.ConfigProvider == nil {
resolverSet := &set.ConfigProviderSettings.ResolverSettings
configFlags := getConfigFlag(flags)
if len(configFlags) == 0 {
return nil, errors.New("at least one config flag must be provided")
}

var err error
set.ConfigProvider, err = otelcol.NewConfigProvider(newDefaultConfigProviderSettings(configFlags))
if err != nil {
return nil, err
if len(configFlags) > 0 {
resolverSet.URIs = configFlags
}
if len(resolverSet.URIs) == 0 {
return errors.New("at least one config flag must be provided")
}
// Provide a default set of providers and converters if none have been specified.
// TODO: Remove this after CollectorSettings.ConfigProvider is removed and instead
// do it in the builder.
if len(resolverSet.Providers) == 0 && len(resolverSet.Converters) == 0 {
set.ConfigProviderSettings = newDefaultConfigProviderSettings(resolverSet.URIs)
}
}
return otelcol.NewCollector(set)
return nil
}

func newDefaultConfigProviderSettings(uris []string) otelcol.ConfigProviderSettings {
Expand Down

0 comments on commit 751e0b4

Please sign in to comment.