datahub 0.17.0-dev.97 copy "datahub: ^0.17.0-dev.97" to clipboard
datahub: ^0.17.0-dev.97 copied to clipboard

DataHub is a Cloud Development Ecosystem aiming to bring the power of Dart into the Cloud.

example/datahub_example.dart

import 'dart:io';
import 'dart:math';

import 'package:datahub/datahub.dart';

class TestEndpoint extends ApiEndpoint {
  final _inst = resolve<TelemetryService>();

  TestEndpoint() : super(RoutePattern('/'));

  @override
  Future<dynamic> get(ApiRequest request) async {
    await _inst.trace('Waiting', SpanType.internal, {'some': 'stuff'}, () async {
      await Future.delayed(const Duration(milliseconds: 250));
    });

    await _inst.trace('Waiting some more', SpanType.internal, {'some': 'stuff'}, () async {
      await Future.delayed(const Duration(milliseconds: 150));

      if (request.getParam<bool?>('fail') == true) {
        throw ApiRequestException.badRequest('Failure requested!');
      }
    });
    return TextResponse.plain('works!');
  }
}

void main(List<String> args) async {
  final host = ApplicationHost(
      [
        () => TestService('test'),
        () => ApiService('api', [TestEndpoint()]),
      ],
      onInitialized: onInit,
      config: {
        'api': {'port': 1234, 'metricPrefix': 'test_api'},
        'datahub': {
          'serviceName': 'example-service',
          'telemetry': {
            'traces': {
              'openTelemetryExporter': {
                'enable': true,
                'host': 'localhost',
              },
              'dartTimelineExporter': {
                'enable': true,
              }
            },
          }
        }
      });
  await host.run();

  // required because of signal catching inside ServiceHost
  exit(0);
}

class TestService extends BaseService {
  // use ioc to inject other services
  final log = resolve<LogService>();
  final funMetric = resolve<TelemetryService>().counter(
    'fun_total',
    help: 'Shows how much fun it is to use datahub.',
  );

  TestService(String configPath) : super(configPath);

  @override
  Future<void> initialize() async {
    // some logs
    log.debug('Some debug message.');
    log.verbose('Some verbose message.');
    log.info('Some info message.');
    log.warn('Some warn message.');
    log.error('Some error message.');
    log.critical('Some critical message.');

    final _client =
        await RestClient.connect(Uri.parse('http://localhost:1234'));

    resolve<SchedulerService>().schedule(() async {
      funMetric.inc();
      final fail = Random().nextBool();
      final response = await _client.get('/', query: {
        'fail': ['$fail']
      });
      response.discard();
    }, Schedule.repeat(const Duration(seconds: 20)));
  }
}

void onInit() {
  resolve<LogService>().info('Initialization done!');
}
3
likes
0
pub points
56%
popularity

Publisher

verified publisherdatahubproject.net

DataHub is a Cloud Development Ecosystem aiming to bring the power of Dart into the Cloud.

Homepage

License

unknown (license)

Dependencies

args, boost, dart_amqp, fixnum, grpc, http, http2, intl, minio, path, pointycastle, protobuf, rxdart, stack_trace, test, uuid, yaml

More

Packages that depend on datahub