...

Source file src/edge-infra.dev/pkg/edge/datasync/cushion/config.go

Documentation: edge-infra.dev/pkg/edge/datasync/cushion

     1  package cushion
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"os"
     7  	"time"
     8  
     9  	metaApi "edge-infra.dev/pkg/edge/apis/meta"
    10  	"edge-infra.dev/pkg/edge/datasync/couchdb"
    11  
    12  	"github.com/peterbourgon/ff/v3"
    13  )
    14  
    15  type Config struct {
    16  	Port int
    17  
    18  	//
    19  	BannerBSLID  string
    20  	BannerEdgeID string
    21  	ProjectID    string
    22  	Subscription string
    23  	Topic        string
    24  	MaxMessages  int
    25  
    26  	// CouchDB Config
    27  	CouchURL      string
    28  	CouchPort     string
    29  	CouchUsername string
    30  	CouchPassword string
    31  
    32  	BulkSize        int
    33  	MaxWaitInterval time.Duration
    34  
    35  	CouchNamespace string
    36  }
    37  
    38  func NewConfig() (*Config, error) {
    39  	cfg := &Config{}
    40  
    41  	fs := flag.NewFlagSet("couchctl", flag.ExitOnError)
    42  
    43  	cfg.BindFlags(fs)
    44  
    45  	if err := ff.Parse(fs, os.Args[1:], ff.WithEnvVarNoPrefix(), ff.WithIgnoreUndefined(true)); err != nil {
    46  		return cfg, err
    47  	}
    48  
    49  	if err := cfg.Validate(); err != nil {
    50  		return cfg, err
    51  	}
    52  
    53  	return cfg, nil
    54  }
    55  
    56  func (c *Config) BindFlags(fs *flag.FlagSet) {
    57  	fs.IntVar(
    58  		&c.Port,
    59  		"Port",
    60  		8082,
    61  		"Metrics port",
    62  	)
    63  
    64  	fs.StringVar(
    65  		&c.BannerBSLID,
    66  		"banner-id",
    67  		"",
    68  		"BSL Banner ID",
    69  	)
    70  
    71  	fs.StringVar(
    72  		&c.BannerEdgeID,
    73  		"banner-edge-id",
    74  		"",
    75  		"Banner Edge ID",
    76  	)
    77  
    78  	fs.StringVar(
    79  		&c.ProjectID,
    80  		"foreman-id",
    81  		"",
    82  		"the foreman gcp project id",
    83  	)
    84  
    85  	fs.StringVar(
    86  		&c.Subscription,
    87  		"subscription-id",
    88  		"",
    89  		"the pubsub subscription id",
    90  	)
    91  
    92  	fs.StringVar(
    93  		&c.Topic,
    94  		"topic-id",
    95  		"data-sync-c2e",
    96  		"the pubsub topic id",
    97  	)
    98  
    99  	fs.IntVar(
   100  		&c.MaxMessages,
   101  		"max-mess",
   102  		500,
   103  		"Maximum messages to pull at once",
   104  	)
   105  
   106  	fs.StringVar(
   107  		&c.CouchURL,
   108  		"couch-url",
   109  		couchdb.URI,
   110  		"Couch URL to ingest data into",
   111  	)
   112  
   113  	fs.StringVar(
   114  		&c.CouchPort,
   115  		"couch-port",
   116  		couchdb.Port,
   117  		"Couch DB port to ingest data into",
   118  	)
   119  
   120  	fs.StringVar(
   121  		&c.CouchUsername,
   122  		"couch-username",
   123  		"",
   124  		"Couch DB username to ingest data into",
   125  	)
   126  
   127  	fs.StringVar(
   128  		&c.CouchPassword,
   129  		"couch-password",
   130  		"",
   131  		"Couch DB password to ingest data into",
   132  	)
   133  
   134  	fs.IntVar(&c.BulkSize,
   135  		"bulk-size",
   136  		1000,
   137  		"couchdb bulk document size",
   138  	)
   139  
   140  	fs.DurationVar(&c.MaxWaitInterval,
   141  		"max-wait-interval",
   142  		5*time.Second,
   143  		"how long to wait for bulk insert",
   144  	)
   145  
   146  	fs.StringVar(
   147  		&c.CouchNamespace,
   148  		"couch-namespace",
   149  		"data-sync-couchdb",
   150  		"Couch DB namespace",
   151  	)
   152  }
   153  
   154  func (c *Config) Validate() error {
   155  	if c.Port == 0 {
   156  		return fmt.Errorf("missing PORT environment variable")
   157  	}
   158  
   159  	if c.BannerEdgeID == "" {
   160  		return fmt.Errorf("missing BANNER_EDGE_ID environment variable")
   161  	}
   162  
   163  	if c.ProjectID == "" {
   164  		return fmt.Errorf("missing FOREMAN_ID environment variable")
   165  	}
   166  
   167  	if c.Subscription == "" {
   168  		return fmt.Errorf("missing SUBSCRIPTION_ID environment variable")
   169  	}
   170  
   171  	if c.Topic == "" {
   172  		return fmt.Errorf("missing TOPIC_ID environment variable")
   173  	}
   174  
   175  	if c.MaxMessages == 0 {
   176  		return fmt.Errorf("missing MAX_MESS environment variable")
   177  	}
   178  
   179  	if c.CouchURL == "" {
   180  		return fmt.Errorf("missing COUCH_URL environment variable")
   181  	}
   182  
   183  	if c.CouchPort == "" {
   184  		return fmt.Errorf("missing COUCH_PORT environment variable")
   185  	}
   186  
   187  	if c.CouchUsername == "" {
   188  		return fmt.Errorf("missing COUCH_USERNAME environment variable")
   189  	}
   190  
   191  	if c.CouchPassword == "" {
   192  		return fmt.Errorf("missing COUCH_PASSWORD environment variable")
   193  	}
   194  
   195  	if c.BulkSize == 0 {
   196  		return fmt.Errorf("missing BULK_SIZE environment variable")
   197  	}
   198  
   199  	if c.MaxWaitInterval == 0 {
   200  		return fmt.Errorf("missing MAX_WAIT_INTERVAL environment variable")
   201  	}
   202  
   203  	if c.CouchNamespace == "" {
   204  		return fmt.Errorf("missing COUCH_NAMESPACE environment variable")
   205  	}
   206  	return nil
   207  }
   208  
   209  func (c *Config) ReplicationDB() string {
   210  	return couchdb.ReplicationDBPrefix + metaApi.Hash(c.BannerEdgeID)
   211  }
   212  

View as plain text