Files
huly-platform/foundations/stream/internal/pkg/config/config.go
T
Denis Bykhov 6e77cbb762 Add 'foundations/stream/' from commit 'b7b6930b0992ae48f08d37745d5e6e5e26517337'
git-subtree-dir: foundations/stream
git-subtree-mainline: 328a7dc269
git-subtree-split: b7b6930b09
2025-11-26 23:06:55 +05:00

86 lines
3.5 KiB
Go

// Copyright © 2025 Hardcore Engineering Inc.
//
// Licensed under the Eclipse Public 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 https://www.eclipse.org/legal/epl-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.
// Package config provides configuration for the application
package config
import (
"net/url"
"time"
"github.com/pkg/errors"
"github.com/kelseyhightower/envconfig"
)
// Config represents configuration for the huly-stream application.
type Config struct {
LogLevel string `split_words:"true" default:"debug" desc:"sets log level for the application"`
ServerSecret string `split_words:"true" default:"" desc:"server secret required to generate and verify tokens"`
PprofEnabled bool `split_words:"true" default:"true" desc:"starts profile server on localhost:6060 if true"`
Insecure bool `split_words:"true" default:"false" desc:"ignores authorization check if true"`
ServeURL string `split_words:"true" desc:"listen on url" default:"0.0.0.0:1080"`
EndpointURL *url.URL `split_words:"true" default:"s3://127.0.0.1:9000" desc:"S3 or Datalake endpoint, example: s3://my-ip-address, datalake://my-ip-address"`
MaxParallelTranscodingCount int `split_words:"true" default:"2" desc:"how much parallel transcodings can be processed"`
MaxThreadCount int `split_words:"true" default:"4" desc:"max number of threads for transcoder"`
QueueConfig string `split_words:"true" default:"" desc:"queue config"`
Region string `split_words:"true" default:"" desc:"service region"`
OutputDir string `split_words:"true" default:"/tmp/transcoing/" desc:"path to the directory with transcoding result."`
Timeout time.Duration `default:"5m" desc:"timeout for the upload"`
// OpenTelemetry configuration
OtelEnabled bool `split_words:"true" default:"true" desc:"enable OpenTelemetry"`
OtelServiceName string `split_words:"true" default:"stream" desc:"service name for OpenTelemetry"`
OtelServiceVersion string `split_words:"true" default:"1.0.0" desc:"service version for OpenTelemetry"`
OtelTracesEnabled bool `split_words:"true" default:"true" desc:"enable OpenTelemetry traces"`
OtelMetricsEnabled bool `split_words:"true" default:"true" desc:"enable OpenTelemetry metrics"`
OtelLogsEnabled bool `split_words:"true" default:"false" desc:"enable OpenTelemetry logs"`
}
// FromEnv creates new Config from env
func FromEnv() (*Config, error) {
var result Config
if err := envconfig.Usage("stream", &result); err != nil {
return nil, err
}
if err := envconfig.Process("stream", &result); err != nil {
return nil, err
}
if *result.EndpointURL == (url.URL{}) {
result.EndpointURL = nil
}
if !result.Insecure && result.ServerSecret == "" {
return nil, errors.New("server secret must be provided for secure confgiuration")
}
return &result, nil
}
// Endpoint returns upload address
func (c *Config) Endpoint() *url.URL {
var scheme = "https"
if c.Insecure {
scheme = "http"
}
return &url.URL{
Scheme: scheme,
Host: c.EndpointURL.Host,
}
}