mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-21 20:02:22 +02:00
git-subtree-dir: foundations/stream git-subtree-mainline:328a7dc269git-subtree-split:b7b6930b09
86 lines
3.5 KiB
Go
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,
|
|
}
|
|
}
|