{"id":20260451,"url":"https://github.com/influxdata/influxdb-client-dart","last_synced_at":"2025-04-11T01:33:22.117Z","repository":{"id":39592721,"uuid":"304570609","full_name":"influxdata/influxdb-client-dart","owner":"influxdata","description":"InfluxDB (v2+) Client Library for Dart and Flutter","archived":false,"fork":false,"pushed_at":"2025-01-08T13:48:24.000Z","size":464,"stargazers_count":25,"open_issues_count":2,"forks_count":10,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-24T22:42:09.370Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/influxdata.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-16T08:47:59.000Z","updated_at":"2025-01-08T12:45:56.000Z","dependencies_parsed_at":"2024-06-03T12:44:18.282Z","dependency_job_id":"4d4a5c55-cfad-4a67-8ae7-ede582b43c03","html_url":"https://github.com/influxdata/influxdb-client-dart","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/influxdata%2Finfluxdb-client-dart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/influxdata%2Finfluxdb-client-dart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/influxdata%2Finfluxdb-client-dart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/influxdata%2Finfluxdb-client-dart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/influxdata","download_url":"https://codeload.github.com/influxdata/influxdb-client-dart/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248325391,"owners_count":21084918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T11:19:42.301Z","updated_at":"2025-04-11T01:33:22.085Z","avatar_url":"https://github.com/influxdata.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# influxdb-client-dart\n\n[![CircleCI](https://circleci.com/gh/influxdata/influxdb-client-dart.svg?style=svg)](https://circleci.com/gh/influxdata/influxdb-client-dart)\n[![codecov](https://codecov.io/gh/influxdata/influxdb-client-dart/branch/master/graph/badge.svg)](https://codecov.io/gh/influxdata/influxdb-client-dart)\n[![Platforms](https://img.shields.io/badge/platform-dart|flutter-blue.svg)](https://github.com/influxdata/influxdb-client-dart/)\n[![Pub Version](https://img.shields.io/pub/v/influxdb_client)](https://pub.dev/packages/influxdb_client/)\n[![License](https://img.shields.io/github/license/influxdata/influxdb-client-dart.svg)](https://github.com/influxdata/influxdb-client-dart/blob/master/LICENSE)\n[![GitHub issues](https://img.shields.io/github/issues-raw/influxdata/influxdb-client-dart.svg)](https://github.com/influxdata/influxdb-client-dart/issues)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr-raw/influxdata/influxdb-client-dart.svg)](https://github.com/influxdata/influxdb-client-dart/pulls)\n[![Slack Status](https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack\u0026style=social)](https://www.influxdata.com/slack)\n\nThis repository contains the reference Dart client for the InfluxDB 2.x.\nIt works on all platforms including web, server, and Flutter. \nPlease submit issues and pull requests, help out, or just give encouragement.\n\n\n- [Features](#features)\n- [Supported Platforms](#supported-platforms)\n- [Installation](#installation)\n- [Usage](#usage)\n    - [Creating a client](#creating-a-client)\n    - [Writing data](#writes)\n    - [Querying data](#queries)\n    - [Delete data](#delete)  \n    - [Management API](#management-api)\n- [Advanced Usage](#advanced-usage)\n    - [Default Tags](#default-tags)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Documentation\n\nThis section contains links to the client library documentation.\n\n* [Product documentation](https://docs.influxdata.com/influxdb/latest/api-guide/client-libraries/), [Getting Started](#installation)\n* [Examples](example)\n* [API Reference](https://pub.dev/documentation/influxdb_client/latest/influxdb_client_api/InfluxDBClient-class.html)\n* [Changelog](CHANGELOG.md)\n\n## Features\n\nInfluxDB 2.x client supports:\n\n- Querying data using the Flux language\n    - Streaming result to `Stream\u003cFluxRecord\u003e` \n- Writing data\n    - batched in chunks on background\n    - automatic retries on write failures\n- Management API \n    - provides all other InfluxDB 2.x APIs for managing\n        - health check\n        - sources, buckets\n        - tasks\n        - authorizations\n        - ...\n\n## Supported Platforms\n\nLibrary works in web, server, and Flutter.\n\n## Installation\n\nDart developer can add it as a dependency in their pubspec.yaml:\n\n```yaml\ndependencies:\n  influxdb_client: ^2.2.0\n```\n\n\n### Import\n\n```dart\nimport 'package:influxdb_client/api.dart';\n```\n\n## Usage\n\n\u003e Important: You should call `close()` at the end of your application to release allocated resources.\n\n### Creating a client\nSpecify **url** and **token** via parameters:\n\n```dart\nvar client = InfluxDBClient(\n    url: 'http://localhost:8086',\n    token: 'my-token',\n    org: 'my-org',\n    bucket: 'my-bucket',\n    debug: true);\n```\n\n#### Client Options\n\n| Option | Description                                       | Type   | Default |\n|--------|---------------------------------------------------|--------|---------|\n| url    | InfluxDB url                                      | String | none    |\n| bucket | Default destination bucket for writes             | String | none    |\n| org    | Default organization bucket for writes            | String | none    |\n| debug  | Enable verbose logging of underlying  http client | bool   | false   |\n\n#### InfluxDB 1.8 API compatibility\n\n```dart\nvar client = InfluxDBClient.connectV1(\n  url: 'http://localhost:8086',\n  database: 'mydb',\n  retentionPolicy: 'autogen',\n  username: 'my-username',\n  password: 'my-password',\n);\n```\n\n### Writes\n\nThe WriteApi supports asynchronous writes into InfluxDB 2.x.\n\nThe data could be written as:\n\n1. `String` that is formatted as a InfluxDB's Line Protocol\n1. [Data Point](/lib/client/point.dart) structure\n1. Array of above items\n\nThe following example demonstrates how to write data with different type of records. For further information see docs and [examples](example).\n\n```dart\nimport 'package:influxdb_client/api.dart';\n\nmain() async {\n  var client = InfluxDBClient(\n      url: 'http://localhost:8086',\n      token: 'my-token',\n      org: 'my-org',\n      bucket: 'my-bucket',\n      debugEnabled: true);\n\n  var writeApi = WriteService(client);\n\n  var point = Point('h2o')\n      .addTag('location', 'Prague')\n      .addField('level', 1.12345)\n      .time(DateTime.now().toUtc());\n\n  await writeApi.write(point).then((value) {\n    print('Write completed 1');\n  }).catchError((exception) {\n    // error block\n    print(\"Handle write error here!\");\n    print(exception);\n  });\n\n}\n\n```\n\n#### WriteOptions\n\nSettings for `WriteService` like batching, default tags, retry strategy, precision, \ncan customized in `WriteOptions'.\n\nExample how to modify default `WriteOptions`:\n\n```dart\n  var client = InfluxDBClient(\n      url: 'http://localhost:8086',\n      token: 'my-token',\n      org: 'my-org',\n      bucket: 'my-bucket',\n      debug: true);\n\n  var writeApi = client.getWriteService(WriteOptions().merge(\n      precision: WritePrecision.s,\n      batchSize: 100,\n      flushInterval: 5000,\n      gzip: true));\n\n```\n- sources - [write_example](example/write_example.dart)\n\n### Queries\n\nThe result retrieved by [QueryService](lib/client/query_service.dart) could be formatted as a:\n\n\n#### Query to FluxRecord\n\n```dart\n\nimport 'package:influxdb_client/api.dart';\n\nvoid main() async {\n  var client = InfluxDBClient(\n    url: 'http://localhost:8086',\n    token: 'my-token',\n    org: 'my-org',\n    bucket: 'my-bucket',\n  );\n\n  var queryService = client.getQueryService();\n\n  var recordStream = await queryService.query('''\n  from(bucket: \"my-bucket\")\n  |\u003e range(start: 0)\n  |\u003e filter(fn: (r) =\u003e r[\"_measurement\"] == \"cpu\")\n  |\u003e filter(fn: (r) =\u003e r[\"cpu\"] == \"cpu-total\")\n  |\u003e aggregateWindow(every: 1m, fn: mean, createEmpty: false)\n  |\u003e yield(name: \"mean\")\n  ''');\n\n  var count = 0;\n  await recordStream.forEach((record) {\n    print(\n        'record: ${count++} ${record['_time']}: ${record['host']} ${record['cpu']} ${record['_value']}');\n  });\n\n  client.close();\n}\n\n```\n\n#### Query to String\n\n```dart\n\nimport 'package:influxdb_client/api.dart';\n\nmain() async {\n  var client = InfluxDBClient(url: 'http://localhost:8086',\n      token: 'my-token', org: 'my-org', bucket: 'my-bucket');\n\n  var queryService = client.getQueryService(client);\n\n  var rawCSV = await queryService.queryRaw('''\n      from(bucket: \"my-bucket\")\n        |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop)\n        |\u003e filter(fn: (r) =\u003e r[\"_measurement\"] == \"h2o\")\n        |\u003e aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n        |\u003e yield(name: \"mean\")''');\n\n  print(rawCSV);\n  \n}\n\n\n```\n\n#### Parameterized queries\nInfluxDB Cloud supports [Parameterized Queries](https://docs.influxdata.com/influxdb/cloud/query-data/parameterized-queries/)\nthat let you dynamically change values in a query using the InfluxDB API. Parameterized queries make Flux queries more\nreusable and can also be used to help prevent injection attacks.\n\nInfluxDB Cloud inserts the params object into the Flux query as a Flux record named `params`. Use dot or bracket\nnotation to access parameters in the `params` record in your Flux query. Parameterized Flux queries support only `int`\n, `float`, and `string` data types. To convert the supported data types into\nother [Flux basic data types, use Flux type conversion functions](https://docs.influxdata.com/influxdb/cloud/query-data/parameterized-queries/#supported-parameter-data-types).\n\nParameterized query example:\n\u003e :warning: Parameterized Queries are supported only in InfluxDB Cloud, currently there is no support in InfluxDB OSS.\n\n```dart\n\nimport 'package:influxdb_client/api.dart';\n\nvoid main() async {\n  var client = InfluxDBClient(\n    url: 'http://localhost:8086',\n    token: 'my-token',\n    org: 'my-org',\n    bucket: 'my-bucket',\n  );\n\n  var queryService = client.getQueryService();\n\n  var queryService = client.getQueryService();\n  var queryString = '''\n       from(bucket: params.bucketParam)\n            |\u003e range(start: duration(v: params.startParam))\n            |\u003e filter(fn: (r) =\u003e r[\"_measurement\"] == \"weather\" \n                             and r[\"location\"] == \"Prague\")''';\n  var queryParams = {'bucketParam':'my-bucket', 'startParam':'-10d'};\n  var query = Query(query: queryString, params: queryParams);\n\n  // Using string for query and Map for params\n  var recordMap = await queryService.query(queryString, params: queryParams);\n\n  // Using Query class\n  var recordClass = await queryService.query(query);\n\n  client.close();\n}\n\n```\n\n### Delete points\n\nThe [DeleteService](lib/client/delete_service.dart) supports deletes\n[points](https://docs.influxdata.com/influxdb/latest/reference/glossary/#point) from an InfluxDB bucket.\n\nInfluxDB uses an InfluxQL-like [predicate](https://docs.influxdata.com/influxdb/cloud/reference/syntax/delete-predicate/)\nsyntax to determine what data points to delete.\n\n```dart\nimport 'package:influxdb_client/api.dart';\n\nvoid main() async {\n  var client = InfluxDBClient(\n      url: 'http://localhost:8086',\n      token: 'my-token',\n      org: 'my-org',\n      bucket: 'my-bucket',\n      debugEnabled: true);\n\n  await client\n      .getDeleteService()\n      .delete(\n      predicate: '_measurement=\"temperature\"',\n      start: '1970-01-01T00:00:00.000000001Z',\n      stop: DateTime.now().toUtc().toIso8601String(),\n      bucket: 'my-bucket',\n      org: 'my-org')\n      .catchError((e) =\u003e print(e));\n\n  var queryService = client.getQueryService();\n\n  var fluxQuery = '''\n  from(bucket: \"my-bucket\")\n  |\u003e range(start: -1d)\n  |\u003e filter(fn: (r) =\u003e r[\"_measurement\"] == \"temperature\")\n  ''';\n\n  // should be empty\n  var records = await queryService.query(fluxQuery);\n  assert(await records.isEmpty);\n\n  client.close();\n}\n```\n\n### Management API\n\nThe client supports following management API:\n\n|                                                          | API docs                                                            |\n|----------------------------------------------------------|---------------------------------------------------------------------|\n| [**AuthorizationsAPI**](lib/api/authorizations_api.dart) | https://docs.influxdata.com/influxdb/latest/api/#tag/Authorizations |\n| [**BucketsAPI**](lib/api/buckets_api.dart)               | https://docs.influxdata.com/influxdb/latest/api/#tag/Buckets        |\n| [**DBRPsAPI**](lib/api/DBRPs_api.dart)                   | https://docs.influxdata.com/influxdb/latest/api/#tag/DBRPs          |\n| [**DeleteAPI**](lib/api/delete_api.dart)                 | https://docs.influxdata.com/influxdb/latest/api/#tag/Delete         |\n| [**HealthAPI**](lib/api/health_api.dart)                 | https://docs.influxdata.com/influxdb/latest/api/#tag/Health         |\n| [**LabelsAPI**](lib/api/labels_api.dart)                 | https://docs.influxdata.com/influxdb/latest/api/#tag/Labels         |\n| [**OrganizationsAPI**](lib/api/organizations_api.dart)   | https://docs.influxdata.com/influxdb/latest/api/#tag/Organizations  |\n| [**PingAPI**](lib/api/ping_api.dart)                     | https://docs.influxdata.com/influxdb/latest/api/#tag/Ping           |\n| [**ReadyAPI**](lib/api/ready_api.dart)                   | https://docs.influxdata.com/influxdb/latest/api/#tag/Ready          |\n| [**SecretsAPI**](lib/api/secrets_api.dart)               | https://docs.influxdata.com/influxdb/latest/api/#tag/Secrets        |\n| [**SetupAPI**](lib/api/setup_api.dart)                   | https://docs.influxdata.com/influxdb/latest/api/#tag/Setup          |\n| [**TasksAPI**](lib/api/tasks_api.dart)                   | https://docs.influxdata.com/influxdb/latest/api/#tag/Tasks          |\n| [**UsersAPI**](lib/api/users_api.dart)                   | https://docs.influxdata.com/influxdb/latest/api/#tag/Users          |\n| [**VariablesAPI**](lib/api/variables_api.dart)           | https://docs.influxdata.com/influxdb/latest/api/#tag/Variables      |\n\n\nThe following example demonstrates how to use a InfluxDB 2.x Management API to create new bucket. For further information see docs and [examples](example/management_api_example.dart).\n\n```dart\nimport 'package:influxdb_client/api.dart';\n\nvoid main() async {\n// Initialize Client and API\n  var client = InfluxDBClient(\n      url: 'http://localhost:8086', token: 'my-token', org: 'my-org');\n\n  //check server availability\n  await client.getPingApi().getPing();\n\n  var orgs = await client.getOrganizationsApi().getOrgs();\n  var myOrgId = orgs.orgs.first.id;\n\n  var bucketsApi = client.getBucketsApi();\n  var bucketName = 'bucket-my-org';\n\n  // find and delete bucket 'bucket-my-org'\n  var buckets = await bucketsApi.getBuckets(name: bucketName);\n  if (buckets.buckets.isNotEmpty) {\n    var bucketID = buckets.buckets.first.id;\n    await bucketsApi.deleteBucketsID(bucketID);\n    print('Bucket $bucketID was deleted.');\n  }\n\n// Bucket configuration\n  var request = PostBucketRequest(\n      orgID: myOrgId,\n      name: bucketName,\n      retentionRules: [\n        RetentionRule(type: RetentionRuleTypeEnum.expire, everySeconds: 3600)\n      ]);\n\n  var bucket = await bucketsApi.postBuckets(request);\n\n// Create Authorization with permission to read/write created bucket\n  var bucketResource =\n  Resource(type: ResourceTypeEnum.buckets, id: bucket.id, orgID: myOrgId);\n\n// Authorization configuration\n  var auth = AuthorizationPostRequest(\n      description: 'Authorization to read/write bucket:${bucket.name}',\n      orgID: myOrgId,\n      permissions: [\n        Permission(action: PermissionActionEnum.read, resource: bucketResource),\n        Permission(action: PermissionActionEnum.write, resource: bucketResource)\n      ]);\n\n// Create Authorization\n  var authorizationsApi = client.getAuthorizationsApi();\n  var authorization = await authorizationsApi.postAuthorizations(auth);\n\n// Print token\n  var token = authorization.token;\n  print('The bucket: \\'${bucket.name}\\' is successfully created.');\n  print('The following token can be used to read/write: ${token}');\n\n  client.close();\n}\n\n\n```\n### Proxy configuration\n\nBy default the HttpClient uses the proxy configuration available from the environment, \nsee [findProxyFromEnvironment](https://api.dart.dev/stable/dart-io/HttpClient/findProxyFromEnvironment.html).\n\n```\nexport http_proxy=\"PROXY http://localhost:8080\"\n```\n\nInitialize a proxy from code:\n\n```dart\nHttpClient httpClient = HttpClient();\nhttpClient.findProxy = (url) =\u003e \"PROXY localhost:8080\";\nvar client = IOClient(httpClient);\n\nvar influxdb = InfluxDBClient(\n    url: 'http://localhost:8086',\n    token: 'my-token',\n    org: 'my-org',\n    bucket: 'my-bucket',\n    client: client,\n    followRedirects: true,\n    maxRedirects: 5,\n    debug: true);\n```\n\nTo turn off the use of proxies set the `findProxy` property to null.\n\nClient [automatically follows](https://api.dart.dev/stable/dart-io/HttpClientRequest/followRedirects.html) HTTP redirects \nfor all GET and HEAD requests with status codes 301, 302, 303, 307, 308. \nThe default redirect policy is to follow up to 5 consecutive requests.\n\n`write` and `query` APIs also support an automatic redirect of POST requests. You can disable `followRedirects`\nand change default `maxRedirects` on `InfluxDBClient` instance.  \n\n## Contributing\n\nIf you would like to contribute code you can do through GitHub by forking the repository and sending a pull request into the `master` branch.\n\nBuild Requirements:\n\n- dart 2.X\n\nBuild source and test targets:\n\n```bash\n./scripts/influxdb-restart.sh\ndart test\n```\n\nCheck code coverage:\n\n```bash\n./scripts/influxdb-restart.sh\ndart test --enable-code-coverage\n```\n\n## License\n\nThe client is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finfluxdata%2Finfluxdb-client-dart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finfluxdata%2Finfluxdb-client-dart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finfluxdata%2Finfluxdb-client-dart/lists"}