Files
plane/monitor/cli/cmd/start.go
Nikhil ea5e249157 dev: primev2 (#962)
* dev: new license activation workflow for one and pro users  (#739)

* feat: added feature flag package for decrypting and refreshing the feature flags value

* feat: added feature flagging route for route handlers

* feat: added feature flag worker for managing and distributing feature flags

* feat: implemented feature flag api implementation inside ff handler

* feat: added exponential retry interval inside feature flagging

* fix: route pattern of feature flag endpoint from monitor

* feat: created endpoint to activate workspace from monitor

* feat: made changes to accomodate db and activate endpoint

* dev: update multi tenant environment settings

* dev: workspace license activation flow

* dev: update license activate endpoint

* dev: update workspace license activate endpoint

* feat: added feature flag user sync logic

* feat: added constants and sync logic with private key inside

* feat: added port as env variable

* feat: added modification for removing license key in healthcheck

* feat: example env pushed

* fix: update monitor endpoints and license activation function

* dev: initiate free workspace only for self hosted instances

* dev: self hosting license endpoint updates

* dev: remove monitor db

* dev: update handlers

* dev: self hosted license subscription web

* dev: removed computed in self hosted subscription

* fix: prime server url and delete old license while creating new license in sqlite

* chore: subscription activation alert after successfull activation.

* dev: update feature flag endpoints

* fix: handled several cases of feature flags

* fix: linting errors

* dev: update monitor to handle workspace activation

* dev: update decryption algorithm

* feat: separated activation payload with the sync payload

* dev: update feature flags endpoint

* dev: change type for workspace sync

* feat: added isActive flag for user activation

* feat: removed creation of free users in monitor

* feat: added method for workspace product

* dev: add user email in types

* feat: added method for workspace product

* fix: uer license feature flag fetch

* fix: handler fixed for feature key

* chore: self managed license activation

* chore: update validation license flow.

* chore: license activation success.

* dev: resync workspace license on activation

* chore: plane one success modal.

* feat: added constructs to inject private key build time

* feat: updated the docker file with private key build argument

* feat: added consumption od DEFAULT_PRIVATE_KEY when building monitor

* dev: update private key

---------

Co-authored-by: Henit Chobisa <chobisa.henit@gmail.com>
Co-authored-by: gurusainath <gurusainath007@gmail.com>
Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>
Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>

* fix: prime workflow fix for private key generation

* dev: remove license check and update release notes

* fix: build args for build ci (#916)

* fix: GitHub ci build for monitor (#919)

* fix: errors in github ci

* fix: added base 64 private key

* fix: instance register script

* fixed monitor for CGO startup failure (#923)

* chore: current plan api and server base urls

* fix: monitor startup failure

---------

Co-authored-by: pablohashescobar <nikhilschacko@gmail.com>

* fix: monitor feature flagging (#926)

* feat: added startup flag handler inside monitor (#927)

* feat: added logs for debugging (#929)

* fix: parsing of private key with base64 (#932)

* fix: private key parsing for monitor (#934)

* fix: throw error if private key is not parsable

* fix: printing private key

* fix: added print of private key in handler

* feat: optimized build for monitor

* feat: removed debug statements

* feat: added volume for compose

* fix: monitor build issues (#935)

* fix: success modal fix for self hosted users. (#928)

* feat: Added refresh worker job inside monitor for refreshing licenses (#937)

* dev: add instance validation endpoints

* feat: added startup refresh handler for getting new licenses

* feat: updated title

---------

Co-authored-by: pablohashescobar <nikhilschacko@gmail.com>

* chore: clear workspace license on restart (#939)

* fix: product check endpoint for license creation (#941)

* feat: added constraints for db models in monitor (#946)

* feat: added constraints for db models in monitor

* feat: updated constraints

* fix: model constraint for db (#948)

* fix: one users need to be active for sync (#950)

* fix: one users need to be active for sync

* fix: added isolation for files for handlers

* fix: workspace offline activation for syncing users

* fix: update license over syncing in monitor (#954)

---------

Co-authored-by: Henit Chobisa <chobisa.henit@gmail.com>
Co-authored-by: gurusainath <gurusainath007@gmail.com>
Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>
Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
Co-authored-by: pushya22 <130810100+pushya22@users.noreply.github.com>
2024-08-27 19:22:27 +05:30

117 lines
3.2 KiB
Go

/*
Copyright © 2024 plane.so engineering@plane.so
*/
package cmd
import (
"context"
"os"
"os/signal"
"syscall"
prime_api "github.com/makeplane/plane-ee/monitor/lib/api"
"github.com/makeplane/plane-ee/monitor/lib/feat_flag"
"github.com/makeplane/plane-ee/monitor/pkg/constants/descriptors"
"github.com/makeplane/plane-ee/monitor/pkg/db"
"github.com/makeplane/plane-ee/monitor/pkg/handlers"
"github.com/makeplane/plane-ee/monitor/pkg/types"
"github.com/makeplane/plane-ee/monitor/pkg/worker"
"github.com/spf13/cobra"
)
var StartCmd = &cobra.Command{
Use: descriptors.CMD_START_USAGE,
Short: descriptors.CMD_START_USAGE_DESC,
RunE: func(cmd *cobra.Command, args []string) error {
healthCheckInterval, err := cmd.Flags().GetInt(descriptors.FLAG_INTERVAL_HEALTHCHECK)
if err != nil {
return err
}
db.Initialize()
_, err = feat_flag.ParsePrivateKey(PRIVATE_KEY)
if err != nil {
return err
}
feat_flag.ParsePrivateKey(PRIVATE_KEY)
// If we are upgraded, we need to update all the licenses present inside the
// DB to the current version
// Establish signals for catching signal interrupts
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
// Initializing cronhandler for cron tasks
cronHandler := handlers.NewCronHandler(types.Credentials{
InstanceId: INSTANCE_ID,
Host: HOST,
MachineSignature: MACHINE_SIGNATURE,
AppDomain: APP_DOMAIN,
AppVersion: APP_VERSION,
}, CmdLogger)
api := prime_api.NewMonitorApi(HOST, MACHINE_SIGNATURE, INSTANCE_ID, APP_VERSION)
// Initializing the http handler for addressing requests
httpHandler := handlers.NewHttpHandler(handlers.HTTPHandlerOptions{
Host: "0.0.0.0",
Port: PORT,
Logger: *CmdLogger,
PrivateKey: PRIVATE_KEY,
Api: &api,
})
instanceHandler := handlers.NewInstanceHandler(api)
cronHandler.ScheduleCronJobs(handlers.SchedulerOptions{
HealthCheckInterval: int64(healthCheckInterval),
})
/* TODO: If the db has an encrypted cypher then we can instantiate the
* feature flag engine right away, else we cannot instantiate */
// Creating a new instance of the worker
worker := worker.NewPrimeWorker(CmdLogger)
// Notify the channel on interrupt signals (Ctrl+C)
go func() {
<-sigs
err := instanceHandler.Deactivate()
if err != nil {
CmdLogger.Error(context.Background(), err.Error())
}
worker.Shutdown()
}()
// Registering the Jobs to the cron handler
worker.RegisterJob("Resync Instance Licenses", func(ctx context.Context) {
err := handlers.UpdateFlagsHandler(ctx, api)
if err != nil {
CmdLogger.Error(ctx, err.Error())
}
})
worker.RegisterJob("Prime Scheduler", cronHandler.Start)
worker.RegisterJob("Prime Monitor Router", httpHandler.StartHttpServer)
worker.RegisterJob("Activate Current Instance", func(ctx context.Context) {
err := instanceHandler.Activate()
if err != nil {
CmdLogger.Error(ctx, err.Error())
}
})
// Starting the Jobs in background
worker.StartJobsInBackground()
worker.Wait()
return nil
},
}
func init() {
StartCmd.Flags().Int(descriptors.FLAG_INTERVAL_HEALTHCHECK, 5, descriptors.FLAG_INTERVAL_HEALTHCHECK_USE)
rootCmd.AddCommand(StartCmd)
}