filter out resources that have mission IDs
fix(influxdb): simplify auth check in PermissionAllowed
review(platform): update as noted in review
fix(influxdb): ensure permission has valid org id
I did this with a dumb editor macro, so some comments changed too.
Also rename root package from platform to influxdb.
In interest of minimizing risk, anyone importing the root package has
now aliased it to "platform" so that no changes beyond imports were
necessary in those files.
Lastly, replace the old platform module to local path /dev/null so that
nobody can accidentally reintroduce a platform dependency while
migrating platform code to influxdb.
feat(http): add http handler for proto service
feat(mock): add mock proto service
test(http): add proto handler tests
fix(platform): add view as option when adding a cell
feat(platform): add dashboard to proto struct
feat(fs): add filesystem implementation of proto
feat(http): add protos endpoints to api handler
feat(cmd/influxd/launcher): add protos path to server
doc(http): add protos to swagger
test(cmd/influxd/launcher): add --protos-path to launcher tests
fix(fs): remove unused args from test
fix(http): use platform.Error where appropriate
feat(platform): add functional options for platform errors
fix(testing): set dashboard ids properly in dashboard tests
feat(bolt): add dashboard specific views
fix(bolt): delete view when cell is removed or dashboard is deleted
all tests use a unique bucket based on the test file name. copied all tests over from flux repo
the tests are currently disabled due to engine consistency issues: https://github.com/influxdata/flux/issues/613
fix(http): add members/secrets/labels links on org response
fix(http:cmd/influxd): use secret service in api backend
fix(bolt): return empty list if there are no secrets for an org
chore(vault): add description of vault usage
* refactor(cmd/influxd): move driver code for influxd main package to sub-package so it can be reused.
* chore(query/influxql): moved query_test.go and requisite files to the influxql dir to be closer to the code it tests. (#2013)
This commit moves the `Main.cancel()` execution to the `main_test.go`
file so it's only executed for tests. This was interfering with the
shutdown process on the regular `influxd` binary.
Previously, the WithTicker option would call TickScheduler.Tick every
time the underlying time.Ticker sent a time on its channel. This meant
we used a 1s period, which meant that in the worst case, we would see a
tick at about 999ms after the second rollover.
This change increases the underlying time.Ticker frequency, but only
calls TickScheduler.Tick after a second rolls over. Since we now use a
tick frequency of 100ms, during normal operation, TickScheduler.Tick
will be called within 0.1s after the second rolls over.
* feat(platform): add label struct
* feat(platform): add label service interface
* WIP label service
* chore(http): simplify URMapping validation
* WIP label service skeleton
* add new GET labels handler
* feat(http): add POST handler for label service
* feat(http): add label delete handler
* fix json tag
* add happy path testing
* feat(http): add label endpoints to dashboard service
* make fmt
* add label delete handler
* make fmt again :(
* feat(bolt): add label implementation
* wire boltdb implementation of labels
* feat(mock): add mock for label service
* fix tests, add delete test
* add remaining tests, flesh out GET params
* unused code
* remove comments
* add labels endpoints
* clean up labels after deleting a dashboard
* fix issues from code review
* WIP remove type from labels
* feat(http): add label cli functions
* fixes
* make fmt
* feat(http): add labels to tasks and buckets
* feat(bolt): remove labels if their resources are deleted
* remove bolt cleanup for now
* make fmt
* type conversion magic
* feat(inmem): implement label service
* prevent race conditions
* remove labels from inmem if their resources are deleted
* fix race condition
* fix formatting
The flux query controller was updated to include a Shutdown method a
while ago. Explicitly handle query controller creation and shutdown
where applicable.
In influxd, this ensures that outstanding queries are handled before the
process dies. In tests, this ensures that query controller goroutines
aren't leaked, which drastically simplifies reading full stack traces.
This change also registers query controller metrics with the prometheus
registry in influxd.
- Brought over enterprise's QueryLogReader, with small adjustments
- Time filters are for the run's ScheduledFor field, per spec
- Adjusted run log timestamps for consistent formatting:
- ScheduledFor is RFC3339 because it's a whole-second timestamp
- StartedAt, FinishedAt use RFC3339Nano for high precision
- Several test adjustments to use relative time, for easier integration
with storage retention
feat(internal/fs): move influxDir function to internal package in base of repo
feat(cmd/influx): add local flag that operates on local file system
feat(cmd/influx): add local support for org command
feat(cmd/influx): add local support for user command
eat(cmd/influx): add local support for bucket command
feat(cmd/influx): add error for local with query/task/setup cmds
fix(cmd/influx): unshadow error in delete bucket command
fix(cmd/influx): update copy for local flag commands
feat(platform): add dashboard operation log interface
feat(bolt): add dashboard operation log to bolt client
feat(platform): add links to dashboard load response
fix(http): update links in json response of dashboards
feat(bolt): add operation logs for each resource
feat(http): add routes for operation logs
feat(cmd/influxd): set operation logs on http api backend
This also adjusts the TaskService interface's RetryRun method to accept
a task ID rather than an org ID. Internally, we still look up runs by
organization, and maybe that will change later, but this is a more
natural way for clients to look it up.
These are the log messages that get printed immediately when starting
the application for the first time. This fixes the messages to conform
to the logging style guide.
Before, if you ran `influx query` and didn't have --org-id, you would
get an unhelpful runtime error like `id must have a length of 16 bytes`.
After this, you get a more helpful `required flag(s) "org-id" not set`
error.
Now at startup, there will be a log line like:
Opened bolt database {"log_id": "0B5Oks9W000", "path": "influxd.bolt"}
Which gives a somewhat better idea of what's going on.
We are moving the necessary code for 2.0 from the influxdb 1.X
repository to the platform 2.0 repository. The logger is an unnecessary
dependency on the old influxdb that is making life more complicated.
The pb package was only referenced in cmd/influx/query.go, but in
dead code, since it uses the same machinery as the repl, which goes
through the HTTP endpoints, rather than the gRPC endpoints.
This pulls in the code that allows doing reads with flux into the
platform repo, and removes extra.go.
The reusable portion is under storage/reads, where the concrete
implementation for one of the platform's engines is in
storage/readservice.
In order to make this more reusable, the cursors had to move into
their own package, decoupling it from all of the other code in the
tsdb package. tsdb/cursors is this new package, and type/function
aliases have been added to the tsdb package to point at it.
The models package already is very light on transitive dependencies
and so it was allowed to be depended on in a concrete way in the
cursors package.
Finally, the protobuf definitions for issuing GRPC reads has been
moved into its own package for two reasons:
1. It's a clean separation, and helps keep it that way.
2. Many/most consumers will not be using GRPC. We just
use the datatypes to express the API which helps making
a GRPC server easier.
It is left up to future refactorings (specifically ones that involve
GPRC) to determine if these types should remain, or if there is a
cleaner way.
There's still some dependencies on both github.com/influxdata/influxql
and github.com/influxdata/influxdb/logger that we can hopefully remove
in future refactorings.
We reorganized the functions in flux to have the structure:
/functions
/inputs
/transformations
/outputs
this PR catches up platform to work with the new package layout.
As a separate refactoring issue, we should discuss:
from(bucket: ) should migrate from flux --> platform
to_http and to_kafka should migrate from platform --> flux
The race detector was picking up a data race because of the
unsynchronized reassignment of ctx:
```
$ go run -race ./cmd/influxd
...
^C
==================
WARNING: DATA RACE
Write at 0x00c00053d220 by main goroutine:
main.platformF()
/Users/mr/gomod/platform/cmd/influxd/main.go:381 +0x2cf7
github.com/spf13/cobra.(*Command).execute()
/Users/mr/go/pkg/mod/github.com/spf13/cobra@v0.0.3/command.go:766 +0x8b2
github.com/spf13/cobra.(*Command).ExecuteC()
/Users/mr/go/pkg/mod/github.com/spf13/cobra@v0.0.3/command.go:852 +0x432
github.com/spf13/cobra.(*Command).Execute()
/Users/mr/go/pkg/mod/github.com/spf13/cobra@v0.0.3/command.go:800 +0x38
main.Execute()
/Users/mr/gomod/platform/cmd/influxd/main.go:388 +0x4e
main.main()
/Users/mr/gomod/platform/cmd/influxd/main.go:46 +0x2f
Previous read at 0x00c00053d220 by goroutine 147:
main.platformF.func1()
/Users/mr/gomod/platform/cmd/influxd/main.go:330 +0x3c
Goroutine 147 (running) created at:
main.platformF()
/Users/mr/gomod/platform/cmd/influxd/main.go:329 +0x2554
github.com/spf13/cobra.(*Command).execute()
/Users/mr/go/pkg/mod/github.com/spf13/cobra@v0.0.3/command.go:766 +0x8b2
github.com/spf13/cobra.(*Command).ExecuteC()
/Users/mr/go/pkg/mod/github.com/spf13/cobra@v0.0.3/command.go:852 +0x432
github.com/spf13/cobra.(*Command).Execute()
/Users/mr/go/pkg/mod/github.com/spf13/cobra@v0.0.3/command.go:800 +0x38
main.Execute()
/Users/mr/gomod/platform/cmd/influxd/main.go:388 +0x4e
main.main()
/Users/mr/gomod/platform/cmd/influxd/main.go:46 +0x2f
==================
```
So just assign context.WithCancel to a new variable instead.
* add types to bucket service tests
* add type to bucket cmd interface
* bucket type needs to be defined in json for POST creations
* rip out bucket type stuff
* remove type from bucket tests
* add InternalBucketID helper fn
* remove more code
* remove org from internal bucket ID
Using query request struct to query resources
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Use query.ProxyRequest instead query.Request
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Proxy request from idpd
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Comments about the desired results
Signed-off-by: Lorenzo Fontana <lo@linux.com>
V1 endpoints working with flux
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Influxql working for v1
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Co-authored-by: Michael De Sa <mjdesa@gmail.com>
V2 influxql query endpoint working
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Co-authored-by: Michael De Sa <mjdesa@gmail.com>
Signed-off-by: Lorenzo Fontana <lo@linux.com>
V2 Flux compiler support
Co-authored-by: Michael De Sa <mjdesa@gmail.com>
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Improve comments in bolt sources and give error on self
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Co-authored-by: Michael De Sa <mjdesa@gmail.com>
Review tests failing
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Co-authored-by: Michael De Sa <mjdesa@gmail.com>
Avoid type casts for compiler types
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Co-authored-by: Michael De Sa <mjdesa@gmail.com>
Using nil instead of dbrp mapping service for influxql v1
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Check if compiler types are valid for influxql
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Organization as query param in the flux external handler
Signed-off-by: Lorenzo Fontana <lo@linux.com>
feat(http): update swagger documentation for flux query endpoint
feat(http): document query endpoint design
The code documented does not currently work. It is indended that this
will be implemented in follow up PRs.
feat(platform): move source to platform package
The source Query endpoint implements what's in the query swagger docs
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Co-authored-by: Michael De Sa <mjdesa@gmail.com>
feat(platform): allow for encoding and decoding of csv dialects
feat(platform): specify dialect in flux page
Co-authored-by: Andrew Watkins <andrew.watkinz@gmail.com>
Co-authored-by: Michael Desa <mjdesa@gmail.com>
test(testing): add tests for dashboards and cells
test(bolt): all conformance tests for dashbaords and cells
fix(bolt): rename dashboardV2Bucket to dashboardBucket
feat(chronograf): introduce v2 dashboards
Co-authored-by: Andrew Watkins <andrew.watkinz@gmail.com>
Co-authored-by: Michael Desa <mjdesa@gmail.com>
chore(chronograf): add tests for v2 dashboard reducer
Co-authored-by: Andrew Watkins <andrew.watkinz@gmail.com>
Co-authored-by: Michael Desa <mjdesa@gmail.com>
chore(chronograf): create dashboard from dashboard index
Co-authored-by: Andrew Watkins <andrew.watkinz@gmail.com>
Co-authored-by: Michael Desa <mjdesa@gmail.com>
chore(chronograf): move tests to same level of heirarchy as file tested
chronograf(chore): implement import dashboard with v2 api
chore(chronograf): delete dashboards from v2 api
chore(chronograf): add source health handler
chore(chronograf): move sources reducer to sources dir
chore(chronograf): remove stutter in notify
WIP stop namespacing by sourceID
chore(chronograf): no longer namespace routes under sources/:sourceID
WIP move dashtimeV1 to ranges
WIP remove CEO
chrore(chronograf): WIP Remove CEO and QueryMaker
chore(chronograf): introduce updateDashboard v2
chore(chronograf): Change cell to view
A dashboard's cell object now only contains positional information
for the cell in it's grid and a reference to the cell's view data.
A cell's view contains all necessary information for the cell's
visualization.
Add react-grid-layout types
chore(chronograf): introduce add cell
chore(chronograf): fix type errors
Not on DashboardPage
feat(platform): add cell methods to dashboard service interface
feat(mock): update dashboard service with cell methods
feat(testing): add cell methods to testing package
feat(bolt): add dashboard cell methods to bolt dashbaord service
feat(http): add cell routes to dashbaord handler
feat(platform): add dependent create/destroy of views from cells
chore(chronograf): introduce update dashboard cells endpoint
WIP update cells FE
fix(http): rename Cells to cells on dashboard cells response
chore(chronograf): re-introduce dashboard cell dragging
feat(platform): add copy dashboard cell to dashboard service
chore(platform): rename cell to view across codebase
feat(bolt): add replace dashboard tests
Move Layouts to Cells
Introduce delete cell
Fix broken test
fix(platform): update route for copying a a dashboard cell
UI for delete cell
Introduce copy cell
feat(platform): add copy view options to AddDashboardCell
feat(bolt): delete views when dashboard is removed.
Cleanup
Fix type errors
Fix links not updating
Remove annotations from RefreshingGraph
Sources and types work
fix(platform): add TODO.go files back
fix(view): rename visualizationType to type in view JSON
Co-authored-by: Deniz Kusefoglu <deniz@influxdata.com>
Co-authored-by: Michael Desa <mjdesa@gmail.com>
fix(dashboardTime): change dashboardID to string
Co-authored-by: Deniz Kusefoglu <deniz@influxdata.com>
Co-authored-by: Michael Desa <mjdesa@gmail.com>
feat(http): add dashboard api to swagger documentation
review(http): fix comments and function naming
feat(http): update sources swagger documentation
review(http): update the swagger to reflect the implementation
feat(platform): add usingView options to POST /dashboard/:id/cells
Moves idpe.QueryService into platform/query.ProxyQueryService
Splits the Request into ProxyRequest and Request.
Changes query.QueryService and query.AsyncQueryService to use a Request
type. This means that the Compiler interface is consumed by the service
to abstract out transpilation vs Flux compilation vs raw spec.
The transpiler handler is removed.
There are separate http handlers and service implementations for each of
the three query services.
Query logging types are moved into platform.
The ResultIterator now expects Cancel to always be called.
The fluxd binary exposes the query endpoint specified in the swagger
file.
We need a coordination layer to facilitate the communication in the api to the task service.
The api was also not connected in main to the http service.
It was effectively a copied and pasted platform.ID, so change it to a
type alias. Once our known references to the query/id package are
updated to platform.ID, we'll delete the package.
feat(platform): add dashboard service interface and associated types
feat(bolt): add bolt implementation ofplatform dashboard service
feat(http): add dashboard http handler and http implementation dashboard service
feat(cmd/idpd): use bolt dashboard service in idpd
test(testing): add conformance test for dashboard service
test(bolt): ensure conforms dashboard service conforms to tests
fix(platform): rename DashboardContents to DashboardCellContents in test
fix(bolt): correct mispelled comments
This removes the `--org` parameter because we can't properly decode the
name into an organization id without access to the idp daemon. We will
either have to open access to that or not have that feature.
The /query endpoint didn't have an orgID parameter so we can't have one
in the transpiler endpoint. This removes the parameter and replaces it
with a command line parameter that sets which organization we are using
for querying ifql.
The query service now handles some errors (not all) from the ifqld
service. This way, the transpiler, which uses the query service, can
report when it encounters an error from ifqld.
The transpiler will now correctly return errors in the JSON response.
The http package now contains a server that handles signals and proper
shutdown procedure. It has now been updated to use it.
The http package has also added a `ListenAndServe` convenience function
that is similar to the `net/http` one, but also takes in a logger and
will automatically use the most common signals when running an http
server.
feat(platform): add id to authorization
feat(platform): add user arg to CreateAuthorization method on auth svc
migrate(platform): move idp command to platform directory
This comit did not move the ifql command as it depends on the query
service which has yet to be migrated.
feat(platform): add optional user name to authorization struct
feat(platform): add organization name to bucket struct
Additionally allow filtering buckets by organization name.
feat(prom): ensure that prom auth svc implement base interface
feat(prometheus): add user to create authorization method
feat(prom): drop user string from create authorization
feat(zap): ensure that zap auth svc implements base service interface
feat(zap): add user to create authorization method
feat(zap): drop user string from create authorization
feat(http): add ids to authorization service
feat(http): ensure that http authoriztaion service implements auth svc interface
feat(http): use authorization ids in authorization handler
squash(http): add check for http status accepted in authorization service
feat(http): clean up authorization service and handlers
feat(http): drop user string from create authorization
fix(http): normalize the http authorization service
feat(http): normalize bucket service and handler methods
Additonally, we added support for DELETE bucket
feat(http): add delete user handler
Additionally, there was a bit of general cleanup
feat(http): add delete route for organization handler and service
Did a bit of additional cleanup of the http code.
test(testing): add service conformance tests
test(testing): add organization service conformance tests
test(testing): add conformance test for orgs service
Additionally, there was a bit of cleanup in the users service tests
test(testing): add conformance test for authorizations service
test(testing): update auth tests to validate that user exists
test(testing): update authorization conformance tests with user name
test(testing): update bucket conformance tests to include organizations
feat(bolt): add bolt implementation services
feat(bolt): add bolt implementation of organization service
feat(bolt): add bolt implementation of users service
feat(bolt): add bolt implementation of authorization service
feat(bolt): add user to create authorization method
feat(bolt): drop user string from create authorization
fix(bolt): set user name on authorization after put
feat(bolt): update bucket servie to include organizations
feat(bolt): add dependent destroy of resources
feat(cmd/idpd): use bolt services in platform server
feat(cmd/idpd): use bolt organization service in platform server
feat(cmd/idpd): use bolt users service in plaform server
feat(cmd/idpd): use bolt client as authorization service
feat(cmd/idp): show user name in output of auth sub command
feat(cmd/idp): clean up bucket subcommand of idp command
fix(cmd/idp): normalize idp command output for users
fix(cmd/idp): normalize auth subcommand output
feat(cmd/idp): add support for delete organiztion command
migrate(idp): move ifql subcommand of idp to platform