mirror of
https://github.com/makeplane/plane.git
synced 2026-07-13 14:01:45 +02:00
* 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>
117 lines
3.2 KiB
Go
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)
|
|
}
|