Giter Site home page Giter Site logo

bucketeer-io / bucketeer Goto Github PK

View Code? Open in Web Editor NEW
246.0 3.0 13.0 11.93 MB

Feature Flag Management and A/B Testing platform

Home Page: https://bucketeer.io

License: Apache License 2.0

Starlark 0.01% Makefile 0.14% Go 37.40% Mustache 0.22% Dockerfile 0.05% Python 0.02% Shell 0.03% JavaScript 49.26% TypeScript 12.63% HTML 0.07% CSS 0.14% PureBasic 0.01% Stan 0.01% Smarty 0.02%
feature-flags ab-testing data-driven experiments feature-toggles bucketeer beta-testing dark-launch data-analysis multivariate-testing

bucketeer's People

Contributors

bimalgrg519 avatar bucketeer-bot avatar cre8ivejp avatar cut0 avatar dependabot[bot] avatar github-actions[bot] avatar kakcy avatar kentakozuka avatar knanao avatar masaaania avatar ono-max avatar ouchi2501 avatar renovate[bot] avatar ta1m1kam avatar ubisoft-potato avatar unvalley avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

bucketeer's Issues

perf: Improve the user evaluation process

Currently, Bucketeer evaluates all the feature flags when a single flag changes.
For environments with a small number of flags, it doesn't impact the loading on the server and network traffic. But there are a few projects running more than 300 flags simultaneously, and it could affect the response time and network traffic in the future.

To avoid that, we decided to change the evaluation process to evaluate and return only the changed flags.
We will also need to make changes in the client SDKs.

TODO:

  • Backend
  • Android SDK
  • iOS SDK
  • JavaScript SDK

fix: Default and off variation not being updated when changing variation type

When the user adds many variations and changes the default and off variation to use anything above index 1, changing the variation type from STRING to BOOLEAN will delete the extra variations. Still, it doesn't update the default and off variation.

How to reproduce

1- Add a new Feature Flag
2- Change the variation type to STRING
3- Add 3 new variations
4- Change the ON and OFF variation values to variations 4 and 5, respectively
5- Change the variation type to BOOLEAN

Screen Shot 2022-12-28 at 21 50 35

chore: add features field to list segment api

Describe the feature you'd like

Currently, Bucketeer shows the segment user as follows:
Screen Shot 2023-06-09 at 14 11 58

If the segment user is used, it shows "In Use". If not, "Not In Use". Although it's useful, it would be better to show which feature uses this segment user. I implement this part of the backend.

Background

No response

Alternative solutions

No response

feat: be able to check what evaluation the user received on the console UI

Describe the feature you'd like

The feature checking evaluation on UI would be helpful for users to confirm the returned value on current settings.

Background

When setting complicated evaluation strategy, it would be hard for users to check if the settings are valid or expected.

Alternative solutions

No response

feat: manage the sql migration and schema changes in the main repository

Currently, we manage the SQL migration and schema changes in another repository. This must be done in the main repository. Otherwise, people hosting the project can't get the updates.

In addition to that, we will modify the migration-mysql service implementation not to access the GitHub repo so that we don't have to put an extra secret (GitHub personal access token) on the Kubernetes cluster.

chore: Modular monolithic architecture

Summary

Bucketeer chose a microservices architecture in the early stages of development, but as the number of services grew, the following problems emerged:

  • Increasing infra costs
  • Increasing learning costs for contribution and self-host

These disadvantages could intimidate future users from adopting Bucketeer.

While the benefits gained by microservices architecture are also hard to dismiss.
Microservices architecture has allowed us to implement properly separated services quickly.

We think the modular monolithic architecture will allow us to enjoy the benefits of microservices architecture while reducing its disadvantages.

Architecture202302 (1)

TODO

  • backend service integration
  • consumer service integration
  • improve implementation and remove services
    • feature-recorder
    • feature-segment-persister
    • account-apikey-cacher
  • replace old sdk and remove services
    • metrics-event-persister

Status

We have integrated eleven microservices into a service named backend with the following PRs:

Architecture202307

feat: Tag filter in the search filter options

To improve the feature flag page search, we should add the tag filter in the filter options.
Also, we should list the current tags saved in the DB on the feature flag create and push create pages to make it easier to know what flag is used in the current environment.

test: deploy httpstan when running unit tests locally

Describe the feature you'd like

Currently, when we run make test-go the unit tests for the experiment will fail because they make requests to the httpstan server.

In the GitHub Actions, we deploy it as a service.
https://github.com/bucketeer-io/bucketeer/blob/main/.github/workflows/pr-go.yaml#L26-L31

It would be nice if we automated the httpstan process before running the unit tests locally in the Makefile.

Background

No response

Alternative solutions

No response

feat: AWS support

Currently, Bucketeer only can be operated in the Google Cloud Platform.
Because we are also getting requests to support AWS, let's implement it!

If there is demand, we also may consider supporting Microsoft Azure.

feat: New Dashboard V3

A new UI is coming!

  • UX Audit

  • Design

  • Frontend development

  • Organization page

    • create environment
    • update environment

feat: be able to re-order the rules on the targeting tab

Describe the feature you'd like

In some cases, we want to re-order the configured rules on the targeting tab. We could move them using drag-and-drop functionality to re-order them. So we won't need to recreate them.

Background

No response

Alternative solutions

No response

ci: add CODEOWNERS

Describe the feature you'd like

Add CODEOWNERS to assign reviewers automatically.

Background

No response

Alternative solutions

No response

test: fix cannot delete or update a parent row when deleting e2e data

Version

0.3.0

Describe the bug

To delete the e2e data using the hack script, we include the test ID in the flag trigger description. There was a test not including the description in the test which caused the SQL error Cannot delete or update a parent row.

Steps to reproduce the bug

No response

Expected behavior

No response

Relevant log output

Error 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`master`.`flag_trigger`, CONSTRAINT `foreign_flag_trigger_feature_id_environment_namespace` FOREIGN KEY (`feature_id`, `environment_namespace`) REFERENCES `feature` (`id`, `environment_namespa)


### Additional information

_No response_

chore: use kubernetes cron job instead of creating individual batch services

Currently, we have a few batch services running cron jobs and executing some tasks from time to time.

To improve maintenance and reduce the number of microservices, we decided to use Kubernetes cron job.

Batch service list

  • pkg/experiment/cmd/batch/batch.go
    • experiment_status_updater: Start and stop experiments
  • pkg/notification/sender/informer/batch/job.go
    • feature_state_watcher: Notify the stale feature flags
    • experiment_running_watcher: Notify running experiments
    • mau_count: Notify the MAU once a month
  • pkg/opsevent/cmd/batch/batch.go
    • ops_event_count_watcher: Disable a feature flag based on the event rate
    • datetime_watcher: Enable or Disable a feature flag based on the schedule

TODO

  • Create a new batch service
  • Convert the current implementation into an API in the new batch service
  • Configure the Kubernetes cron job to call those APIs

Dashboard documentation

Describe the feature you'd like

Currently, Bucketeer documentation only covers the SDK integration. It needs to provide guides about how users can use the dashboard.

Background

The Bucketeer dashboard has several configuration tabs whose functions are not clear for new users. In addition, the documentation does not present any guide on how to start using the dashboard and creating flags. Therefore, we can add new sections to the documentation covering these issues.

Alternative solutions

No response

feat: add a batch to create a partition in the MySQL

Describe the feature you'd like

Currently, we count the MAU by checking the partition size on the mau table.
Every month, we need to create a new partition manually. Because we could forget to create it, we must automate this process to avoid future issues.

For deletion, we already have the batch running once per month to delete old partitions. We can reuse this batch and change it to create a partition instead of deleting it. We might need to make other changes, but it can be used as a reference.
https://github.com/bucketeer-io/bucketeer/blob/main/pkg/batch/jobs/mau/mau_partition_deleter.go

Manifest (Batch service)
https://github.com/bucketeer-io/bucketeer/blob/main/manifests/bucketeer/charts/batch/values.yaml

API
https://github.com/bucketeer-io/bucketeer/blob/main/pkg/batch/api/api.go#L100-L103

PR(deleter)
#584

Background

No response

Alternative solutions

No response

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Awaiting Schedule

These updates are awaiting their schedule. Click on a checkbox to get an update now.

  • chore(deps): update dependency google-cloud-core to v1.7.3
  • chore(deps): update dependency optimize-css-assets-webpack-plugin to v5.0.8
  • chore(deps): update dependency protobuf to v3.20.3
  • chore(deps): update dependency pyparsing to v3.0.9
  • chore(deps): update dependency urllib3 to v1.26.16
  • chore(deps): update envoyproxy/envoy-alpine docker tag to v1.21.6
  • chore(deps): update react monorepo (@types/react, @types/react-dom, eslint-plugin-react-hooks)
  • fix(deps): update dependency @heroicons/react to v1.0.6
  • fix(deps): update dependency @popperjs/core to v2.11.8
  • fix(deps): update dependency bytes to v3.1.2
  • fix(deps): update dependency google-cloud-logging to v1.15.3
  • fix(deps): update dependency jstat to v1.9.6
  • fix(deps): update dependency protobuf to v3.20.3
  • fix(deps): update dependency pymysql to v1.0.3 (PyMySQL, pymysql)
  • fix(deps): update dependency react-chartjs-2 to v2.11.2
  • fix(deps): update dependency react-redux to v7.2.9
  • fix(deps): update dependency uuid to v8.3.2
  • fix(deps): update dependency yup to v0.32.11
  • fix(deps): update module github.com/itchyny/gojq to v0.12.13
  • fix(deps): update module github.com/nicksnyder/go-i18n/v2 to v2.2.1
  • chore(deps): update arduino/setup-protoc action to v1.3.0
  • chore(deps): update babel monorepo (@babel/core, @babel/preset-env, @babel/preset-react, @babel/preset-typescript)
  • chore(deps): update dependency @types/node to v14.18.48
  • chore(deps): update dependency black to v22.12.0
  • chore(deps): update dependency charset-normalizer to v2.1.1
  • chore(deps): update dependency cypress to v6.9.1
  • chore(deps): update dependency dotenv to v8.6.0
  • chore(deps): update dependency eslint to v7.32.0
  • chore(deps): update dependency eslint-config-prettier to v8.8.0
  • chore(deps): update dependency eslint-plugin-cypress to v2.13.3
  • chore(deps): update dependency eslint-plugin-import to v2.27.5
  • chore(deps): update dependency eslint-plugin-jsx-a11y to v6.7.1
  • chore(deps): update dependency eslint-plugin-react to v7.32.2
  • chore(deps): update dependency google-api-core to v1.34.0
  • chore(deps): update dependency google-api-python-client to v2.88.0
  • chore(deps): update dependency googleapis-common-protos to v1.59.0
  • chore(deps): update dependency grpcio to v1.55.0
  • chore(deps): update dependency grpcio-tools to v1.55.0
  • chore(deps): update dependency httplib2 to v0.22.0
  • chore(deps): update dependency idna to v3.4
  • chore(deps): update dependency marshmallow to v3.19.0
  • chore(deps): update dependency mini-css-extract-plugin to v1.6.2
  • chore(deps): update dependency pandas to v1.5.3
  • chore(deps): update dependency postcss-import to v14.1.0
  • chore(deps): update dependency postcss-loader to v4.3.0
  • chore(deps): update dependency prettier to v2.8.8
  • chore(deps): update dependency pyasn1 to v0.5.0
  • chore(deps): update dependency pyasn1-modules to v0.3.0
  • chore(deps): update dependency pycodestyle to v2.10.0
  • chore(deps): update dependency pytest-mock to v3.10.0
  • chore(deps): update dependency python-dotenv to v0.21.1
  • chore(deps): update dependency pytz to v2022.7.1
  • chore(deps): update dependency rsa to v4.9
  • chore(deps): update dependency scipy to v1.10.1
  • chore(deps): update dependency ts-jest to v26.5.6
  • chore(deps): update dependency typescript to v4.9.5
  • chore(deps): update dependency typing-extensions to v4.6.3
  • chore(deps): update dependency wrapt to v1.15.0
  • chore(deps): update dependency yarl to v1.9.2
  • chore(deps): update emotion monorepo to v11.11.0 (@emotion/babel-preset-css-prop, @emotion/react, @emotion/styled)
  • chore(deps): update formatjs monorepo (@formatjs/cli, react-intl)
  • chore(deps): update index.docker.io/library/python docker tag to v3.11.3
  • chore(deps): update jest monorepo to v26.6.3 (babel-jest, jest)
  • chore(deps): update module k8s.io/code-generator to v0.27.2
  • chore(deps): update nginx docker tag to v1.25.0
  • chore(deps): update nrwl monorepo (@nrwl/cli, @nrwl/cypress, @nrwl/eslint-plugin-nx, @nrwl/jest, @nrwl/linter, @nrwl/react, @nrwl/tao, @nrwl/web, @nrwl/workspace, nx)
  • chore(deps): update python docker tag to v3.11
  • chore(deps): update slackapi/slack-github-action action to v1.24.0
  • chore(deps): update typescript-eslint monorepo to v4.33.0 (@typescript-eslint/eslint-plugin, @typescript-eslint/parser)
  • fix(deps): update dependency @headlessui/react to v1.7.15
  • fix(deps): update dependency @hookform/resolvers to v2.9.11
  • fix(deps): update dependency @material-ui/pickers to v3.3.10
  • fix(deps): update dependency @reduxjs/toolkit to v1.9.5
  • fix(deps): update dependency @tailwindcss/forms to v0.5.3
  • fix(deps): update dependency apscheduler to v3.10.1 (APScheduler, apscheduler)
  • fix(deps): update dependency classnames to v2.3.2
  • fix(deps): update dependency core-js to v3.30.2
  • fix(deps): update dependency date-fns to v2.30.0
  • fix(deps): update dependency date-fns-tz to v1.3.8
  • fix(deps): update dependency dayjs to v1.11.8
  • fix(deps): update dependency document-register-element to v1.14.10
  • fix(deps): update dependency formik to v2.4.1
  • fix(deps): update dependency google-api-python-client to v2.88.0
  • fix(deps): update dependency google-protobuf to v3.21.2
  • fix(deps): update dependency grpcio-health-checking to v1.54.2
  • fix(deps): update dependency pandas to v1.5.3
  • fix(deps): update dependency prometheus-client to v0.17.0
  • fix(deps): update dependency query-string to v7.1.3
  • fix(deps): update dependency react-datepicker to v4.12.0
  • fix(deps): update dependency react-datetime-picker to v3.5.0
  • fix(deps): update dependency react-dropzone to v11.7.1
  • fix(deps): update dependency react-hook-form to v7.44.3
  • fix(deps): update dependency react-popper to v2.3.0
  • fix(deps): update dependency react-router-dom to v5.3.4
  • fix(deps): update dependency redux to v4.2.1
  • fix(deps): update dependency redux-thunk to v2.4.2
  • fix(deps): update dependency scipy to v1.10.1
  • fix(deps): update dependency tslib to v2.5.3
  • fix(deps): update dependency twin.macro to v2.8.2
  • fix(deps): update material-ui monorepo (@material-ui/core, @material-ui/icons, @material-ui/lab)
  • fix(deps): update module contrib.go.opencensus.io/exporter/stackdriver to v0.13.14
  • fix(deps): update module github.com/aws/aws-sdk-go-v2/config to v1.18.25
  • fix(deps): update module github.com/aws/aws-sdk-go-v2/service/kms to v1.22.0
  • fix(deps): update module github.com/bucketeer-io/bucketeer to v0.2.0
  • fix(deps): update module github.com/go-sql-driver/mysql to v1.7.1
  • fix(deps): update module github.com/golang-migrate/migrate/v4 to v4.16.1
  • fix(deps): update module go.uber.org/zap to v1.24.0
  • fix(deps): update module gopkg.in/alecthomas/kingpin.v2 to v2.3.2
  • chore(deps): update arduino/setup-protoc action to v2
  • chore(deps): update dependency @testing-library/react to v14
  • chore(deps): update dependency @types/node to v18
  • chore(deps): update dependency async-timeout to v4
  • chore(deps): update dependency attrs to v23
  • chore(deps): update dependency autoprefixer to v10
  • chore(deps): update dependency black to v23
  • chore(deps): update dependency cachetools to v5
  • chore(deps): update dependency chardet to v5
  • chore(deps): update dependency charset-normalizer to v3
  • chore(deps): update dependency cypress to v12
  • chore(deps): update dependency dotenv to v16
  • chore(deps): update dependency eslint to v8
  • chore(deps): update dependency flake8 to v6
  • chore(deps): update dependency google-api-core to v2
  • chore(deps): update dependency google-auth to v2
  • chore(deps): update dependency google-cloud-core to v2
  • chore(deps): update dependency mini-css-extract-plugin to v2
  • chore(deps): update dependency optimize-css-assets-webpack-plugin to v6
  • chore(deps): update dependency packaging to v23
  • chore(deps): update dependency postcss-cli to v10
  • chore(deps): update dependency postcss-import to v15
  • chore(deps): update dependency postcss-loader to v7
  • chore(deps): update dependency pytest to v7
  • chore(deps): update dependency python-dotenv to v1
  • chore(deps): update dependency pytz to v2023
  • chore(deps): update dependency ts-node to v10
  • chore(deps): update dependency typescript to v5
  • chore(deps): update dependency tzlocal to v5
  • chore(deps): update dependency urllib3 to v2
  • chore(deps): update formatjs monorepo to v6 (major) (@formatjs/cli, react-intl)
  • chore(deps): update jest monorepo to v29 (major) (@types/jest, babel-jest, jest, ts-jest)
  • chore(deps): update nrwl monorepo (major) (@nrwl/cli, @nrwl/cypress, @nrwl/eslint-plugin-nx, @nrwl/jest, @nrwl/linter, @nrwl/react, @nrwl/tao, @nrwl/web, @nrwl/workspace, nx)
  • chore(deps): update react monorepo to v18 (major) (@types/react, @types/react-dom, react, react-dom)
  • chore(deps): update typescript-eslint monorepo to v5 (major) (@typescript-eslint/eslint-plugin, @typescript-eslint/parser)
  • chore(deps): update ubuntu docker tag to v22
  • fix(deps): update dependency @date-io/date-fns to v2
  • fix(deps): update dependency @heroicons/react to v2
  • fix(deps): update dependency @hookform/resolvers to v3
  • fix(deps): update dependency chart.js to v4
  • fix(deps): update dependency date-fns-tz to v2
  • fix(deps): update dependency google-cloud-logging to v3
  • fix(deps): update dependency grpc-health-checking to v1
  • fix(deps): update dependency history to v5
  • fix(deps): update dependency js-cookie to v3
  • fix(deps): update dependency option-t to v38
  • fix(deps): update dependency pandas to v2
  • fix(deps): update dependency prometheus-async to v22
  • fix(deps): update dependency protobuf to v4
  • fix(deps): update dependency pystan to v3
  • fix(deps): update dependency query-string to v8
  • fix(deps): update dependency react-chartjs-2 to v5
  • fix(deps): update dependency react-datetime-picker to v5
  • fix(deps): update dependency react-dropzone to v14
  • fix(deps): update dependency react-redux to v8
  • fix(deps): update dependency react-router-dom to v6
  • fix(deps): update dependency react-select to v5
  • fix(deps): update dependency twin.macro to v3
  • fix(deps): update dependency uuid to v9
  • fix(deps): update dependency yup to v1
  • fix(deps): update module github.com/robfig/cron to v1
  • fix(deps): update module gopkg.in/yaml.v2 to v3

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

dockerfile
hack/delete-e2e-data-mysql/Dockerfile
python/Dockerfile
  • index.docker.io/library/python 3.7.6-buster
  • index.docker.io/library/python 3.7.6-slim-buster
tools/dex/Dockerfile
  • ghcr.io/dexidp/dex v2.36.0
tools/httpstan/Dockerfile
  • python 3.9-slim
tools/runner/Dockerfile
  • ubuntu 18.04
ui/web-v2/Dockerfile
  • nginx 1.13.11-alpine
github-actions
.github/workflows/auto_merge.yaml
  • lewagon/wait-on-check-action v1.3.1@e106e5c43e8ca1edea6383a39a01c5ca495fd812
  • dependabot/fetch-metadata v1.5.1@cd6e996708b8cfe0b639401134a3b9a3177be7b2
.github/workflows/cla.yaml
  • contributor-assistant/github-action v2.3.0@5bfe123a0731f017d9c29550976bf724fe0870f5
.github/workflows/pr-go.yaml
  • actions/checkout v3
  • actions/setup-go v4
  • arduino/setup-protoc v1.1.2@64c0c85d18e984422218383b81c52f8b077404d3
  • actions/checkout v3
  • actions/setup-go v4
  • arduino/setup-protoc v1.1.2@64c0c85d18e984422218383b81c52f8b077404d3
  • actions/checkout v3
  • actions/setup-go v4
  • actions/checkout v3
  • arduino/setup-protoc v1.1.2@64c0c85d18e984422218383b81c52f8b077404d3
  • actions/checkout v3
  • actions/setup-go v4
  • arduino/setup-protoc v1.1.2@64c0c85d18e984422218383b81c52f8b077404d3
  • actions/checkout v3
  • actions/setup-go v4
  • arduino/setup-protoc v1.1.2@64c0c85d18e984422218383b81c52f8b077404d3
  • actions/checkout v3
  • actions/setup-go v4
  • arduino/setup-protoc v1.1.2@64c0c85d18e984422218383b81c52f8b077404d3
.github/workflows/pr-python.yaml
  • actions/checkout v3
  • actions/setup-python v4
  • snok/install-poetry v1.3.3@d45b6d76012debf457ab49dffc7fb7b2efe8071d
  • actions/cache v3
.github/workflows/pr-title-validation.yaml
  • amannn/action-semantic-pull-request v5.2.0@c3cd5d1ea3580753008872425915e343e351ab54
.github/workflows/pr-ui-web.yaml
  • actions/checkout v3
  • actions/setup-node v3
  • actions/cache v3
  • actions/checkout v3
  • actions/setup-node v3
  • actions/cache v3
  • actions/checkout v3
  • actions/setup-node v3
  • actions/cache v3
  • arduino/setup-protoc v1
.github/workflows/publish_chart.yaml
  • actions/checkout v3
  • lewagon/wait-on-check-action v1.3.1@e106e5c43e8ca1edea6383a39a01c5ca495fd812
  • Azure/setup-helm v3.5@5119fcb9089d432beecbf79bb2c7915207344b78
  • google-github-actions/auth v1.1.1@35b0e87d162680511bf346c299f71c9c5c379033
.github/workflows/push-image.yaml
  • actions/checkout v3
  • actions/checkout v3
  • lewagon/wait-on-check-action v1.3.1@e106e5c43e8ca1edea6383a39a01c5ca495fd812
  • actions/setup-go v4
  • arduino/setup-protoc v1.1.2@64c0c85d18e984422218383b81c52f8b077404d3
  • docker/setup-buildx-action v2.5.0@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c
  • docker/login-action v2.1.0@f4ef78c080cd8ba55a85445d5b36e214a81df20a
  • google-github-actions/auth v1.1.1@35b0e87d162680511bf346c299f71c9c5c379033
  • docker/login-action v2
  • actions/checkout v3
  • actions/setup-python v4
  • snok/install-poetry v1.3.3@d45b6d76012debf457ab49dffc7fb7b2efe8071d
  • actions/cache v3
  • docker/setup-buildx-action v2.5.0@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c
  • docker/login-action v2.1.0@f4ef78c080cd8ba55a85445d5b36e214a81df20a
  • google-github-actions/auth v1.1.1@35b0e87d162680511bf346c299f71c9c5c379033
  • docker/login-action v2
  • actions/checkout v3
  • actions/setup-node v3
  • actions/cache v3
  • arduino/setup-protoc v1.1.2@64c0c85d18e984422218383b81c52f8b077404d3
  • docker/setup-buildx-action v2.5.0@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c
  • docker/login-action v2.1.0@f4ef78c080cd8ba55a85445d5b36e214a81df20a
  • google-github-actions/auth v1.1.1@35b0e87d162680511bf346c299f71c9c5c379033
  • docker/login-action v2
  • actions/checkout v3
  • benc-uk/workflow-dispatch v1.2.2@798e70c97009500150087d30d9f11c5444830385
  • slackapi/slack-github-action v1.23.0@007b2c3c751a190b6f0f040e47ed024deaa72844
  • slackapi/slack-github-action v1.23.0@007b2c3c751a190b6f0f040e47ed024deaa72844
.github/workflows/release.yaml
  • google-github-actions/release-please-action v3.7.9
gomod
go.mod
  • go 1.20
  • cloud.google.com/go/bigquery v1.51.2
  • cloud.google.com/go/kms v1.11.0
  • cloud.google.com/go/profiler v0.3.1
  • cloud.google.com/go/pubsub v1.31.0
  • contrib.go.opencensus.io/exporter/stackdriver v0.8.0
  • github.com/VividCortex/mysqlerr v1.0.0
  • github.com/aws/aws-sdk-go-v2/config v1.17.10
  • github.com/aws/aws-sdk-go-v2/service/kms v1.21.1
  • github.com/blang/semver v3.5.1+incompatible
  • github.com/coreos/go-oidc v2.2.1+incompatible
  • github.com/go-redis/redis v6.15.9+incompatible
  • github.com/go-sql-driver/mysql v1.6.0
  • github.com/golang-migrate/migrate/v4 v4.11.0
  • github.com/golang/mock v1.6.0
  • github.com/golang/protobuf v1.5.3
  • github.com/gomodule/redigo v2.0.0+incompatible
  • github.com/google/go-cmp v0.5.9
  • github.com/googleapis/gax-go/v2 v2.10.0
  • github.com/itchyny/gojq v0.12.5
  • github.com/lib/pq v1.10.9
  • github.com/mna/redisc v1.3.2
  • github.com/nicksnyder/go-i18n/v2 v2.2.0
  • github.com/prometheus/client_golang v1.15.1
  • github.com/robfig/cron v0.0.0-20171101201047-2315d5715e36@2315d5715e36
  • github.com/slack-go/slack v0.12.2
  • github.com/stretchr/testify v1.8.4
  • github.com/tkuchiki/go-timezone v0.2.2
  • go.opencensus.io v0.24.0
  • go.uber.org/zap v1.13.0
  • golang.org/x/oauth2 v0.8.0
  • golang.org/x/sync v0.2.0
  • golang.org/x/text v0.9.0
  • golang.org/x/time v0.3.0
  • google.golang.org/api v0.125.0
  • google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc@e85fd2cbaebc
  • google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc@e85fd2cbaebc
  • google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc@e85fd2cbaebc
  • google.golang.org/grpc v1.55.0
  • google.golang.org/protobuf v1.30.0
  • gopkg.in/alecthomas/kingpin.v2 v2.2.6
  • gopkg.in/square/go-jose.v2 v2.6.0
  • gopkg.in/yaml.v2 v2.4.0
  • k8s.io/code-generator v0.0.0-20191003035328-700b1226c0bd@700b1226c0bd
hack/delete-e2e-data-mysql/go.mod
  • go 1.20
  • github.com/bucketeer-io/bucketeer v0.0.0-00010101000000-000000000000@000000000000
  • go.uber.org/zap v1.23.0
  • gopkg.in/alecthomas/kingpin.v2 v2.2.6
helm-values
manifests/bucketeer/charts/account-apikey-cacher/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/account/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/api-gateway/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/auditlog-persister/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/auditlog/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/auth/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/auto-ops/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/calculator/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/dex/values.yaml
  • asia-docker.pkg.dev/bucketeer-io/bucketeer/bucketeer-dex v0.2.0-134-g797e90c
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/environment/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/event-counter/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/event-persister-evaluation-events-dwh/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/event-persister-evaluation-events-evaluation-count/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/event-persister-evaluation-events-ops/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/event-persister-goal-events-dwh/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/event-persister-goal-events-ops/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/experiment/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/feature-recorder/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/feature-segment-persister/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/feature/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/metrics-event-persister/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/migration-mysql/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/notification-sender/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/notification/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/ops-event-batch/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/push-sender/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/push/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/user-persister/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
manifests/bucketeer/charts/web-gateway/values.yaml
  • envoyproxy/envoy-alpine v1.21.1
npm
ui/web-v2/package.json
  • @date-io/date-fns 1.3.13
  • @emotion/react 11.1.5
  • @emotion/styled 11.1.5
  • @headlessui/react ^1.5.0
  • @heroicons/react 1.0.5
  • @hookform/resolvers 2.6.1
  • @improbable-eng/grpc-web 0.15.0
  • @material-ui/core 4.11.1
  • @material-ui/icons 4.9.1
  • @material-ui/lab 4.0.0-alpha.56
  • @material-ui/pickers 3.2.10
  • @popperjs/core ^2.11.3
  • @reduxjs/toolkit 1.5.0
  • @tailwindcss/forms 0.3.4
  • @types/react-intl 3.0.0
  • babel-plugin-react-intl 8.2.25
  • bytes 3.1.1
  • chart.js 2.9.4
  • classnames 2.2.6
  • core-js 3.9.1
  • date-fns 2.16.1
  • date-fns-tz 1.2.2
  • dayjs 1.8.34
  • deep-equal 2.2.1
  • document-register-element 1.13.1
  • formik 2.2.9
  • google-protobuf 3.14.0
  • history 4.10.1
  • js-cookie 2.2.1
  • jstat 1.9.4
  • option-t 23.0.2
  • query-string 7.0.1
  • react 17.0.2
  • react-chartjs-2 2.11.1
  • react-date-range ^1.4.0
  • react-datepicker 4.1.1
  • react-datetime-picker 3.3.0
  • react-dom 17.0.2
  • react-dropzone 11.2.4
  • react-hook-form 7.14.1
  • react-intl 5.20.10
  • react-popper ^2.2.5
  • react-redux 7.2.6
  • react-router-dom 5.2.0
  • react-select 4.3.1
  • redux 4.1.0
  • redux-thunk 2.3.0
  • shallowequal 1.1.0
  • timeago.js 4.0.2
  • tslib 2.1.0
  • twin.macro 2.5.0
  • uuid 8.3.1
  • yup 0.32.9
  • @babel/core 7.14.8
  • @babel/preset-env 7.14.8
  • @babel/preset-react 7.14.5
  • @babel/preset-typescript 7.14.5
  • @emotion/babel-preset-css-prop 11.0.0
  • @formatjs/cli 4.2.33
  • @nrwl/cli 12.5.2
  • @nrwl/cypress 12.5.2
  • @nrwl/eslint-plugin-nx 12.5.2
  • @nrwl/jest 11.4.0
  • @nrwl/linter 12.5.2
  • @nrwl/react 12.5.2
  • @nrwl/tao 12.5.2
  • @nrwl/web 12.5.2
  • @nrwl/workspace 12.5.2
  • @testing-library/react 11.2.7
  • @types/jest 26.0.24
  • @types/node 14.14.33
  • @types/react 17.0.3
  • @types/react-dom 17.0.15
  • @typescript-eslint/eslint-plugin 4.3.0
  • @typescript-eslint/parser 4.3.0
  • autoprefixer 9.8.8
  • babel-jest 26.2.2
  • cypress 6.6.0
  • dotenv 8.2.0
  • eslint 7.10.0
  • eslint-config-prettier 8.1.0
  • eslint-plugin-cypress 2.11.2
  • eslint-plugin-import 2.23.4
  • eslint-plugin-jsx-a11y 6.4.1
  • eslint-plugin-react 7.23.1
  • eslint-plugin-react-hooks 4.2.0
  • jest 26.2.2
  • mini-css-extract-plugin 1.3.1
  • nx 11.4.0
  • optimize-css-assets-webpack-plugin 5.0.4
  • postcss 8.4.24
  • postcss-cli 8.3.1
  • postcss-import 14.0.2
  • postcss-loader 4.0.4
  • prettier 2.3.2
  • ts-jest 26.4.0
  • ts-node 9.1.1
  • ts-protoc-gen 0.15.0
  • typescript 4.3.4
pip_requirements
python/requirements.txt
  • aiohttp ==3.7.4.post0
  • apscheduler ==3.7.0
  • async-timeout ==3.0.1
  • attrs ==21.4.0
  • cachetools ==4.2.4
  • certifi ==2021.10.8
  • chardet ==4.0.0
  • charset-normalizer ==2.0.12
  • cython ==0.29.35
  • environs ==9.5.0
  • google-api-core ==1.31.5
  • google-api-python-client ==2.46.0
  • google-auth-httplib2 ==0.1.0
  • google-auth ==1.35.0
  • google-cloud-core ==1.7.2
  • google-cloud-logging ==1.15.1
  • google-cloud ==0.34.0
  • googleapis-common-protos ==1.56.0
  • grpc-health-checking ==0.0.1
  • grpcio-health-checking ==1.27.2
  • grpcio ==1.45.0
  • httplib2 ==0.20.4
  • idna ==3.3
  • marshmallow ==3.15.0
  • multidict ==6.0.4
  • numpy ==1.21.6
  • packaging ==21.3
  • pandas ==1.3.5
  • prometheus-async ==19.2.0
  • prometheus-client ==0.7.1
  • protobuf ==3.20.2
  • pyasn1-modules ==0.2.8
  • pyasn1 ==0.4.8
  • pymysql ==1.0.2
  • pyparsing ==3.0.8
  • pystan ==2.19.1.1
  • python-dateutil ==2.8.2
  • python-dotenv ==0.20.0
  • pytz ==2022.1
  • requests ==2.27.1
  • rsa ==4.8
  • scipy ==1.7.3
  • six ==1.16.0
  • typing-extensions ==4.2.0
  • tzlocal ==2.1
  • uritemplate ==4.1.1
  • urllib3 ==1.26.9
  • wrapt ==1.14.0
  • yarl ==1.7.2
poetry
python/pyproject.toml
  • APScheduler 3.7.0
  • PyMySQL 1.0.2
  • pandas ^1.2.5
  • prometheus-client 0.7.1
  • pystan 2.19.1.1
  • scipy ^1.5.3
  • environs ^9.3.4
  • grpc-health-checking 0.0.1
  • grpcio-health-checking 1.27.2
  • google-cloud-logging 1.15.1
  • prometheus-async 19.2.0
  • aiohttp 3.7.4.post0
  • google-cloud ^0.34.0
  • protobuf ^3.20.1
  • google-api-python-client ^2.45.0
  • flake8 ^3.9.2
  • pycodestyle ^2.7.0
  • pytest ^6.2.5
  • pytest-mock ^3.7.0
  • grpcio-tools ^1.45.0
  • black ^22.3.0

  • Check this box to trigger a request for Renovate to run again on this repository

feat: Prerequisite feature

This feature allows controlling the feature flag dependencies. It can make flags depend on other flags, making them prerequisites to enable a feature.

Add webhook trigger feature

This feature will allow the user to switch on/off remotely from a third-party application, like the NewRelic, DataDog, etc.

feat: flag trigger

Make it possible to turn on/off a flag via webhooks. It will make it easier for users who want to integrate actions in their metrics monitoring.

feat: Progressive rollout

Describe the feature you'd like

This feature allows the user to progressively roll out a feature flag by scheduling it.
Basically, the user will schedule the rollout from 1 to 100% of a feature flag, and Bucketeer will change the rollout percentage based on the user's configuration.

Background

No response

Alternative solutions

No response

feat: Language switcher menu

Currently, the default language is configured to Japanese, and there is no way to change it.

Place

Top right

Screen Shot 2022-12-26 at 17 03 34

Conditions

  • It will switch to the System language first. If there is no support, it switches to English.
  • If the user switches it manually, we save that info in the local storage to reuse it.

feat: remove python dependency from calculator service

Summary

Currently, the calculator service is written in Python, using Bayesian Algorithm to calculate the experiment probabilities.
Due to the following reasons, we want to rewrite the service in Go and, for Bayesian analysis, use the HttpStan.

  • Maintenance costs
  • Contribution and Development Learning costs
  • Improve the developing environment compatibility

Besides the Bayesian analysis, we can rewrite the entire calculator service in Go without any issues.
For the analysis, we can deploy a new service for HttpStan and the Go app to make requests to it.

It will also allow us to have the following features.

  • Automatic caching of compiled Stan models
  • Automatic caching of samples from Stan models
  • Parallel sampling

Currently, the calculator service calculates the probabilities once at a time. The Parallel sampling will also help us to improve this.

What the calculator does

  • List all experiments from all environments
  • Get the experiment's evaluation counter and goal counter from the event counter service
  • Deliver those data to the Pystan to calculate the probabilities
  • Save the experiment's probability into the DB
  • Stop the experiment if needed

Implementation

To simplify the implementation, we can implement it as an API in the experiment service, so we won't need to make changes in the helm chart, CI, etc. Also, most APIs we need for this task, the experiment service, have it already, and since it is related to the experiment, having this API in the experiment service makes sense.

  • Create the docker image for the HttpStan and implement it in the helm chart (Reference)
  • Reimplement the Python code in the experiment service as an API
  • Write unit and e2e tests (E2E test reference)
  • Implement Kubernetes cron job (Reference)
  • Delete unnecessary GitHub Action Workflows (PR, Push image) and their container images

Source code

feat: Make it easier to understand why the user cannot delete some variations

This is not an issue. The problem is the variation is being used in the default variation or the off variation settings, so it cannot be deleted until the user changes those settings to other variations.

It can be improved by adding a tooltip on the delete icon, letting the user know why he can't delete it.

If it is used in the default variation settings

  • This variation cannot be deleted because it is used in the default variation settings.
  • このバリエーションはデフォルトバリエーション設定で使用されているため、削除できません。

If it is used in the off-variation settings

  • This variation cannot be deleted because it is used in the off-variation settings.
  • このバリエーションはオフバリエーション設定で使用されているため、削除できません。

If it is used in both

  • This variation cannot be deleted because it is used in the default and the off-variation settings
  • このバリエーションは、デフォルトおよびオフバリエーション設定で使用されているため、削除できません。

Note: The default variation has two types. Fixed and Rollout. To make it simple, let's use the same message for both.

fix: Validation is not working on the targeting rule when the segment user is selected

Things to fix

  • When the user clicks on the Add rule button, the Save with comment button should stay disabled until the validation returns true
  • When the rule condition is Compare, it must check the value field has at least one value
  • When the rule condition is User segment, it must check the segment user ID is selected
  • When the rule condition is Date, it must check the field

Screen Shot 2022-12-28 at 20 40 15

feat: Live demo

Create an environment for the people considering using Bucketeer, so they can check the UI and also give us feedback.

perf: reduce costs in the background services

To reduce compute engine and PubSub costs, it would be great to implement the serverless architecture to those services that only need to run when there are experiments or auto operations.

Services

Feature

  • feature-recorder

Experiments

  • event-persister-evaluation-events-dwh
  • event-persister-goal-events-dwh

Auto OPS

  • event-persister-evaluation-events-ops
  • event-persister-goal-events-ops

chore: remove duration field from LatencyMetricsEvent

We must remove the duration field from LatencyMetricsEvent after updating all the SDKs in production.

// TODO: When updated to the SDK that uses ev.LatencySecond, we must remove the implementation that use ev.Duration.
if ev.Duration == nil && ev.LatencySecond == 0 {
return MetricsSaveErrInvalidDuration
}
if ev.ApiId == eventproto.ApiId_UNKNOWN_API {
return MetricsSaveErrUnknownApiId
}
var tag string
if ev.Labels != nil {
tag = ev.Labels["tag"]
}
// TODO: When updated to the SDK that uses ev.LatencySecond, we must remove the implementation that use ev.Duration.
if ev.LatencySecond != 0 {
sdkLatencyHistogram.WithLabelValues(
env,
tag,
ev.ApiId.String(),
event.SdkVersion,
event.SourceId.String(),
).Observe(ev.LatencySecond)
return nil
}
dur, err := ptypes.Duration(ev.Duration)
if err != nil {
return MetricsSaveErrInvalidDuration
}
sdkLatencyHistogram.WithLabelValues(
env,
tag,
ev.ApiId.String(),
event.SdkVersion,
event.SourceId.String(),
).Observe(dur.Seconds())
return nil

feat: be able to run the project locally using the dev container

Currently, there is no way to run the project locally, making it hard for the contributors to contribute.
We have two gateways, and we deploy the microservices in Kubernetes via helm.

  • api-gateway (Client SDK)
  • web-gateway (Dashboard)

The api-gateway uses managed Google services such as Pubsub, Memorystore (Redis), CloudSQL (MySQL), and BigQuery. We also use Bigtable, Kafka, and Druid for real-time analysis, but we will replace them with BigQuery in January.

The web-gateway uses managed Google services such as Memorystore (Redis) and CloudSQL (MySQL).

Add Webhook admin pages

As part of #181, first, we need to add the Webhook admin page, so the user can create Webhook URLs to be used as a trigger in the Auto Operations.

Pages

  • List
  • Create
  • Update

Example

Screen Shot 2023-02-15 at 18 39 02

push-image workflow fails due to a newline in commit messages

Version

main

Describe the bug

dispatch job in push-image workflow fails if commit message has multiple lines.

Steps to reproduce the bug

No response

Expected behavior

No response

Relevant log output

No response

Additional information

No response

feat: generate automatically the custom user attribute list in the targeting rules

Currently, when the user configures a rule on the Targeting tab on the console, he needs to type the custom attribute key.
Because the attributes are sent from the SDK to the server, we can automate this by generating a list to display on the console, it will avoid typos and misconfiguration, causing incorrect conditions when evaluating the end-user.

Auto Ops conditions is duplicated

When the user adds a new condition or operation in the Auto Ops tab after clicking on the Submit button, it reloads the page but doesn't clear the data used in the request. The Submit button should be disabled.

Because of that, if the user clicks again on the Submit, it will duplicate the data until the data used in the request is cleared.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.