-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathunleash_client.dart
88 lines (80 loc) · 2.45 KB
/
unleash_client.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import 'dart:convert';
import 'dart:developer';
import 'package:http/http.dart';
import 'package:unleash/src/features.dart';
import 'package:unleash/src/register.dart';
import 'package:unleash/unleash.dart';
/// Responsible for the communication with Unleash Server
class UnleashClient {
UnleashClient({
Client? client,
required UnleashSettings settings,
}) : _client = client ?? Client(),
_settings = settings;
final Client _client;
final UnleashSettings _settings;
/// Loads feature toggles from Unleash server
Future<Features?> getFeatureToggles() async {
try {
final reponse = await _client.get(
_settings.featureUrl,
headers: _settings.toHeaders(),
);
final stringResponse = utf8.decode(reponse.bodyBytes);
return Features.fromJson(
json.decode(stringResponse) as Map<String, dynamic>);
} catch (e, stackTrace) {
log(
'Could not load feature toggles from Unleash server.\n'
'Please make sure your configuration is correct.',
name: 'unleash',
error: e,
stackTrace: stackTrace,
);
return null;
}
}
/// Registers this applications
Future<void> register(
DateTime dateTime,
List<ActivationStrategy> activationStrategies,
) async {
final register = Register(
appName: _settings.appName,
instanceId: _settings.instanceId,
interval: _settings.metricsReportingInterval?.inMilliseconds,
strategies: activationStrategies.map((e) => e.name).toList(),
started: dateTime,
);
try {
final response = await _client.post(
_settings.registerUrl,
headers: {
'Content-type': 'application/json',
..._settings.toHeaders(),
},
body: json.encode(register.toJson()),
);
if (response.statusCode >= 300) {
log(
'Could not register this unleash instance.\n'
'Please make sure your configuration is correct.\n'
'Error:\n'
'HTTP status code: ${response.statusCode}\n'
'HTTP response message: ${response.body}',
name: 'unleash',
);
}
} catch (e, stackTrace) {
log(
'Unleash: Could not register this unleash instance.\n'
'Please make sure your configuration is correct.',
name: 'unleash',
error: e,
stackTrace: stackTrace,
);
}
}
/// Sends metrics to Unleash server
Future<void> updateMetrics() async {}
}