@splitsoftware/splitio 10.17.3-rc.4 → 10.17.4-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.txt +0 -3
- package/client/package.json +5 -0
- package/es/factory/browser.js +67 -0
- package/es/factory/node.js +63 -0
- package/es/{client → factory}/package.json +0 -0
- package/es/index.js +16 -132
- package/es/platform/EventEmitter.js +386 -0
- package/es/platform/browser.js +10 -0
- package/es/platform/getEventSource/browser.js +3 -0
- package/es/platform/getEventSource/node.js +19 -0
- package/es/{impressions/observer → platform/getEventSource}/package.json +0 -0
- package/es/platform/getFetch/browser.js +4 -0
- package/es/platform/getFetch/node.js +18 -0
- package/es/{integrations → platform/getFetch}/package.json +0 -0
- package/es/platform/node.js +12 -0
- package/es/{listeners → platform}/package.json +0 -0
- package/es/platform/request/options/node.js +13 -0
- package/es/settings/browser.js +20 -0
- package/es/settings/defaults/browser.js +18 -0
- package/es/settings/defaults/node.js +24 -0
- package/es/settings/defaults/version.js +1 -0
- package/es/settings/integrations/browser.js +5 -0
- package/es/settings/node.js +18 -0
- package/es/{producer/offline → settings}/package.json +0 -0
- package/es/settings/runtime/node.js +17 -0
- package/es/settings/storage/browser.js +29 -0
- package/es/settings/storage/node.js +60 -0
- package/es/umd.js +2 -1
- package/lib/factory/browser.js +71 -0
- package/lib/factory/node.js +67 -0
- package/{es/producer → lib/factory}/package.json +0 -0
- package/lib/index.js +19 -155
- package/lib/platform/EventEmitter.js +390 -0
- package/lib/platform/browser.js +13 -0
- package/lib/platform/getEventSource/browser.js +7 -0
- package/lib/platform/getEventSource/node.js +25 -0
- package/{es/services → lib/platform}/getEventSource/package.json +0 -0
- package/lib/platform/getFetch/browser.js +9 -0
- package/lib/platform/getFetch/node.js +23 -0
- package/{es/services → lib/platform}/getFetch/package.json +0 -0
- package/lib/platform/node.js +16 -0
- package/{es/services/request/options → lib/platform}/package.json +0 -0
- package/lib/platform/request/options/node.js +18 -0
- package/lib/settings/browser.js +24 -0
- package/lib/settings/defaults/browser.js +21 -0
- package/lib/settings/defaults/node.js +27 -0
- package/lib/settings/defaults/version.js +4 -0
- package/lib/settings/integrations/browser.js +9 -0
- package/lib/settings/node.js +22 -0
- package/{es/services/splitChanges/offline → lib/settings}/package.json +0 -0
- package/lib/settings/runtime/node.js +22 -0
- package/lib/settings/storage/browser.js +33 -0
- package/lib/settings/storage/node.js +64 -0
- package/lib/umd.js +4 -8
- package/package.json +29 -31
- package/server/package.json +5 -0
- package/src/.DS_Store +0 -0
- package/src/factory/browser.js +84 -0
- package/src/factory/node.js +78 -0
- package/{es/storage/SegmentCache/InMemory → src/factory}/package.json +0 -0
- package/src/index.js +13 -136
- package/src/platform/.DS_Store +0 -0
- package/src/platform/EventEmitter.js +443 -0
- package/src/platform/browser.js +12 -0
- package/{es/services → src/platform}/getEventSource/browser.js +2 -2
- package/src/{services → platform}/getEventSource/node.js +2 -2
- package/{es/storage → src/platform/getEventSource}/package.json +0 -0
- package/src/{services → platform}/getFetch/browser.js +2 -2
- package/src/{services → platform}/getFetch/node.js +1 -1
- package/{es/sync/PushManager/pushRequirements → src/platform/getFetch}/package.json +0 -0
- package/src/platform/node.js +14 -0
- package/{es/sync/SegmentUpdateWorker → src/platform}/package.json +0 -0
- package/src/platform/request/options/node.js +15 -0
- package/src/settings/.DS_Store +0 -0
- package/src/settings/browser.js +22 -0
- package/{lib/utils → src}/settings/defaults/browser.js +10 -6
- package/{lib/utils → src}/settings/defaults/node.js +6 -6
- package/src/settings/defaults/version.js +1 -0
- package/src/settings/integrations/browser.js +6 -0
- package/src/settings/node.js +20 -0
- package/{es/sync → src/settings}/package.json +0 -0
- package/src/settings/runtime/node.js +21 -0
- package/src/settings/storage/browser.js +43 -0
- package/src/{utils/settings → settings}/storage/node.js +18 -34
- package/src/umd.js +1 -0
- package/types/client/index.d.ts +14 -0
- package/types/server/index.d.ts +20 -0
- package/types/splitio.d.ts +77 -6
- package/es/client/attributesDecoration.js +0 -116
- package/es/client/browser.js +0 -39
- package/es/client/client.js +0 -155
- package/es/client/inputValidation.js +0 -117
- package/es/client/node.js +0 -6
- package/es/engine/combiners/and.js +0 -54
- package/es/engine/combiners/ifelseif.js +0 -73
- package/es/engine/condition/index.js +0 -62
- package/es/engine/convertions/index.js +0 -29
- package/es/engine/engine/index.js +0 -60
- package/es/engine/engine/legacy.js +0 -77
- package/es/engine/engine/murmur3/common.js +0 -40
- package/es/engine/engine/murmur3/murmur3.js +0 -83
- package/es/engine/engine/murmur3/murmur3_128.js +0 -250
- package/es/engine/engine/murmur3/murmur3_128_x86.js +0 -183
- package/es/engine/engine/murmur3/murmur3_64.js +0 -52
- package/es/engine/engine/murmur3/utfx.js +0 -112
- package/es/engine/evaluator/index.js +0 -111
- package/es/engine/index.js +0 -112
- package/es/engine/matchers/all.js +0 -32
- package/es/engine/matchers/between.js +0 -35
- package/es/engine/matchers/boolean.js +0 -35
- package/es/engine/matchers/cont_all.js +0 -51
- package/es/engine/matchers/cont_any.js +0 -47
- package/es/engine/matchers/cont_str.js +0 -38
- package/es/engine/matchers/dependency.js +0 -50
- package/es/engine/matchers/eq.js +0 -35
- package/es/engine/matchers/eq_set.js +0 -49
- package/es/engine/matchers/ew.js +0 -38
- package/es/engine/matchers/gte.js +0 -35
- package/es/engine/matchers/index.js +0 -65
- package/es/engine/matchers/lte.js +0 -35
- package/es/engine/matchers/part_of.js +0 -49
- package/es/engine/matchers/segment.js +0 -39
- package/es/engine/matchers/string.js +0 -44
- package/es/engine/matchers/sw.js +0 -38
- package/es/engine/matchers/types.js +0 -48
- package/es/engine/matchers/whitelist.js +0 -36
- package/es/engine/parser/index.js +0 -69
- package/es/engine/parser/segments.js +0 -22
- package/es/engine/transforms/matcherGroup.js +0 -43
- package/es/engine/transforms/matchers.js +0 -109
- package/es/engine/transforms/segment.js +0 -28
- package/es/engine/transforms/set.js +0 -20
- package/es/engine/transforms/unaryNumeric.js +0 -20
- package/es/engine/transforms/whitelist.js +0 -22
- package/es/engine/treatments/index.js +0 -67
- package/es/engine/value/index.js +0 -54
- package/es/engine/value/sanitize.js +0 -125
- package/es/events/index.js +0 -65
- package/es/factory/offline.js +0 -50
- package/es/factory/online.js +0 -113
- package/es/impressions/counter.js +0 -52
- package/es/impressions/hasher/buildKey.js +0 -3
- package/es/impressions/hasher/hashImpression128.js +0 -5
- package/es/impressions/hasher/hashImpression32.js +0 -5
- package/es/impressions/observer/browser.js +0 -9
- package/es/impressions/observer/node.js +0 -9
- package/es/impressions/observer/observer.js +0 -21
- package/es/integrations/browser.js +0 -62
- package/es/integrations/ga/GaToSplit.js +0 -246
- package/es/integrations/ga/SplitToGa.js +0 -127
- package/es/integrations/node.js +0 -3
- package/es/listeners/browser.js +0 -157
- package/es/listeners/node.js +0 -65
- package/es/manager/index.js +0 -104
- package/es/metrics/Collectors.js +0 -100
- package/es/metrics/index.js +0 -157
- package/es/producer/browser/Partial.js +0 -103
- package/es/producer/browser.js +0 -70
- package/es/producer/fetcher/MySegments.js +0 -47
- package/es/producer/fetcher/SegmentChanges.js +0 -52
- package/es/producer/fetcher/SplitChanges.js +0 -46
- package/es/producer/node.js +0 -130
- package/es/producer/offline/browser.js +0 -26
- package/es/producer/offline/node.js +0 -26
- package/es/producer/task.js +0 -50
- package/es/producer/updater/MySegments.js +0 -108
- package/es/producer/updater/SegmentChanges.js +0 -135
- package/es/producer/updater/SplitChanges.js +0 -131
- package/es/producer/updater/SplitChangesFromFeatures.js +0 -21
- package/es/producer/updater/SplitChangesFromFileSystem.js +0 -21
- package/es/producer/updater/SplitChangesFromObject.js +0 -73
- package/es/readiness/index.js +0 -123
- package/es/readiness/statusManager.js +0 -114
- package/es/services/auth/auth.js +0 -25
- package/es/services/auth/index.js +0 -2
- package/es/services/events/bulk.js +0 -22
- package/es/services/events/index.js +0 -17
- package/es/services/getEventSource/node.js +0 -18
- package/es/services/getFetch/browser.js +0 -4
- package/es/services/getFetch/node.js +0 -18
- package/es/services/impressions/bulk.js +0 -26
- package/es/services/impressions/count.js +0 -7
- package/es/services/impressions/dto.js +0 -73
- package/es/services/impressions/index.js +0 -17
- package/es/services/impressions/post.js +0 -22
- package/es/services/metrics/counters.js +0 -24
- package/es/services/metrics/dto.js +0 -38
- package/es/services/metrics/index.js +0 -17
- package/es/services/metrics/times.js +0 -24
- package/es/services/mySegments/get.js +0 -26
- package/es/services/mySegments/index.js +0 -17
- package/es/services/request/index.js +0 -43
- package/es/services/request/options/browser.js +0 -18
- package/es/services/request/options/node.js +0 -28
- package/es/services/segmentChanges/get.js +0 -21
- package/es/services/segmentChanges/index.js +0 -17
- package/es/services/splitChanges/get.js +0 -19
- package/es/services/splitChanges/index.js +0 -17
- package/es/services/splitChanges/offline/browser.js +0 -63
- package/es/services/splitChanges/offline/node.js +0 -176
- package/es/services/splitChanges/offline/parseCondition.js +0 -43
- package/es/services/transport/index.js +0 -51
- package/es/storage/AttributesCache/InMemory.js +0 -85
- package/es/storage/BaseMetricsAsyncCache.js +0 -23
- package/es/storage/CountCache/InMemory.js +0 -48
- package/es/storage/CountCache/InRedis.js +0 -42
- package/es/storage/EventsCache/InMemory.js +0 -109
- package/es/storage/EventsCache/InRedis.js +0 -65
- package/es/storage/ImpressionsCache/InMemory.js +0 -71
- package/es/storage/ImpressionsCache/InRedis.js +0 -73
- package/es/storage/Keys.js +0 -125
- package/es/storage/KeysLocalStorage.js +0 -58
- package/es/storage/LatencyCache/InMemory.js +0 -56
- package/es/storage/LatencyCache/InRedis.js +0 -44
- package/es/storage/LatencyCache/findIndex.js +0 -2
- package/es/storage/Meta.js +0 -7
- package/es/storage/RedisAdapter.js +0 -198
- package/es/storage/SegmentCache/InLocalStorage/index.js +0 -162
- package/es/storage/SegmentCache/InMemory/browser.js +0 -107
- package/es/storage/SegmentCache/InMemory/node.js +0 -82
- package/es/storage/SegmentCache/InRedis/index.js +0 -81
- package/es/storage/SplitCache/InLocalStorage.js +0 -332
- package/es/storage/SplitCache/InMemory.js +0 -162
- package/es/storage/SplitCache/InRedis.js +0 -214
- package/es/storage/SplitCache/killLocally.js +0 -35
- package/es/storage/browser.js +0 -101
- package/es/storage/node.js +0 -81
- package/es/sync/AuthClient/index.js +0 -34
- package/es/sync/PushManager/index.js +0 -315
- package/es/sync/PushManager/mySegmentsV2utils.js +0 -76
- package/es/sync/PushManager/pushRequirements/browser.js +0 -23
- package/es/sync/PushManager/pushRequirements/node.js +0 -18
- package/es/sync/SSEClient/index.js +0 -93
- package/es/sync/SSEHandler/NotificationKeeper.js +0 -97
- package/es/sync/SSEHandler/NotificationParser.js +0 -31
- package/es/sync/SSEHandler/index.js +0 -110
- package/es/sync/SegmentUpdateWorker/browser.js +0 -74
- package/es/sync/SegmentUpdateWorker/node.js +0 -79
- package/es/sync/SplitUpdateWorker/index.js +0 -86
- package/es/sync/browser.js +0 -125
- package/es/sync/constants.js +0 -42
- package/es/sync/node.js +0 -60
- package/es/trackers/event.js +0 -53
- package/es/trackers/impressions.js +0 -132
- package/es/utils/backoff/index.js +0 -51
- package/es/utils/base64/browser.js +0 -19
- package/es/utils/base64/node.js +0 -19
- package/es/utils/base64/package.json +0 -4
- package/es/utils/binarySearch/index.js +0 -50
- package/es/utils/constants/index.js +0 -38
- package/es/utils/context/constants.js +0 -30
- package/es/utils/context/index.js +0 -101
- package/es/utils/decompress/index.js +0 -476
- package/es/utils/fn/repeat.js +0 -58
- package/es/utils/inputValidation/apiKey.js +0 -39
- package/es/utils/inputValidation/attribute.js +0 -22
- package/es/utils/inputValidation/attributes.js +0 -19
- package/es/utils/inputValidation/event.js +0 -23
- package/es/utils/inputValidation/eventProperties.js +0 -69
- package/es/utils/inputValidation/eventValue.js +0 -9
- package/es/utils/inputValidation/index.js +0 -11
- package/es/utils/inputValidation/isOperational.js +0 -14
- package/es/utils/inputValidation/key.js +0 -50
- package/es/utils/inputValidation/split.js +0 -47
- package/es/utils/inputValidation/splitFilters.js +0 -121
- package/es/utils/inputValidation/splits.js +0 -27
- package/es/utils/inputValidation/trafficType.js +0 -55
- package/es/utils/jwt/hashUserKey.js +0 -11
- package/es/utils/jwt/index.js +0 -14
- package/es/utils/key/factory.js +0 -38
- package/es/utils/key/parser.js +0 -34
- package/es/utils/labels/index.js +0 -7
- package/es/utils/lang/Errors.js +0 -41
- package/es/utils/lang/Sets.js +0 -114
- package/es/utils/lang/index.js +0 -305
- package/es/utils/localstorage/isAvailable.js +0 -26
- package/es/utils/logger/LoggerFactory.js +0 -86
- package/es/utils/logger/index.js +0 -97
- package/es/utils/lrucache/linkedlist.js +0 -122
- package/es/utils/lrucache/lru.spec.js +0 -24
- package/es/utils/lrucache/lrucache.js +0 -80
- package/es/utils/now/browser.js +0 -27
- package/es/utils/now/node.js +0 -19
- package/es/utils/now/package.json +0 -4
- package/es/utils/promise/thenable.js +0 -3
- package/es/utils/promise/timeout.js +0 -34
- package/es/utils/promise/wrapper.js +0 -58
- package/es/utils/settings/defaults/browser.js +0 -12
- package/es/utils/settings/defaults/node.js +0 -21
- package/es/utils/settings/defaults/package.json +0 -4
- package/es/utils/settings/impressionsMode.js +0 -16
- package/es/utils/settings/index.js +0 -194
- package/es/utils/settings/integrations/browser.js +0 -8
- package/es/utils/settings/integrations/common.js +0 -30
- package/es/utils/settings/integrations/node.js +0 -7
- package/es/utils/settings/integrations/package.json +0 -4
- package/es/utils/settings/language/browser.js +0 -16
- package/es/utils/settings/language/node.js +0 -16
- package/es/utils/settings/language/package.json +0 -4
- package/es/utils/settings/mode.js +0 -10
- package/es/utils/settings/runtime/browser.js +0 -21
- package/es/utils/settings/runtime/node.js +0 -33
- package/es/utils/settings/runtime/package.json +0 -4
- package/es/utils/settings/storage/browser.js +0 -64
- package/es/utils/settings/storage/node.js +0 -86
- package/es/utils/settings/storage/package.json +0 -4
- package/es/utils/splits/usesSegments.js +0 -21
- package/es/utils/time/index.js +0 -8
- package/es/utils/timeTracker/index.js +0 -216
- package/es/utils/timeTracker/timer.js +0 -25
- package/lib/client/attributesDecoration.js +0 -128
- package/lib/client/browser.js +0 -50
- package/lib/client/client.js +0 -174
- package/lib/client/inputValidation.js +0 -129
- package/lib/client/node.js +0 -14
- package/lib/client/package.json +0 -4
- package/lib/engine/combiners/and.js +0 -65
- package/lib/engine/combiners/ifelseif.js +0 -88
- package/lib/engine/condition/index.js +0 -76
- package/lib/engine/convertions/index.js +0 -36
- package/lib/engine/engine/index.js +0 -71
- package/lib/engine/engine/legacy.js +0 -83
- package/lib/engine/engine/murmur3/common.js +0 -52
- package/lib/engine/engine/murmur3/murmur3.js +0 -90
- package/lib/engine/engine/murmur3/murmur3_128.js +0 -256
- package/lib/engine/engine/murmur3/murmur3_128_x86.js +0 -189
- package/lib/engine/engine/murmur3/murmur3_64.js +0 -57
- package/lib/engine/engine/murmur3/utfx.js +0 -121
- package/lib/engine/evaluator/index.js +0 -129
- package/lib/engine/index.js +0 -128
- package/lib/engine/matchers/all.js +0 -41
- package/lib/engine/matchers/between.js +0 -44
- package/lib/engine/matchers/boolean.js +0 -44
- package/lib/engine/matchers/cont_all.js +0 -61
- package/lib/engine/matchers/cont_any.js +0 -57
- package/lib/engine/matchers/cont_str.js +0 -48
- package/lib/engine/matchers/dependency.js +0 -60
- package/lib/engine/matchers/eq.js +0 -44
- package/lib/engine/matchers/eq_set.js +0 -59
- package/lib/engine/matchers/ew.js +0 -48
- package/lib/engine/matchers/gte.js +0 -44
- package/lib/engine/matchers/index.js +0 -90
- package/lib/engine/matchers/lte.js +0 -44
- package/lib/engine/matchers/part_of.js +0 -59
- package/lib/engine/matchers/segment.js +0 -49
- package/lib/engine/matchers/string.js +0 -53
- package/lib/engine/matchers/sw.js +0 -48
- package/lib/engine/matchers/types.js +0 -57
- package/lib/engine/matchers/whitelist.js +0 -46
- package/lib/engine/parser/index.js +0 -84
- package/lib/engine/parser/segments.js +0 -28
- package/lib/engine/transforms/matcherGroup.js +0 -54
- package/lib/engine/transforms/matchers.js +0 -124
- package/lib/engine/transforms/segment.js +0 -34
- package/lib/engine/transforms/set.js +0 -26
- package/lib/engine/transforms/unaryNumeric.js +0 -26
- package/lib/engine/transforms/whitelist.js +0 -28
- package/lib/engine/treatments/index.js +0 -73
- package/lib/engine/value/index.js +0 -64
- package/lib/engine/value/sanitize.js +0 -137
- package/lib/events/index.js +0 -80
- package/lib/factory/offline.js +0 -62
- package/lib/factory/online.js +0 -129
- package/lib/impressions/counter.js +0 -61
- package/lib/impressions/hasher/buildKey.js +0 -8
- package/lib/impressions/hasher/hashImpression128.js +0 -12
- package/lib/impressions/hasher/hashImpression32.js +0 -14
- package/lib/impressions/observer/browser.js +0 -19
- package/lib/impressions/observer/node.js +0 -19
- package/lib/impressions/observer/observer.js +0 -29
- package/lib/impressions/observer/package.json +0 -4
- package/lib/integrations/browser.js +0 -72
- package/lib/integrations/ga/GaToSplit.js +0 -267
- package/lib/integrations/ga/SplitToGa.js +0 -138
- package/lib/integrations/node.js +0 -9
- package/lib/integrations/package.json +0 -4
- package/lib/listeners/browser.js +0 -173
- package/lib/listeners/node.js +0 -74
- package/lib/listeners/package.json +0 -4
- package/lib/manager/index.js +0 -115
- package/lib/metrics/Collectors.js +0 -118
- package/lib/metrics/index.js +0 -182
- package/lib/producer/browser/Partial.js +0 -114
- package/lib/producer/browser.js +0 -82
- package/lib/producer/fetcher/MySegments.js +0 -59
- package/lib/producer/fetcher/SegmentChanges.js +0 -62
- package/lib/producer/fetcher/SplitChanges.js +0 -58
- package/lib/producer/node.js +0 -142
- package/lib/producer/offline/browser.js +0 -35
- package/lib/producer/offline/node.js +0 -35
- package/lib/producer/offline/package.json +0 -4
- package/lib/producer/package.json +0 -4
- package/lib/producer/task.js +0 -61
- package/lib/producer/updater/MySegments.js +0 -119
- package/lib/producer/updater/SegmentChanges.js +0 -148
- package/lib/producer/updater/SplitChanges.js +0 -145
- package/lib/producer/updater/SplitChangesFromFeatures.js +0 -30
- package/lib/producer/updater/SplitChangesFromFileSystem.js +0 -30
- package/lib/producer/updater/SplitChangesFromObject.js +0 -84
- package/lib/readiness/index.js +0 -132
- package/lib/readiness/statusManager.js +0 -124
- package/lib/services/auth/auth.js +0 -32
- package/lib/services/auth/index.js +0 -11
- package/lib/services/events/bulk.js +0 -31
- package/lib/services/events/index.js +0 -26
- package/lib/services/getEventSource/browser.js +0 -8
- package/lib/services/getEventSource/node.js +0 -26
- package/lib/services/getEventSource/package.json +0 -4
- package/lib/services/getFetch/browser.js +0 -12
- package/lib/services/getFetch/node.js +0 -24
- package/lib/services/getFetch/package.json +0 -4
- package/lib/services/impressions/bulk.js +0 -36
- package/lib/services/impressions/count.js +0 -16
- package/lib/services/impressions/dto.js +0 -81
- package/lib/services/impressions/index.js +0 -26
- package/lib/services/impressions/post.js +0 -31
- package/lib/services/metrics/counters.js +0 -33
- package/lib/services/metrics/dto.js +0 -46
- package/lib/services/metrics/index.js +0 -26
- package/lib/services/metrics/times.js +0 -33
- package/lib/services/mySegments/get.js +0 -35
- package/lib/services/mySegments/index.js +0 -26
- package/lib/services/request/index.js +0 -53
- package/lib/services/request/options/browser.js +0 -23
- package/lib/services/request/options/node.js +0 -37
- package/lib/services/request/options/package.json +0 -4
- package/lib/services/segmentChanges/get.js +0 -29
- package/lib/services/segmentChanges/index.js +0 -26
- package/lib/services/splitChanges/get.js +0 -27
- package/lib/services/splitChanges/index.js +0 -26
- package/lib/services/splitChanges/offline/browser.js +0 -71
- package/lib/services/splitChanges/offline/node.js +0 -189
- package/lib/services/splitChanges/offline/package.json +0 -4
- package/lib/services/splitChanges/offline/parseCondition.js +0 -49
- package/lib/services/transport/index.js +0 -62
- package/lib/storage/AttributesCache/InMemory.js +0 -93
- package/lib/storage/BaseMetricsAsyncCache.js +0 -28
- package/lib/storage/CountCache/InMemory.js +0 -54
- package/lib/storage/CountCache/InRedis.js +0 -50
- package/lib/storage/EventsCache/InMemory.js +0 -118
- package/lib/storage/EventsCache/InRedis.js +0 -74
- package/lib/storage/ImpressionsCache/InMemory.js +0 -77
- package/lib/storage/ImpressionsCache/InRedis.js +0 -79
- package/lib/storage/Keys.js +0 -132
- package/lib/storage/KeysLocalStorage.js +0 -69
- package/lib/storage/LatencyCache/InMemory.js +0 -64
- package/lib/storage/LatencyCache/InRedis.js +0 -53
- package/lib/storage/LatencyCache/findIndex.js +0 -12
- package/lib/storage/Meta.js +0 -12
- package/lib/storage/RedisAdapter.js +0 -212
- package/lib/storage/SegmentCache/InLocalStorage/index.js +0 -171
- package/lib/storage/SegmentCache/InMemory/browser.js +0 -113
- package/lib/storage/SegmentCache/InMemory/node.js +0 -89
- package/lib/storage/SegmentCache/InMemory/package.json +0 -4
- package/lib/storage/SegmentCache/InRedis/index.js +0 -87
- package/lib/storage/SplitCache/InLocalStorage.js +0 -344
- package/lib/storage/SplitCache/InMemory.js +0 -172
- package/lib/storage/SplitCache/InRedis.js +0 -224
- package/lib/storage/SplitCache/killLocally.js +0 -42
- package/lib/storage/browser.js +0 -122
- package/lib/storage/node.js +0 -104
- package/lib/storage/package.json +0 -4
- package/lib/sync/AuthClient/index.js +0 -44
- package/lib/sync/PushManager/index.js +0 -340
- package/lib/sync/PushManager/mySegmentsV2utils.js +0 -87
- package/lib/sync/PushManager/pushRequirements/browser.js +0 -30
- package/lib/sync/PushManager/pushRequirements/node.js +0 -25
- package/lib/sync/PushManager/pushRequirements/package.json +0 -4
- package/lib/sync/SSEClient/index.js +0 -101
- package/lib/sync/SSEHandler/NotificationKeeper.js +0 -104
- package/lib/sync/SSEHandler/NotificationParser.js +0 -39
- package/lib/sync/SSEHandler/index.js +0 -121
- package/lib/sync/SegmentUpdateWorker/browser.js +0 -81
- package/lib/sync/SegmentUpdateWorker/node.js +0 -86
- package/lib/sync/SegmentUpdateWorker/package.json +0 -4
- package/lib/sync/SplitUpdateWorker/index.js +0 -93
- package/lib/sync/browser.js +0 -139
- package/lib/sync/constants.js +0 -59
- package/lib/sync/node.js +0 -71
- package/lib/sync/package.json +0 -4
- package/lib/trackers/event.js +0 -64
- package/lib/trackers/impressions.js +0 -146
- package/lib/utils/backoff/index.js +0 -57
- package/lib/utils/base64/browser.js +0 -26
- package/lib/utils/base64/node.js +0 -26
- package/lib/utils/base64/package.json +0 -4
- package/lib/utils/binarySearch/index.js +0 -56
- package/lib/utils/constants/index.js +0 -60
- package/lib/utils/context/constants.js +0 -49
- package/lib/utils/context/index.js +0 -111
- package/lib/utils/decompress/index.js +0 -483
- package/lib/utils/fn/repeat.js +0 -64
- package/lib/utils/inputValidation/apiKey.js +0 -51
- package/lib/utils/inputValidation/attribute.js +0 -32
- package/lib/utils/inputValidation/attributes.js +0 -32
- package/lib/utils/inputValidation/event.js +0 -33
- package/lib/utils/inputValidation/eventProperties.js +0 -78
- package/lib/utils/inputValidation/eventValue.js +0 -19
- package/lib/utils/inputValidation/index.js +0 -48
- package/lib/utils/inputValidation/isOperational.js +0 -25
- package/lib/utils/inputValidation/key.js +0 -59
- package/lib/utils/inputValidation/split.js +0 -60
- package/lib/utils/inputValidation/splitFilters.js +0 -134
- package/lib/utils/inputValidation/splits.js +0 -38
- package/lib/utils/inputValidation/trafficType.js +0 -68
- package/lib/utils/jwt/hashUserKey.js +0 -19
- package/lib/utils/jwt/index.js +0 -19
- package/lib/utils/key/factory.js +0 -46
- package/lib/utils/key/parser.js +0 -42
- package/lib/utils/labels/index.js +0 -18
- package/lib/utils/lang/Errors.js +0 -58
- package/lib/utils/lang/Sets.js +0 -127
- package/lib/utils/lang/index.js +0 -350
- package/lib/utils/localstorage/isAvailable.js +0 -31
- package/lib/utils/logger/LoggerFactory.js +0 -98
- package/lib/utils/logger/index.js +0 -109
- package/lib/utils/lrucache/linkedlist.js +0 -132
- package/lib/utils/lrucache/lru.spec.js +0 -30
- package/lib/utils/lrucache/lrucache.js +0 -88
- package/lib/utils/now/browser.js +0 -33
- package/lib/utils/now/node.js +0 -24
- package/lib/utils/now/package.json +0 -4
- package/lib/utils/promise/thenable.js +0 -10
- package/lib/utils/promise/timeout.js +0 -40
- package/lib/utils/promise/wrapper.js +0 -63
- package/lib/utils/settings/defaults/package.json +0 -4
- package/lib/utils/settings/impressionsMode.js +0 -26
- package/lib/utils/settings/index.js +0 -214
- package/lib/utils/settings/integrations/browser.js +0 -17
- package/lib/utils/settings/integrations/common.js +0 -40
- package/lib/utils/settings/integrations/node.js +0 -13
- package/lib/utils/settings/integrations/package.json +0 -4
- package/lib/utils/settings/language/browser.js +0 -22
- package/lib/utils/settings/language/node.js +0 -22
- package/lib/utils/settings/language/package.json +0 -4
- package/lib/utils/settings/mode.js +0 -16
- package/lib/utils/settings/runtime/browser.js +0 -26
- package/lib/utils/settings/runtime/node.js +0 -43
- package/lib/utils/settings/runtime/package.json +0 -4
- package/lib/utils/settings/storage/browser.js +0 -75
- package/lib/utils/settings/storage/node.js +0 -92
- package/lib/utils/settings/storage/package.json +0 -4
- package/lib/utils/splits/usesSegments.js +0 -27
- package/lib/utils/time/index.js +0 -12
- package/lib/utils/timeTracker/index.js +0 -213
- package/lib/utils/timeTracker/timer.js +0 -33
- package/src/client/attributesDecoration.js +0 -112
- package/src/client/browser.js +0 -41
- package/src/client/client.js +0 -131
- package/src/client/inputValidation.js +0 -130
- package/src/client/node.js +0 -8
- package/src/client/package.json +0 -4
- package/src/engine/combiners/and.js +0 -55
- package/src/engine/combiners/ifelseif.js +0 -74
- package/src/engine/condition/index.js +0 -65
- package/src/engine/convertions/index.js +0 -22
- package/src/engine/engine/index.js +0 -63
- package/src/engine/engine/legacy.js +0 -66
- package/src/engine/engine/murmur3/common.js +0 -54
- package/src/engine/engine/murmur3/murmur3.js +0 -79
- package/src/engine/engine/murmur3/murmur3_128.js +0 -273
- package/src/engine/engine/murmur3/murmur3_128_x86.js +0 -188
- package/src/engine/engine/murmur3/murmur3_64.js +0 -34
- package/src/engine/engine/murmur3/utfx.js +0 -111
- package/src/engine/evaluator/index.js +0 -148
- package/src/engine/index.js +0 -123
- package/src/engine/matchers/all.js +0 -29
- package/src/engine/matchers/between.js +0 -30
- package/src/engine/matchers/boolean.js +0 -29
- package/src/engine/matchers/cont_all.js +0 -40
- package/src/engine/matchers/cont_any.js +0 -35
- package/src/engine/matchers/cont_str.js +0 -31
- package/src/engine/matchers/dependency.js +0 -52
- package/src/engine/matchers/eq.js +0 -30
- package/src/engine/matchers/eq_set.js +0 -37
- package/src/engine/matchers/ew.js +0 -31
- package/src/engine/matchers/gte.js +0 -30
- package/src/engine/matchers/index.js +0 -71
- package/src/engine/matchers/lte.js +0 -30
- package/src/engine/matchers/part_of.js +0 -37
- package/src/engine/matchers/segment.js +0 -41
- package/src/engine/matchers/string.js +0 -39
- package/src/engine/matchers/sw.js +0 -31
- package/src/engine/matchers/types.js +0 -52
- package/src/engine/matchers/whitelist.js +0 -30
- package/src/engine/parser/index.js +0 -79
- package/src/engine/parser/segments.js +0 -31
- package/src/engine/transforms/matcherGroup.js +0 -45
- package/src/engine/transforms/matchers.js +0 -118
- package/src/engine/transforms/segment.js +0 -23
- package/src/engine/transforms/set.js +0 -20
- package/src/engine/transforms/unaryNumeric.js +0 -20
- package/src/engine/transforms/whitelist.js +0 -22
- package/src/engine/treatments/index.js +0 -67
- package/src/engine/value/index.js +0 -53
- package/src/engine/value/sanitize.js +0 -117
- package/src/events/index.js +0 -62
- package/src/factory/offline.js +0 -60
- package/src/factory/online.js +0 -127
- package/src/impressions/counter.js +0 -43
- package/src/impressions/hasher/buildKey.js +0 -3
- package/src/impressions/hasher/hashImpression128.js +0 -6
- package/src/impressions/hasher/hashImpression32.js +0 -6
- package/src/impressions/observer/browser.js +0 -8
- package/src/impressions/observer/node.js +0 -8
- package/src/impressions/observer/observer.js +0 -17
- package/src/impressions/observer/package.json +0 -4
- package/src/integrations/browser.js +0 -57
- package/src/integrations/ga/GaToSplit.js +0 -278
- package/src/integrations/ga/SplitToGa.js +0 -125
- package/src/integrations/node.js +0 -4
- package/src/integrations/package.json +0 -4
- package/src/listeners/browser.js +0 -137
- package/src/listeners/node.js +0 -59
- package/src/listeners/package.json +0 -4
- package/src/manager/index.js +0 -103
- package/src/metrics/Collectors.js +0 -77
- package/src/metrics/index.js +0 -174
- package/src/producer/browser/Partial.js +0 -104
- package/src/producer/browser.js +0 -82
- package/src/producer/fetcher/MySegments.js +0 -40
- package/src/producer/fetcher/SegmentChanges.js +0 -52
- package/src/producer/fetcher/SplitChanges.js +0 -39
- package/src/producer/node.js +0 -142
- package/src/producer/offline/browser.js +0 -28
- package/src/producer/offline/node.js +0 -28
- package/src/producer/offline/package.json +0 -4
- package/src/producer/package.json +0 -4
- package/src/producer/task.js +0 -57
- package/src/producer/updater/MySegments.js +0 -104
- package/src/producer/updater/SegmentChanges.js +0 -126
- package/src/producer/updater/SplitChanges.js +0 -138
- package/src/producer/updater/SplitChangesFromFeatures.js +0 -23
- package/src/producer/updater/SplitChangesFromFileSystem.js +0 -23
- package/src/producer/updater/SplitChangesFromObject.js +0 -81
- package/src/readiness/index.js +0 -125
- package/src/readiness/statusManager.js +0 -121
- package/src/services/auth/auth.js +0 -21
- package/src/services/auth/index.js +0 -3
- package/src/services/events/bulk.js +0 -23
- package/src/services/events/index.js +0 -18
- package/src/services/getEventSource/browser.js +0 -3
- package/src/services/getEventSource/package.json +0 -4
- package/src/services/getFetch/package.json +0 -4
- package/src/services/impressions/bulk.js +0 -26
- package/src/services/impressions/count.js +0 -8
- package/src/services/impressions/dto.js +0 -71
- package/src/services/impressions/index.js +0 -18
- package/src/services/impressions/post.js +0 -23
- package/src/services/metrics/counters.js +0 -25
- package/src/services/metrics/dto.js +0 -44
- package/src/services/metrics/index.js +0 -18
- package/src/services/metrics/times.js +0 -25
- package/src/services/mySegments/get.js +0 -27
- package/src/services/mySegments/index.js +0 -18
- package/src/services/request/index.js +0 -43
- package/src/services/request/options/browser.js +0 -18
- package/src/services/request/options/node.js +0 -30
- package/src/services/request/options/package.json +0 -4
- package/src/services/segmentChanges/get.js +0 -20
- package/src/services/segmentChanges/index.js +0 -18
- package/src/services/splitChanges/get.js +0 -20
- package/src/services/splitChanges/index.js +0 -18
- package/src/services/splitChanges/offline/browser.js +0 -66
- package/src/services/splitChanges/offline/node.js +0 -190
- package/src/services/splitChanges/offline/package.json +0 -4
- package/src/services/splitChanges/offline/parseCondition.js +0 -52
- package/src/services/transport/index.js +0 -44
- package/src/storage/AttributesCache/InMemory.js +0 -76
- package/src/storage/BaseMetricsAsyncCache.js +0 -14
- package/src/storage/CountCache/InMemory.js +0 -48
- package/src/storage/CountCache/InRedis.js +0 -32
- package/src/storage/EventsCache/InMemory.js +0 -99
- package/src/storage/EventsCache/InRedis.js +0 -62
- package/src/storage/ImpressionsCache/InMemory.js +0 -62
- package/src/storage/ImpressionsCache/InRedis.js +0 -65
- package/src/storage/Keys.js +0 -122
- package/src/storage/KeysLocalStorage.js +0 -52
- package/src/storage/LatencyCache/InMemory.js +0 -56
- package/src/storage/LatencyCache/InRedis.js +0 -35
- package/src/storage/LatencyCache/findIndex.js +0 -7
- package/src/storage/Meta.js +0 -7
- package/src/storage/RedisAdapter.js +0 -170
- package/src/storage/SegmentCache/InLocalStorage/index.js +0 -140
- package/src/storage/SegmentCache/InMemory/browser.js +0 -99
- package/src/storage/SegmentCache/InMemory/node.js +0 -84
- package/src/storage/SegmentCache/InMemory/package.json +0 -4
- package/src/storage/SegmentCache/InRedis/index.js +0 -71
- package/src/storage/SplitCache/InLocalStorage.js +0 -324
- package/src/storage/SplitCache/InMemory.js +0 -145
- package/src/storage/SplitCache/InRedis.js +0 -187
- package/src/storage/SplitCache/killLocally.js +0 -33
- package/src/storage/browser.js +0 -110
- package/src/storage/node.js +0 -83
- package/src/storage/package.json +0 -4
- package/src/sync/AuthClient/index.js +0 -31
- package/src/sync/PushManager/index.js +0 -328
- package/src/sync/PushManager/mySegmentsV2utils.js +0 -76
- package/src/sync/PushManager/pushRequirements/browser.js +0 -20
- package/src/sync/PushManager/pushRequirements/node.js +0 -16
- package/src/sync/PushManager/pushRequirements/package.json +0 -4
- package/src/sync/SSEClient/index.js +0 -92
- package/src/sync/SSEHandler/NotificationKeeper.js +0 -90
- package/src/sync/SSEHandler/NotificationParser.js +0 -35
- package/src/sync/SSEHandler/index.js +0 -110
- package/src/sync/SegmentUpdateWorker/browser.js +0 -67
- package/src/sync/SegmentUpdateWorker/node.js +0 -73
- package/src/sync/SegmentUpdateWorker/package.json +0 -4
- package/src/sync/SplitUpdateWorker/index.js +0 -79
- package/src/sync/browser.js +0 -130
- package/src/sync/constants.js +0 -43
- package/src/sync/node.js +0 -66
- package/src/sync/package.json +0 -4
- package/src/trackers/event.js +0 -47
- package/src/trackers/impressions.js +0 -123
- package/src/utils/backoff/index.js +0 -46
- package/src/utils/base64/browser.js +0 -19
- package/src/utils/base64/node.js +0 -19
- package/src/utils/base64/package.json +0 -4
- package/src/utils/binarySearch/index.js +0 -50
- package/src/utils/constants/index.js +0 -41
- package/src/utils/context/constants.js +0 -18
- package/src/utils/context/index.js +0 -84
- package/src/utils/decompress/index.js +0 -428
- package/src/utils/fn/repeat.js +0 -48
- package/src/utils/inputValidation/apiKey.js +0 -42
- package/src/utils/inputValidation/attribute.js +0 -22
- package/src/utils/inputValidation/attributes.js +0 -26
- package/src/utils/inputValidation/event.js +0 -23
- package/src/utils/inputValidation/eventProperties.js +0 -65
- package/src/utils/inputValidation/eventValue.js +0 -11
- package/src/utils/inputValidation/index.js +0 -11
- package/src/utils/inputValidation/isOperational.js +0 -16
- package/src/utils/inputValidation/key.js +0 -53
- package/src/utils/inputValidation/split.js +0 -42
- package/src/utils/inputValidation/splitFilters.js +0 -108
- package/src/utils/inputValidation/splits.js +0 -21
- package/src/utils/inputValidation/trafficType.js +0 -58
- package/src/utils/jwt/hashUserKey.js +0 -11
- package/src/utils/jwt/index.js +0 -15
- package/src/utils/key/factory.js +0 -34
- package/src/utils/key/parser.js +0 -34
- package/src/utils/labels/index.js +0 -7
- package/src/utils/lang/Errors.js +0 -19
- package/src/utils/lang/Sets.js +0 -94
- package/src/utils/lang/index.js +0 -291
- package/src/utils/localstorage/isAvailable.js +0 -26
- package/src/utils/logger/LoggerFactory.js +0 -90
- package/src/utils/logger/index.js +0 -93
- package/src/utils/lrucache/linkedlist.js +0 -116
- package/src/utils/lrucache/lru.spec.js +0 -26
- package/src/utils/lrucache/lrucache.js +0 -49
- package/src/utils/now/browser.js +0 -29
- package/src/utils/now/node.js +0 -21
- package/src/utils/now/package.json +0 -4
- package/src/utils/promise/thenable.js +0 -1
- package/src/utils/promise/timeout.js +0 -38
- package/src/utils/promise/wrapper.js +0 -60
- package/src/utils/settings/defaults/browser.js +0 -12
- package/src/utils/settings/defaults/node.js +0 -21
- package/src/utils/settings/defaults/package.json +0 -4
- package/src/utils/settings/impressionsMode.js +0 -15
- package/src/utils/settings/index.js +0 -217
- package/src/utils/settings/integrations/browser.js +0 -8
- package/src/utils/settings/integrations/common.js +0 -32
- package/src/utils/settings/integrations/node.js +0 -7
- package/src/utils/settings/integrations/package.json +0 -4
- package/src/utils/settings/language/browser.js +0 -17
- package/src/utils/settings/language/node.js +0 -17
- package/src/utils/settings/language/package.json +0 -4
- package/src/utils/settings/mode.js +0 -12
- package/src/utils/settings/runtime/browser.js +0 -22
- package/src/utils/settings/runtime/node.js +0 -34
- package/src/utils/settings/runtime/package.json +0 -4
- package/src/utils/settings/storage/browser.js +0 -70
- package/src/utils/settings/storage/package.json +0 -4
- package/src/utils/splits/usesSegments.js +0 -17
- package/src/utils/time/index.js +0 -8
- package/src/utils/timeTracker/index.js +0 -223
- package/src/utils/timeTracker/timer.js +0 -27
package/src/manager/index.js
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import objectAssign from 'object-assign';
|
|
2
|
-
import thenable from '../utils/promise/thenable';
|
|
3
|
-
import { find } from '../utils/lang';
|
|
4
|
-
import { validateSplit, validateSplitExistance, validateIfDestroyed, validateIfReady } from '../utils/inputValidation';
|
|
5
|
-
|
|
6
|
-
const collectTreatments = (splitObject) => {
|
|
7
|
-
const conditions = splitObject.conditions;
|
|
8
|
-
// Rollout conditions are supposed to have the entire partitions list, so we find the first one.
|
|
9
|
-
let allTreatmentsCondition = find(conditions, (cond) => cond.conditionType === 'ROLLOUT');
|
|
10
|
-
// Localstorage mode could fall into a no rollout conditions state. Take the first condition in that case.
|
|
11
|
-
if (!allTreatmentsCondition) allTreatmentsCondition = conditions[0];
|
|
12
|
-
// Then extract the treatments from the partitions
|
|
13
|
-
return allTreatmentsCondition ? allTreatmentsCondition.partitions.map(v => v.treatment) : [];
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const ObjectToView = (json) => {
|
|
17
|
-
let splitObject;
|
|
18
|
-
|
|
19
|
-
try {
|
|
20
|
-
splitObject = JSON.parse(json);
|
|
21
|
-
} catch(e) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (splitObject == null) return null;
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
name: splitObject.name,
|
|
29
|
-
trafficType: splitObject.trafficTypeName || null,
|
|
30
|
-
killed: splitObject.killed,
|
|
31
|
-
changeNumber: splitObject.changeNumber || 0,
|
|
32
|
-
treatments: collectTreatments(splitObject),
|
|
33
|
-
configs: splitObject.configurations || {}
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const ObjectsToViews = (jsons) => {
|
|
38
|
-
let views = [];
|
|
39
|
-
|
|
40
|
-
jsons.forEach(split => {
|
|
41
|
-
const view = ObjectToView(split);
|
|
42
|
-
if (view != null) views.push(view);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
return views;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
function SplitManagerFactory(splits, context) {
|
|
49
|
-
const SPLIT_FN_LABEL = 'split';
|
|
50
|
-
const statusManager = context.get(context.constants.STATUS_MANAGER);
|
|
51
|
-
|
|
52
|
-
return objectAssign(
|
|
53
|
-
// Proto-linkage of the readiness Event Emitter
|
|
54
|
-
Object.create(statusManager),
|
|
55
|
-
{
|
|
56
|
-
/**
|
|
57
|
-
* Get the Split object corresponding to the given split name if valid
|
|
58
|
-
*/
|
|
59
|
-
split(maybeSplitName) {
|
|
60
|
-
const splitName = validateSplit(maybeSplitName, SPLIT_FN_LABEL);
|
|
61
|
-
if (!validateIfDestroyed(context) || !validateIfReady(context, SPLIT_FN_LABEL) || !splitName) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const split = splits.getSplit(splitName);
|
|
66
|
-
|
|
67
|
-
if (thenable(split)) {
|
|
68
|
-
return split.then(result => {
|
|
69
|
-
validateSplitExistance(context, splitName, result, SPLIT_FN_LABEL);
|
|
70
|
-
return ObjectToView(result);
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
validateSplitExistance(context, splitName, split, SPLIT_FN_LABEL);
|
|
75
|
-
|
|
76
|
-
return ObjectToView(split);
|
|
77
|
-
},
|
|
78
|
-
/**
|
|
79
|
-
* Get the Split objects present on the factory storage
|
|
80
|
-
*/
|
|
81
|
-
splits() {
|
|
82
|
-
if (!validateIfDestroyed(context) || !validateIfReady(context, 'splits')) {
|
|
83
|
-
return [];
|
|
84
|
-
}
|
|
85
|
-
const currentSplits = splits.getAll();
|
|
86
|
-
|
|
87
|
-
if (thenable(currentSplits)) return currentSplits.then(ObjectsToViews);
|
|
88
|
-
return ObjectsToViews(currentSplits);
|
|
89
|
-
},
|
|
90
|
-
/**
|
|
91
|
-
* Get the Split names present on the factory storage
|
|
92
|
-
*/
|
|
93
|
-
names() {
|
|
94
|
-
if (!validateIfDestroyed(context) || !validateIfReady(context, 'names')) {
|
|
95
|
-
return [];
|
|
96
|
-
}
|
|
97
|
-
return splits.getKeys();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export default SplitManagerFactory;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
class ProducerMetricsCollector {
|
|
2
|
-
constructor(storage) {
|
|
3
|
-
this.storage = storage;
|
|
4
|
-
|
|
5
|
-
this.latency = this.latency.bind(this);
|
|
6
|
-
this.count = this.count.bind(this);
|
|
7
|
-
this.countException = this.countException.bind(this);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
latency(ms) {
|
|
11
|
-
this.storage.metrics.track(`${this.metricType}.time`, ms);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
count(status) {
|
|
15
|
-
this.storage.count.track(`${this.metricType}.status.${status}`);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
countException() {
|
|
19
|
-
this.storage.count.track(`${this.metricType}.exception`);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export class SegmentChangesCollector extends ProducerMetricsCollector {
|
|
24
|
-
constructor(storage) {
|
|
25
|
-
super(storage);
|
|
26
|
-
|
|
27
|
-
this.metricType = 'segmentChangeFetcher';
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export class SplitChangesCollector extends ProducerMetricsCollector {
|
|
32
|
-
constructor(storage) {
|
|
33
|
-
super(storage);
|
|
34
|
-
|
|
35
|
-
this.metricType = 'splitChangeFetcher';
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export class MySegmentsCollector extends ProducerMetricsCollector {
|
|
40
|
-
constructor(storage) {
|
|
41
|
-
super(storage);
|
|
42
|
-
|
|
43
|
-
this.metricType = 'mySegmentsFetcher';
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export class ClientCollector {
|
|
48
|
-
constructor(storage) {
|
|
49
|
-
this.storage = storage;
|
|
50
|
-
|
|
51
|
-
this.ready = this.ready.bind(this);
|
|
52
|
-
this.getTreatment = this.getTreatment.bind(this);
|
|
53
|
-
this.getTreatments = this.getTreatments.bind(this);
|
|
54
|
-
this.getTreatmentWithConfig = this.getTreatmentWithConfig.bind(this);
|
|
55
|
-
this.getTreatmentsWithConfig = this.getTreatmentsWithConfig.bind(this);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
ready(ms) {
|
|
59
|
-
this.storage.metrics.track('sdk.ready', ms);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
getTreatment(ms) {
|
|
63
|
-
this.storage.metrics.track('sdk.getTreatment', ms);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
getTreatments(ms) {
|
|
67
|
-
this.storage.metrics.track('sdk.getTreatments', ms);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
getTreatmentWithConfig(ms) {
|
|
71
|
-
this.storage.metrics.track('sdk.getTreatmentWithConfig', ms);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
getTreatmentsWithConfig(ms) {
|
|
75
|
-
this.storage.metrics.track('sdk.getTreatmentsWithConfig', ms);
|
|
76
|
-
}
|
|
77
|
-
}
|
package/src/metrics/index.js
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
Copyright 2016 Split Software
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import logFactory from '../utils/logger';
|
|
18
|
-
import tracker from '../utils/timeTracker';
|
|
19
|
-
import repeat from '../utils/fn/repeat';
|
|
20
|
-
import metricsService from '../services/metrics';
|
|
21
|
-
import metricsTimesServiceRequest from '../services/metrics/times';
|
|
22
|
-
import metricsCountersServiceRequest from '../services/metrics/counters';
|
|
23
|
-
import {
|
|
24
|
-
fromLatenciesCollector,
|
|
25
|
-
fromCountersCollector
|
|
26
|
-
} from '../services/metrics/dto';
|
|
27
|
-
import impressionsService from '../services/impressions';
|
|
28
|
-
import impressionsBulkRequest from '../services/impressions/bulk';
|
|
29
|
-
import impressionsCountRequest from '../services/impressions/count';
|
|
30
|
-
import { fromImpressionsCollector, fromImpressionsCountCollector } from '../services/impressions/dto';
|
|
31
|
-
import {
|
|
32
|
-
SegmentChangesCollector,
|
|
33
|
-
SplitChangesCollector,
|
|
34
|
-
MySegmentsCollector,
|
|
35
|
-
ClientCollector
|
|
36
|
-
} from './Collectors';
|
|
37
|
-
import { OPTIMIZED } from '../utils/constants';
|
|
38
|
-
|
|
39
|
-
const log = logFactory('splitio-metrics');
|
|
40
|
-
const IMPRESSIONS_COUNT_RATE = 1800000; // 30 minutes
|
|
41
|
-
|
|
42
|
-
const MetricsFactory = context => {
|
|
43
|
-
let impressionsRetries = 0;
|
|
44
|
-
const settings = context.get(context.constants.SETTINGS);
|
|
45
|
-
const storage = context.get(context.constants.STORAGE);
|
|
46
|
-
const impressionsCounter = context.get(context.constants.IMPRESSIONS_COUNTER);
|
|
47
|
-
const shouldPushImpressionsCount = settings.sync.impressionsMode === OPTIMIZED;
|
|
48
|
-
|
|
49
|
-
const pushMetrics = () => {
|
|
50
|
-
if (storage.metrics.isEmpty() && storage.count.isEmpty()) return Promise.resolve();
|
|
51
|
-
|
|
52
|
-
log.debug('Pushing metrics');
|
|
53
|
-
const latencyTrackerStop = tracker.start(tracker.TaskNames.METRICS_PUSH);
|
|
54
|
-
|
|
55
|
-
// POST latencies
|
|
56
|
-
const latenciesPromise = storage.metrics.isEmpty() ? null : metricsService(
|
|
57
|
-
metricsTimesServiceRequest(settings, {
|
|
58
|
-
body: JSON.stringify(fromLatenciesCollector(storage.metrics))
|
|
59
|
-
}))
|
|
60
|
-
.then(() => storage.metrics.clear())
|
|
61
|
-
.catch(() => storage.metrics.clear());
|
|
62
|
-
|
|
63
|
-
// POST counters
|
|
64
|
-
const countersPromise = storage.count.isEmpty() ? null : metricsService(
|
|
65
|
-
metricsCountersServiceRequest(settings, {
|
|
66
|
-
body: JSON.stringify(fromCountersCollector(storage.count))
|
|
67
|
-
}))
|
|
68
|
-
.then(() => storage.count.clear())
|
|
69
|
-
.catch(() => storage.count.clear());
|
|
70
|
-
|
|
71
|
-
return Promise.all([latenciesPromise, countersPromise]).then(resp => {
|
|
72
|
-
// After both finishes, track the end and return the results
|
|
73
|
-
latencyTrackerStop();
|
|
74
|
-
return resp;
|
|
75
|
-
});
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const pushImpressions = () => {
|
|
79
|
-
if (storage.impressions.isEmpty()) return Promise.resolve();
|
|
80
|
-
const imprCount = storage.impressions.queue.length;
|
|
81
|
-
|
|
82
|
-
log.info(`Pushing ${imprCount} impressions`);
|
|
83
|
-
const latencyTrackerStop = tracker.start(tracker.TaskNames.IMPRESSIONS_PUSH);
|
|
84
|
-
|
|
85
|
-
return impressionsService(impressionsBulkRequest(settings, {
|
|
86
|
-
body: JSON.stringify(fromImpressionsCollector(storage.impressions, settings))
|
|
87
|
-
}))
|
|
88
|
-
.then(() => {
|
|
89
|
-
impressionsRetries = 0;
|
|
90
|
-
storage.impressions.clear();
|
|
91
|
-
})
|
|
92
|
-
.catch(err => {
|
|
93
|
-
if (impressionsRetries) { // For now we retry only once.
|
|
94
|
-
log.warn(`Droping ${imprCount} impressions after retry. Reason ${err}.`);
|
|
95
|
-
impressionsRetries = 0;
|
|
96
|
-
storage.impressions.clear();
|
|
97
|
-
} else {
|
|
98
|
-
impressionsRetries++;
|
|
99
|
-
log.warn(`Failed to push ${imprCount} impressions, keeping data to retry on next iteration. Reason ${err}.`);
|
|
100
|
-
}
|
|
101
|
-
})
|
|
102
|
-
.then(() => latencyTrackerStop());
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
const pushImpressionsCount = () => {
|
|
106
|
-
const pf = fromImpressionsCountCollector(impressionsCounter);
|
|
107
|
-
const imprCounts = pf.length;
|
|
108
|
-
if (imprCounts === 0) return Promise.resolve();
|
|
109
|
-
|
|
110
|
-
log.info(`Pushing count of impressions for ${imprCounts} features`);
|
|
111
|
-
|
|
112
|
-
return impressionsService(impressionsCountRequest(settings, {
|
|
113
|
-
body: JSON.stringify({ pf })
|
|
114
|
-
}))
|
|
115
|
-
.then(() => {
|
|
116
|
-
impressionsRetries = 0;
|
|
117
|
-
})
|
|
118
|
-
.catch(err => {
|
|
119
|
-
if (impressionsRetries) { // For now we retry only once.
|
|
120
|
-
log.warn(`Droping count of impressions for ${imprCounts} features after retry. Reason ${err}.`);
|
|
121
|
-
impressionsRetries = 0;
|
|
122
|
-
} else {
|
|
123
|
-
impressionsRetries++;
|
|
124
|
-
log.warn(`Failed to push impressions count for ${imprCounts} features, keeping data to retry on next iteration. Reason ${err}.`);
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
let stopImpressionsPublisher = false;
|
|
130
|
-
let stopPerformancePublisher = false;
|
|
131
|
-
let stopImpressionsCountPublisher = false;
|
|
132
|
-
|
|
133
|
-
return {
|
|
134
|
-
start() {
|
|
135
|
-
stopImpressionsPublisher = repeat(
|
|
136
|
-
schedulePublisher => pushImpressions().then(() => schedulePublisher()),
|
|
137
|
-
settings.scheduler.impressionsRefreshRate
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
stopPerformancePublisher = repeat(
|
|
141
|
-
schedulePublisher => pushMetrics().then(() => schedulePublisher()),
|
|
142
|
-
settings.scheduler.metricsRefreshRate
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
if (shouldPushImpressionsCount) {
|
|
146
|
-
stopImpressionsCountPublisher = repeat(
|
|
147
|
-
schedulePublisher => pushImpressionsCount().then(() => schedulePublisher()),
|
|
148
|
-
IMPRESSIONS_COUNT_RATE
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
},
|
|
152
|
-
|
|
153
|
-
flush() {
|
|
154
|
-
if (shouldPushImpressionsCount) pushImpressionsCount();
|
|
155
|
-
return pushImpressions();
|
|
156
|
-
},
|
|
157
|
-
|
|
158
|
-
stop() {
|
|
159
|
-
stopImpressionsPublisher && stopImpressionsPublisher();
|
|
160
|
-
stopPerformancePublisher && stopPerformancePublisher();
|
|
161
|
-
stopImpressionsCountPublisher && stopImpressionsCountPublisher();
|
|
162
|
-
},
|
|
163
|
-
|
|
164
|
-
// Metrics collectors
|
|
165
|
-
collectors: {
|
|
166
|
-
segmentChanges: new SegmentChangesCollector(storage),
|
|
167
|
-
splitChanges: new SplitChangesCollector(storage),
|
|
168
|
-
mySegments: new MySegmentsCollector(storage),
|
|
169
|
-
client: new ClientCollector(storage)
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
export default MetricsFactory;
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
Copyright 2016 Split Software
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import TaskFactory from '../task';
|
|
18
|
-
import MySegmentsUpdater from '../updater/MySegments';
|
|
19
|
-
import logFactory from '../../utils/logger';
|
|
20
|
-
const log = logFactory('splitio-producer:mySegmentsHandler');
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Incremental updater to be used to share data in the browser.
|
|
24
|
-
*/
|
|
25
|
-
const PartialBrowserProducer = (context) => {
|
|
26
|
-
const settings = context.get(context.constants.SETTINGS);
|
|
27
|
-
const splitsStorage = context.get(context.constants.STORAGE).splits;
|
|
28
|
-
const { splits: splitsEventEmitter, segments: segmentsEventEmitter } = context.get(context.constants.READINESS);
|
|
29
|
-
|
|
30
|
-
const mySegmentsUpdater = MySegmentsUpdater(context);
|
|
31
|
-
const mySegmentsUpdaterTask = TaskFactory(synchronizeMySegments, settings.scheduler.segmentsRefreshRate);
|
|
32
|
-
|
|
33
|
-
splitsEventEmitter.on(splitsEventEmitter.SDK_SPLITS_ARRIVED, smartPausing);
|
|
34
|
-
// needed for shared clients, we run `smartReady` a first time if splits were sync and don't use segments,
|
|
35
|
-
// to emit SDK_SEGMENTS_ARRIVED (and thus SDK_READY) immediately in next event cycle
|
|
36
|
-
if (!splitsStorage.usesSegments()) setTimeout(smartReady, 0);
|
|
37
|
-
else splitsEventEmitter.once(splitsEventEmitter.SDK_SPLITS_ARRIVED, smartReady);
|
|
38
|
-
|
|
39
|
-
let isSynchronizingMySegments = false;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @param {string[] | undefined} segmentList might be undefined
|
|
43
|
-
* @param {boolean | undefined} noCache true to revalidate data to fetch
|
|
44
|
-
*/
|
|
45
|
-
function synchronizeMySegments(segmentList, noCache) {
|
|
46
|
-
isSynchronizingMySegments = true;
|
|
47
|
-
// `mySegmentsUpdater` promise always resolves, and with a false value if it fails to fetch or store mySegments
|
|
48
|
-
return mySegmentsUpdater(0, segmentList, noCache).then(function (res) {
|
|
49
|
-
isSynchronizingMySegments = false;
|
|
50
|
-
return res;
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
let running = false;
|
|
55
|
-
// we cannot rely on `mySegmentsUpdaterTask.isRunning` to check if doing polling
|
|
56
|
-
function isRunning() {
|
|
57
|
-
return running;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// emit SDK_SEGMENTS_ARRIVED (and thus SDK_READY) if not ready yet and splits are not using segments
|
|
61
|
-
function smartReady() {
|
|
62
|
-
const isReady = context.get(context.constants.READY, true);
|
|
63
|
-
if (!isReady && !splitsStorage.usesSegments()) segmentsEventEmitter.emit(segmentsEventEmitter.SDK_SEGMENTS_ARRIVED);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// smartly pause/resume mySegmentsUpdaterTask while doing polling
|
|
67
|
-
function smartPausing() {
|
|
68
|
-
if (!running) return; // noop if not doing polling
|
|
69
|
-
const splitsHaveSegments = splitsStorage.usesSegments();
|
|
70
|
-
if (splitsHaveSegments !== mySegmentsUpdaterTask.isRunning()) {
|
|
71
|
-
log.info(`Turning segments data polling ${splitsHaveSegments ? 'ON' : 'OFF'}.`);
|
|
72
|
-
if (splitsHaveSegments) {
|
|
73
|
-
mySegmentsUpdaterTask.start();
|
|
74
|
-
} else {
|
|
75
|
-
mySegmentsUpdaterTask.stop();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return {
|
|
81
|
-
// Start periodic fetching (polling)
|
|
82
|
-
start() {
|
|
83
|
-
running = true;
|
|
84
|
-
if (splitsStorage.usesSegments()) mySegmentsUpdaterTask.start();
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
// Stop periodic fetching (polling)
|
|
88
|
-
stop() {
|
|
89
|
-
running = false;
|
|
90
|
-
mySegmentsUpdaterTask.stop();
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
// Used by SyncManager to know if running in polling mode.
|
|
94
|
-
isRunning,
|
|
95
|
-
|
|
96
|
-
// Used by MySegmentUpdateWorker
|
|
97
|
-
isSynchronizingMySegments() {
|
|
98
|
-
return isSynchronizingMySegments;
|
|
99
|
-
},
|
|
100
|
-
synchronizeMySegments,
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
export default PartialBrowserProducer;
|
package/src/producer/browser.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
Copyright 2016 Split Software
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import logFactory from '../utils/logger';
|
|
18
|
-
import TaskFactory from './task';
|
|
19
|
-
import SplitChangesUpdater from './updater/SplitChanges';
|
|
20
|
-
import PartialBrowserProducer from './browser/Partial';
|
|
21
|
-
|
|
22
|
-
const log = logFactory('splitio-producer:updater');
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Startup all the background jobs required for a Browser SDK instance.
|
|
26
|
-
*/
|
|
27
|
-
const FullBrowserProducer = (context) => {
|
|
28
|
-
const settings = context.get(context.constants.SETTINGS);
|
|
29
|
-
|
|
30
|
-
const splitsUpdater = SplitChangesUpdater(context);
|
|
31
|
-
|
|
32
|
-
const splitsUpdaterTask = TaskFactory(synchronizeSplits, settings.scheduler.featuresRefreshRate);
|
|
33
|
-
|
|
34
|
-
const mySegmentsProducer = PartialBrowserProducer(context);
|
|
35
|
-
|
|
36
|
-
let isSynchronizingSplits = false;
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* @param {boolean | undefined} noCache true to revalidate data to fetch
|
|
40
|
-
*/
|
|
41
|
-
function synchronizeSplits(noCache) {
|
|
42
|
-
isSynchronizingSplits = true;
|
|
43
|
-
// `splitsUpdater` promise always resolves, and with a false value if it fails to fetch or store splits
|
|
44
|
-
return splitsUpdater(0, noCache).then(function (res) {
|
|
45
|
-
isSynchronizingSplits = false;
|
|
46
|
-
return res;
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
// Start periodic fetching (polling)
|
|
52
|
-
start() {
|
|
53
|
-
log.info('Starting BROWSER producer');
|
|
54
|
-
|
|
55
|
-
splitsUpdaterTask.start();
|
|
56
|
-
mySegmentsProducer.start();
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
// Stop periodic fetching (polling)
|
|
60
|
-
stop() {
|
|
61
|
-
log.info('Stopping BROWSER producer');
|
|
62
|
-
|
|
63
|
-
splitsUpdaterTask.stop();
|
|
64
|
-
mySegmentsProducer.stop();
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
// Used by SyncManager to know if running in polling mode.
|
|
68
|
-
isRunning: splitsUpdaterTask.isRunning,
|
|
69
|
-
|
|
70
|
-
// Used by SplitUpdateWorker
|
|
71
|
-
isSynchronizingSplits() {
|
|
72
|
-
return isSynchronizingSplits;
|
|
73
|
-
},
|
|
74
|
-
synchronizeSplits,
|
|
75
|
-
|
|
76
|
-
// Used by MySegmentUpdateWorker
|
|
77
|
-
isSynchronizingMySegments: mySegmentsProducer.isSynchronizingMySegments,
|
|
78
|
-
synchronizeMySegments: mySegmentsProducer.synchronizeMySegments,
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
export default FullBrowserProducer;
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
Copyright 2016 Split Software
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import timeout from '../../utils/promise/timeout';
|
|
18
|
-
import tracker from '../../utils/timeTracker';
|
|
19
|
-
import { SplitError } from '../../utils/lang/Errors';
|
|
20
|
-
import mySegmentsService from '../../services/mySegments';
|
|
21
|
-
import mySegmentsRequest from '../../services/mySegments/get';
|
|
22
|
-
|
|
23
|
-
const mySegmentsFetcher = (settings, startingUp = false, metricCollectors, noCache) => {
|
|
24
|
-
let mySegmentsPromise = mySegmentsService(mySegmentsRequest(settings, noCache));
|
|
25
|
-
|
|
26
|
-
mySegmentsPromise = tracker.start(tracker.TaskNames.MY_SEGMENTS_FETCH, startingUp ? metricCollectors : false, mySegmentsPromise);
|
|
27
|
-
|
|
28
|
-
// Decorate with the timeout functionality if required
|
|
29
|
-
if (startingUp) {
|
|
30
|
-
mySegmentsPromise = timeout(settings.startup.requestTimeoutBeforeReady, mySegmentsPromise);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Extract segment names
|
|
34
|
-
return mySegmentsPromise
|
|
35
|
-
// JSON parsing errors are handled as SplitErrors, to distinguish from user callback errors
|
|
36
|
-
.then(resp => resp.json().catch(error => { throw new SplitError(error.message); }))
|
|
37
|
-
.then(json => json.mySegments.map(segment => segment.name));
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export default mySegmentsFetcher;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
Copyright 2016 Split Software
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import segmentChangesService from '../../services/segmentChanges';
|
|
18
|
-
import segmentChangesRequest from '../../services/segmentChanges/get';
|
|
19
|
-
import tracker from '../../utils/timeTracker';
|
|
20
|
-
|
|
21
|
-
function greedyFetch(settings, lastSinceValue, segmentName, metricCollectors, noCache) {
|
|
22
|
-
return tracker.start(tracker.TaskNames.SEGMENTS_FETCH, metricCollectors, segmentChangesService(segmentChangesRequest(settings, {
|
|
23
|
-
since: lastSinceValue,
|
|
24
|
-
segmentName
|
|
25
|
-
}, noCache)))
|
|
26
|
-
// no need to handle json parsing errors as SplitError, since errors are handled differently for segments
|
|
27
|
-
.then(resp => resp.json())
|
|
28
|
-
.then(json => {
|
|
29
|
-
let { since, till } = json;
|
|
30
|
-
if (since === till) {
|
|
31
|
-
return [json];
|
|
32
|
-
} else {
|
|
33
|
-
return Promise.all([json, greedyFetch(settings, till, segmentName, undefined, noCache)]).then(flatMe => {
|
|
34
|
-
return [flatMe[0], ...flatMe[1]];
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
})
|
|
38
|
-
.catch(err => {
|
|
39
|
-
// If the operation is forbidden it may be due to permissions, don't recover and propagate the error.
|
|
40
|
-
if (err.statusCode === 403) throw err;
|
|
41
|
-
// if something goes wrong with the request to the server, we are going to
|
|
42
|
-
// stop requesting information till the next round of downloading
|
|
43
|
-
return [];
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// @TODO migrate to a generator function and do the job incrementally
|
|
48
|
-
function segmentChangesFetcher(settings, segmentName, since, metricCollectors, noCache) {
|
|
49
|
-
return greedyFetch(settings, since, segmentName, metricCollectors, noCache);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export default segmentChangesFetcher;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
Copyright 2016 Split Software
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import timeout from '../../utils/promise/timeout';
|
|
18
|
-
import tracker from '../../utils/timeTracker';
|
|
19
|
-
import { SplitError } from '../../utils/lang/Errors';
|
|
20
|
-
import splitChangesService from '../../services/splitChanges';
|
|
21
|
-
import splitChangesRequest from '../../services/splitChanges/get';
|
|
22
|
-
|
|
23
|
-
function splitChangesFetcher(settings, since, startingUp = false, metricCollectors, isNode, noCache) {
|
|
24
|
-
const filterQueryString = settings.sync.__splitFiltersValidation.queryString;
|
|
25
|
-
let splitsPromise = splitChangesService(splitChangesRequest(settings, since, filterQueryString, noCache));
|
|
26
|
-
const collectMetrics = startingUp || isNode; // If we are on the browser, only collect this metric for first fetch. On node do it always.
|
|
27
|
-
|
|
28
|
-
splitsPromise = tracker.start(tracker.TaskNames.SPLITS_FETCH, collectMetrics ? metricCollectors : false, splitsPromise);
|
|
29
|
-
|
|
30
|
-
if (startingUp) { // Decorate with the timeout functionality if required
|
|
31
|
-
splitsPromise = timeout(settings.startup.requestTimeoutBeforeReady, splitsPromise);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return splitsPromise
|
|
35
|
-
// JSON parsing errors are handled as SplitErrors, to distinguish from user callback errors
|
|
36
|
-
.then(resp => resp.json().catch(error => { throw new SplitError(error.message); }));
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export default splitChangesFetcher;
|