skylight 3.1.4 → 5.3.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +465 -294
- data/CLA.md +1 -1
- data/CONTRIBUTING.md +11 -3
- data/ERRORS.md +3 -0
- data/LICENSE.md +8 -18
- data/README.md +1 -2
- data/bin/skylight +1 -1
- data/ext/extconf.rb +118 -122
- data/ext/libskylight.yml +8 -6
- data/ext/skylight_native.c +56 -100
- data/lib/skylight/api.rb +41 -27
- data/lib/skylight/cli/doctor.rb +68 -70
- data/lib/skylight/cli/helpers.rb +3 -5
- data/lib/skylight/cli/merger.rb +99 -92
- data/lib/skylight/cli.rb +40 -43
- data/lib/skylight/config.rb +656 -201
- data/lib/skylight/data/cacert.pem +730 -1023
- data/lib/skylight/deprecation.rb +17 -0
- data/lib/skylight/errors.rb +34 -16
- data/lib/skylight/extensions/source_location.rb +291 -0
- data/lib/skylight/extensions.rb +95 -0
- data/lib/skylight/formatters/http.rb +18 -0
- data/lib/skylight/gc.rb +99 -0
- data/lib/skylight/helpers.rb +82 -39
- data/lib/skylight/instrumenter.rb +339 -9
- data/lib/skylight/middleware.rb +147 -1
- data/lib/skylight/native.rb +71 -23
- data/lib/skylight/native_ext_fetcher.rb +39 -47
- data/lib/skylight/normalizers/action_controller/process_action.rb +68 -0
- data/lib/skylight/normalizers/action_controller/send_file.rb +51 -0
- data/lib/skylight/normalizers/action_dispatch/process_middleware.rb +22 -0
- data/lib/skylight/normalizers/action_dispatch/route_set.rb +27 -0
- data/lib/skylight/normalizers/action_view/render_collection.rb +24 -0
- data/lib/skylight/normalizers/action_view/render_layout.rb +25 -0
- data/lib/skylight/normalizers/action_view/render_partial.rb +23 -0
- data/lib/skylight/normalizers/action_view/render_template.rb +23 -0
- data/lib/skylight/normalizers/active_job/perform.rb +87 -0
- data/lib/skylight/normalizers/active_model_serializers/render.rb +32 -0
- data/lib/skylight/normalizers/active_record/instantiation.rb +16 -0
- data/lib/skylight/normalizers/active_record/sql.rb +20 -0
- data/lib/skylight/normalizers/active_storage.rb +28 -0
- data/lib/skylight/normalizers/active_support/cache.rb +11 -0
- data/lib/skylight/normalizers/active_support/cache_clear.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_decrement.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_delete.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_exist.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_fetch_hit.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_generate.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_increment.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_read.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_read_multi.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_write.rb +16 -0
- data/lib/skylight/normalizers/coach/handler_finish.rb +44 -0
- data/lib/skylight/normalizers/coach/middleware_finish.rb +33 -0
- data/lib/skylight/normalizers/couch_potato/query.rb +20 -0
- data/lib/skylight/normalizers/data_mapper/sql.rb +12 -0
- data/lib/skylight/normalizers/default.rb +24 -0
- data/lib/skylight/normalizers/elasticsearch/request.rb +20 -0
- data/lib/skylight/normalizers/faraday/request.rb +38 -0
- data/lib/skylight/normalizers/grape/endpoint.rb +28 -0
- data/lib/skylight/normalizers/grape/endpoint_render.rb +25 -0
- data/lib/skylight/normalizers/grape/endpoint_run.rb +39 -0
- data/lib/skylight/normalizers/grape/endpoint_run_filters.rb +20 -0
- data/lib/skylight/normalizers/grape/format_response.rb +20 -0
- data/lib/skylight/normalizers/graphiti/render.rb +22 -0
- data/lib/skylight/normalizers/graphiti/resolve.rb +31 -0
- data/lib/skylight/normalizers/graphql/base.rb +127 -0
- data/lib/skylight/normalizers/render.rb +79 -0
- data/lib/skylight/normalizers/sequel/sql.rb +12 -0
- data/lib/skylight/normalizers/shrine.rb +32 -0
- data/lib/skylight/normalizers/sql.rb +41 -0
- data/lib/skylight/normalizers.rb +157 -0
- data/lib/skylight/probes/action_controller.rb +52 -0
- data/lib/skylight/probes/action_dispatch/request_id.rb +33 -0
- data/lib/skylight/probes/action_dispatch/routing/route_set.rb +30 -0
- data/lib/skylight/probes/action_dispatch.rb +2 -0
- data/lib/skylight/probes/action_view.rb +42 -0
- data/lib/skylight/probes/active_job.rb +27 -0
- data/lib/skylight/probes/active_job_enqueue.rb +35 -0
- data/lib/skylight/probes/active_model_serializers.rb +50 -0
- data/lib/skylight/probes/active_record_async.rb +96 -0
- data/lib/skylight/probes/delayed_job.rb +144 -0
- data/lib/skylight/probes/elasticsearch.rb +45 -0
- data/lib/skylight/probes/excon/middleware.rb +65 -0
- data/lib/skylight/probes/excon.rb +25 -0
- data/lib/skylight/probes/faraday.rb +23 -0
- data/lib/skylight/probes/graphql.rb +38 -0
- data/lib/skylight/probes/httpclient.rb +44 -0
- data/lib/skylight/probes/middleware.rb +135 -0
- data/lib/skylight/probes/mongo.rb +169 -0
- data/lib/skylight/probes/mongoid.rb +6 -0
- data/lib/skylight/probes/net_http.rb +54 -0
- data/lib/skylight/probes/rack_builder.rb +37 -0
- data/lib/skylight/probes/redis.rb +68 -0
- data/lib/skylight/probes/sequel.rb +29 -0
- data/lib/skylight/probes/sinatra.rb +66 -0
- data/lib/skylight/probes/sinatra_add_middleware.rb +10 -10
- data/lib/skylight/probes/tilt.rb +25 -0
- data/lib/skylight/probes.rb +172 -0
- data/lib/skylight/railtie.rb +172 -15
- data/lib/skylight/sidekiq.rb +47 -0
- data/lib/skylight/sinatra.rb +2 -2
- data/lib/skylight/subscriber.rb +130 -0
- data/lib/skylight/test.rb +147 -0
- data/lib/skylight/trace.rb +331 -15
- data/lib/skylight/user_config.rb +60 -0
- data/lib/skylight/util/allocation_free.rb +26 -0
- data/lib/skylight/util/clock.rb +57 -0
- data/lib/skylight/util/component.rb +47 -9
- data/lib/skylight/util/deploy.rb +24 -40
- data/lib/skylight/util/gzip.rb +20 -0
- data/lib/skylight/util/hostname.rb +4 -4
- data/lib/skylight/util/http.rb +62 -71
- data/lib/skylight/util/instrumenter_method.rb +26 -0
- data/lib/skylight/util/logging.rb +136 -0
- data/lib/skylight/util/lru_cache.rb +36 -0
- data/lib/skylight/util/platform.rb +74 -0
- data/lib/skylight/util/proxy.rb +13 -0
- data/lib/skylight/util/ssl.rb +4 -28
- data/lib/skylight/util.rb +12 -0
- data/lib/skylight/vendor/cli/thor/rake_compat.rb +1 -1
- data/lib/skylight/version.rb +5 -1
- data/lib/skylight/vm/gc.rb +60 -0
- data/lib/skylight.rb +213 -24
- metadata +171 -53
data/ext/skylight_native.c
CHANGED
|
@@ -86,14 +86,6 @@ typedef void* (*blocking_fn_t)(void*);
|
|
|
86
86
|
#define WITHOUT_GVL(fn, a) \
|
|
87
87
|
rb_thread_call_without_gvl((blocking_fn_t)(fn), (a), 0, 0)
|
|
88
88
|
|
|
89
|
-
// Ruby 1.9
|
|
90
|
-
#elif defined(HAVE_RB_THREAD_BLOCKING_REGION)
|
|
91
|
-
|
|
92
|
-
typedef VALUE (*blocking_fn_t)(void*);
|
|
93
|
-
#define WITHOUT_GVL(fn, a) \
|
|
94
|
-
rb_thread_blocking_region((blocking_fn_t)(fn), (a), 0, 0)
|
|
95
|
-
|
|
96
|
-
|
|
97
89
|
#endif
|
|
98
90
|
|
|
99
91
|
|
|
@@ -103,7 +95,6 @@ typedef VALUE (*blocking_fn_t)(void*);
|
|
|
103
95
|
|
|
104
96
|
VALUE rb_mSkylight;
|
|
105
97
|
VALUE rb_eNativeError;
|
|
106
|
-
VALUE rb_mCore;
|
|
107
98
|
VALUE rb_mUtil;
|
|
108
99
|
VALUE rb_cClock;
|
|
109
100
|
VALUE rb_cTrace;
|
|
@@ -140,7 +131,7 @@ load_libskylight(VALUE klass, VALUE path) {
|
|
|
140
131
|
|
|
141
132
|
/*
|
|
142
133
|
*
|
|
143
|
-
* class Skylight::
|
|
134
|
+
* class Skylight::Util::Clock
|
|
144
135
|
*
|
|
145
136
|
*/
|
|
146
137
|
|
|
@@ -152,7 +143,7 @@ clock_high_res_time(VALUE self) {
|
|
|
152
143
|
|
|
153
144
|
/*
|
|
154
145
|
*
|
|
155
|
-
* class Skylight::
|
|
146
|
+
* class Skylight::Instrumenter
|
|
156
147
|
*
|
|
157
148
|
*/
|
|
158
149
|
|
|
@@ -243,33 +234,9 @@ instrumenter_submit_trace(VALUE self, VALUE rb_trace) {
|
|
|
243
234
|
return Qnil;
|
|
244
235
|
}
|
|
245
236
|
|
|
246
|
-
static VALUE
|
|
247
|
-
instrumenter_track_desc(VALUE self, VALUE rb_endpoint, VALUE rb_desc) {
|
|
248
|
-
int tracked;
|
|
249
|
-
sky_instrumenter_t* instrumenter;
|
|
250
|
-
|
|
251
|
-
CHECK_TYPE(rb_endpoint, T_STRING);
|
|
252
|
-
CHECK_TYPE(rb_desc, T_STRING);
|
|
253
|
-
|
|
254
|
-
tracked = 0;
|
|
255
|
-
|
|
256
|
-
My_Struct(instrumenter, sky_instrumenter_t, no_instrumenter_msg);
|
|
257
|
-
|
|
258
|
-
CHECK_FFI(
|
|
259
|
-
sky_instrumenter_track_desc(instrumenter, STR2BUF(rb_endpoint), STR2BUF(rb_desc), &tracked),
|
|
260
|
-
"Instrumenter#native_track_desc");
|
|
261
|
-
|
|
262
|
-
if (tracked) {
|
|
263
|
-
return Qtrue;
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
return Qfalse;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
237
|
/*
|
|
271
238
|
*
|
|
272
|
-
* class Skylight::
|
|
239
|
+
* class Skylight::Trace
|
|
273
240
|
*
|
|
274
241
|
*/
|
|
275
242
|
|
|
@@ -334,6 +301,34 @@ trace_set_endpoint(VALUE self, VALUE endpoint) {
|
|
|
334
301
|
return Qnil;
|
|
335
302
|
}
|
|
336
303
|
|
|
304
|
+
static VALUE
|
|
305
|
+
trace_get_component(VALUE self) {
|
|
306
|
+
sky_trace_t* trace;
|
|
307
|
+
sky_buf_t component;
|
|
308
|
+
|
|
309
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
|
310
|
+
|
|
311
|
+
CHECK_FFI(
|
|
312
|
+
sky_trace_component(trace, &component),
|
|
313
|
+
"Trace#native_get_component");
|
|
314
|
+
|
|
315
|
+
return BUF2STR(component);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
static VALUE
|
|
319
|
+
trace_set_component(VALUE self, VALUE component) {
|
|
320
|
+
sky_trace_t* trace;
|
|
321
|
+
|
|
322
|
+
CHECK_TYPE(component, T_STRING);
|
|
323
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
|
324
|
+
|
|
325
|
+
CHECK_FFI(
|
|
326
|
+
sky_trace_set_component(trace, STR2BUF(component)),
|
|
327
|
+
"Trace#native_set_component");
|
|
328
|
+
|
|
329
|
+
return Qnil;
|
|
330
|
+
}
|
|
331
|
+
|
|
337
332
|
static VALUE
|
|
338
333
|
trace_use_pruning(VALUE self) {
|
|
339
334
|
sky_trace_t* trace;
|
|
@@ -475,15 +470,31 @@ trace_span_set_description(VALUE self, VALUE span, VALUE desc) {
|
|
|
475
470
|
|
|
476
471
|
static VALUE
|
|
477
472
|
trace_span_set_meta(VALUE self, VALUE span, VALUE meta) {
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
473
|
+
sky_trace_t* trace;
|
|
474
|
+
VALUE rb_source_location;
|
|
475
|
+
|
|
476
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
|
477
|
+
|
|
478
|
+
CHECK_TYPE(span, T_FIXNUM);
|
|
479
|
+
CHECK_TYPE(meta, T_HASH);
|
|
480
|
+
|
|
481
|
+
rb_source_location = rb_hash_lookup(meta, ID2SYM(rb_intern("source_location")));
|
|
482
|
+
if (rb_source_location != Qnil) {
|
|
483
|
+
sky_buf_t source_location;
|
|
484
|
+
|
|
485
|
+
CHECK_TYPE(rb_source_location, T_STRING);
|
|
486
|
+
source_location = STR2BUF(rb_source_location);
|
|
487
|
+
|
|
488
|
+
sky_trace_span_add_string_annotation(trace, FIX2UINT(span), 3, source_location);
|
|
489
|
+
}
|
|
490
|
+
|
|
481
491
|
return Qnil;
|
|
482
492
|
}
|
|
483
493
|
|
|
484
494
|
static VALUE
|
|
485
|
-
trace_span_started(VALUE self) {
|
|
495
|
+
trace_span_started(VALUE self, VALUE span) {
|
|
486
496
|
UNUSED(self);
|
|
497
|
+
UNUSED(span);
|
|
487
498
|
return Qnil;
|
|
488
499
|
}
|
|
489
500
|
|
|
@@ -496,79 +507,25 @@ trace_span_set_exception(VALUE self, VALUE span, VALUE exception, VALUE exceptio
|
|
|
496
507
|
return Qnil;
|
|
497
508
|
}
|
|
498
509
|
|
|
499
|
-
static VALUE
|
|
500
|
-
trace_span_get_correlation_header(VALUE self, VALUE span_id) {
|
|
501
|
-
UNUSED(self);
|
|
502
|
-
UNUSED(span_id);
|
|
503
|
-
return Qnil;
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
static VALUE
|
|
507
|
-
lex_sql(VALUE klass, VALUE rb_sql) {
|
|
508
|
-
sky_buf_t sql;
|
|
509
|
-
sky_buf_t title;
|
|
510
|
-
sky_buf_t statement;
|
|
511
|
-
uint8_t title_store[128];
|
|
512
|
-
VALUE rb_statement;
|
|
513
|
-
VALUE ret;
|
|
514
|
-
|
|
515
|
-
UNUSED(klass);
|
|
516
|
-
CHECK_TYPE(rb_sql, T_STRING);
|
|
517
|
-
|
|
518
|
-
sql = STR2BUF(rb_sql);
|
|
519
|
-
title = (sky_buf_t) {
|
|
520
|
-
.data = title_store,
|
|
521
|
-
.len = sizeof(title_store),
|
|
522
|
-
};
|
|
523
|
-
|
|
524
|
-
// The statement cannot be longer than the original sql string
|
|
525
|
-
rb_statement = rb_str_buf_new(RSTRING_LEN(rb_sql));
|
|
526
|
-
statement = (sky_buf_t) {
|
|
527
|
-
.data = RSTRING_PTR(rb_statement),
|
|
528
|
-
.len = RSTRING_LEN(rb_sql),
|
|
529
|
-
};
|
|
530
|
-
|
|
531
|
-
CHECK_FFI(sky_lex_sql(sql, &title, &statement),
|
|
532
|
-
"Skylight#lex_sql");
|
|
533
|
-
|
|
534
|
-
// Set the statement return
|
|
535
|
-
rb_str_set_len(rb_statement, statement.len);
|
|
536
|
-
rb_enc_associate(rb_statement, rb_utf8_encoding());
|
|
537
|
-
|
|
538
|
-
ret = rb_ary_new2(2);
|
|
539
|
-
|
|
540
|
-
if (title.len > 0) {
|
|
541
|
-
rb_ary_store(ret, 0, BUF2STR(title));
|
|
542
|
-
}
|
|
543
|
-
else {
|
|
544
|
-
rb_ary_store(ret, 0, Qnil);
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
rb_ary_store(ret, 1, rb_statement);
|
|
548
|
-
|
|
549
|
-
return ret;
|
|
550
|
-
}
|
|
551
|
-
|
|
552
510
|
void Init_skylight_native() {
|
|
553
511
|
rb_mSkylight = rb_define_module("Skylight");
|
|
554
512
|
|
|
555
513
|
rb_eNativeError = rb_const_get(rb_mSkylight, rb_intern("NativeError"));
|
|
556
514
|
|
|
557
515
|
rb_define_singleton_method(rb_mSkylight, "load_libskylight", load_libskylight, 1);
|
|
558
|
-
rb_define_singleton_method(rb_mSkylight, "lex_sql", lex_sql, 1);
|
|
559
|
-
|
|
560
|
-
rb_mCore = rb_define_module_under(rb_mSkylight, "Core");
|
|
561
516
|
|
|
562
|
-
|
|
563
|
-
rb_mUtil = rb_define_module_under(rb_mCore, "Util");
|
|
517
|
+
rb_mUtil = rb_define_module_under(rb_mSkylight, "Util");
|
|
564
518
|
rb_cClock = rb_define_class_under(rb_mUtil, "Clock", rb_cObject);
|
|
565
519
|
rb_define_method(rb_cClock, "native_hrtime", clock_high_res_time, 0);
|
|
566
520
|
|
|
567
521
|
rb_cTrace = rb_const_get(rb_mSkylight, rb_intern("Trace"));
|
|
568
522
|
rb_define_singleton_method(rb_cTrace, "native_new", trace_new, 4);
|
|
523
|
+
rb_undef_alloc_func(rb_cTrace);
|
|
569
524
|
rb_define_method(rb_cTrace, "native_get_started_at", trace_get_started_at, 0);
|
|
570
525
|
rb_define_method(rb_cTrace, "native_get_endpoint", trace_get_endpoint, 0);
|
|
571
526
|
rb_define_method(rb_cTrace, "native_set_endpoint", trace_set_endpoint, 1);
|
|
527
|
+
rb_define_method(rb_cTrace, "native_get_component", trace_get_component, 0);
|
|
528
|
+
rb_define_method(rb_cTrace, "native_set_component", trace_set_component, 1);
|
|
572
529
|
rb_define_method(rb_cTrace, "native_use_pruning", trace_use_pruning, 0);
|
|
573
530
|
rb_define_method(rb_cTrace, "native_set_exception", trace_set_exception, 1);
|
|
574
531
|
rb_define_method(rb_cTrace, "native_get_uuid", trace_get_uuid, 0);
|
|
@@ -581,12 +538,11 @@ void Init_skylight_native() {
|
|
|
581
538
|
rb_define_method(rb_cTrace, "native_span_set_meta", trace_span_set_meta, 2);
|
|
582
539
|
rb_define_method(rb_cTrace, "native_span_started", trace_span_started, 1);
|
|
583
540
|
rb_define_method(rb_cTrace, "native_span_set_exception", trace_span_set_exception, 3);
|
|
584
|
-
rb_define_method(rb_cTrace, "native_span_get_correlation_header", trace_span_get_correlation_header, 1);
|
|
585
541
|
|
|
586
542
|
rb_cInstrumenter = rb_const_get(rb_mSkylight, rb_intern("Instrumenter"));
|
|
587
543
|
rb_define_singleton_method(rb_cInstrumenter, "native_new", instrumenter_new, 2);
|
|
544
|
+
rb_undef_alloc_func(rb_cInstrumenter);
|
|
588
545
|
rb_define_method(rb_cInstrumenter, "native_start", instrumenter_start, 0);
|
|
589
546
|
rb_define_method(rb_cInstrumenter, "native_stop", instrumenter_stop, 0);
|
|
590
547
|
rb_define_method(rb_cInstrumenter, "native_submit_trace", instrumenter_submit_trace, 1);
|
|
591
|
-
rb_define_method(rb_cInstrumenter, "native_track_desc", instrumenter_track_desc, 2);
|
|
592
548
|
}
|
data/lib/skylight/api.rb
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require "uri"
|
|
2
|
+
require "skylight/util/http"
|
|
3
3
|
|
|
4
4
|
module Skylight
|
|
5
5
|
# @api private
|
|
6
6
|
class Api
|
|
7
|
-
include
|
|
7
|
+
include Util::Logging
|
|
8
8
|
|
|
9
9
|
attr_reader :config
|
|
10
10
|
|
|
11
|
-
class Error < StandardError
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
class Error < StandardError
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class Unauthorized < Error
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class Conflict < Error
|
|
18
|
+
end
|
|
19
|
+
|
|
14
20
|
class CreateFailed < Error
|
|
15
21
|
attr_reader :res
|
|
16
22
|
|
|
@@ -21,14 +27,15 @@ module Skylight
|
|
|
21
27
|
|
|
22
28
|
def errors
|
|
23
29
|
return unless res.respond_to?(:body) && res.body.is_a?(Hash)
|
|
24
|
-
|
|
30
|
+
|
|
31
|
+
res.body["errors"]
|
|
25
32
|
end
|
|
26
33
|
|
|
27
34
|
def to_s
|
|
28
35
|
if errors
|
|
29
36
|
errors.inspect
|
|
30
37
|
elsif res
|
|
31
|
-
"#{res.class
|
|
38
|
+
"#{res.class}: #{res}"
|
|
32
39
|
else
|
|
33
40
|
super
|
|
34
41
|
end
|
|
@@ -36,8 +43,7 @@ module Skylight
|
|
|
36
43
|
end
|
|
37
44
|
|
|
38
45
|
class ConfigValidationResults
|
|
39
|
-
|
|
40
|
-
include Core::Util::Logging
|
|
46
|
+
include Util::Logging
|
|
41
47
|
|
|
42
48
|
attr_reader :raw_response
|
|
43
49
|
|
|
@@ -46,7 +52,7 @@ module Skylight
|
|
|
46
52
|
@raw_response = raw_response
|
|
47
53
|
end
|
|
48
54
|
|
|
49
|
-
def
|
|
55
|
+
def error_response?
|
|
50
56
|
raw_response.is_a?(Util::HTTP::ErrorResponse) || status > 499
|
|
51
57
|
end
|
|
52
58
|
|
|
@@ -55,7 +61,7 @@ module Skylight
|
|
|
55
61
|
end
|
|
56
62
|
|
|
57
63
|
def body
|
|
58
|
-
return nil if
|
|
64
|
+
return nil if error_response?
|
|
59
65
|
|
|
60
66
|
unless raw_response.body.is_a?(Hash)
|
|
61
67
|
warn("Unable to parse server response: status=%s, body=%s", raw_response.status, raw_response.body)
|
|
@@ -67,11 +73,15 @@ module Skylight
|
|
|
67
73
|
|
|
68
74
|
def token_valid?
|
|
69
75
|
# Don't prevent boot if it's an error response, so assume token is valid
|
|
70
|
-
return true if
|
|
76
|
+
return true if error_response?
|
|
77
|
+
|
|
71
78
|
# A 2xx response means everything is good!
|
|
72
79
|
return true if raw_response.success?
|
|
73
|
-
|
|
74
|
-
|
|
80
|
+
return false if status == 401
|
|
81
|
+
|
|
82
|
+
# A 403/422 means an invalid config,
|
|
83
|
+
# but the token must be valid if we got this far
|
|
84
|
+
true
|
|
75
85
|
end
|
|
76
86
|
|
|
77
87
|
def config_valid?
|
|
@@ -79,44 +89,50 @@ module Skylight
|
|
|
79
89
|
raw_response.success?
|
|
80
90
|
end
|
|
81
91
|
|
|
92
|
+
def forbidden?
|
|
93
|
+
status == 403
|
|
94
|
+
end
|
|
95
|
+
|
|
82
96
|
def validation_errors
|
|
83
|
-
return if config_valid?
|
|
84
|
-
|
|
97
|
+
return {} if config_valid? || !body
|
|
98
|
+
|
|
99
|
+
body["errors"]
|
|
85
100
|
end
|
|
86
101
|
|
|
87
102
|
def corrected_config
|
|
88
|
-
return if config_valid?
|
|
89
|
-
body ? body['corrected'] : nil
|
|
90
|
-
end
|
|
103
|
+
return nil if config_valid? || !body
|
|
91
104
|
|
|
105
|
+
body["corrected"]
|
|
106
|
+
end
|
|
92
107
|
end
|
|
93
108
|
|
|
94
109
|
def initialize(config)
|
|
95
110
|
@config = config
|
|
96
111
|
end
|
|
97
112
|
|
|
98
|
-
def create_app(name, token=nil)
|
|
113
|
+
def create_app(name, token = nil)
|
|
99
114
|
params = { app: { name: name } }
|
|
100
115
|
params[:token] = token if token
|
|
101
116
|
|
|
102
117
|
res = http_request(:app_create, :post, params)
|
|
103
118
|
|
|
104
119
|
raise CreateFailed, res unless res.success?
|
|
120
|
+
|
|
105
121
|
res
|
|
106
122
|
end
|
|
107
123
|
|
|
108
124
|
def fetch_mergeable_apps(token)
|
|
109
|
-
headers = {
|
|
125
|
+
headers = { "x-skylight-merge-token" => token }
|
|
110
126
|
http_request(:merges, :get, headers).tap do |res|
|
|
111
|
-
raise error_for_status(res.status)
|
|
127
|
+
raise error_for_status(res.status), "HTTP #{res.status}: #{res.body}" unless res.success?
|
|
112
128
|
end
|
|
113
129
|
end
|
|
114
130
|
|
|
115
131
|
def merge_apps!(token, app_guid:, component_guid:, environment:)
|
|
116
|
-
headers = {
|
|
132
|
+
headers = { "x-skylight-merge-token" => token }
|
|
117
133
|
body = { environment: environment, app_guid: app_guid, component_guid: component_guid }
|
|
118
134
|
http_request(:merges, :post, body, headers).tap do |res|
|
|
119
|
-
raise error_for_status(res.status)
|
|
135
|
+
raise error_for_status(res.status), "HTTP #{res.status}: #{res.body}" unless res.success?
|
|
120
136
|
end
|
|
121
137
|
end
|
|
122
138
|
|
|
@@ -144,7 +160,5 @@ module Skylight
|
|
|
144
160
|
Error
|
|
145
161
|
end
|
|
146
162
|
end
|
|
147
|
-
|
|
148
163
|
end
|
|
149
|
-
|
|
150
164
|
end
|
data/lib/skylight/cli/doctor.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "skylight/util/http"
|
|
2
2
|
|
|
3
3
|
module Skylight
|
|
4
4
|
module CLI
|
|
@@ -20,11 +20,13 @@ module Skylight
|
|
|
20
20
|
say "Failed to verify SSL certificate.", :red
|
|
21
21
|
if Util::SSL.ca_cert_file?
|
|
22
22
|
say "Certificates located at #{Util::SSL.ca_cert_file_or_default} may be out of date.", :yellow
|
|
23
|
-
if
|
|
23
|
+
if mac? && rvm_present?
|
|
24
24
|
say "Please update your certificates with RVM by running `rvm osx-ssl-certs update all`.", :yellow
|
|
25
25
|
say "Alternatively, try setting `SKYLIGHT_FORCE_OWN_CERTS=1` in your environment.", :yellow
|
|
26
26
|
else
|
|
27
|
-
say "Please update your local certificates or try setting `SKYLIGHT_FORCE_OWN_CERTS=1` in your
|
|
27
|
+
say "Please update your local certificates or try setting `SKYLIGHT_FORCE_OWN_CERTS=1` in your " \
|
|
28
|
+
"environment.",
|
|
29
|
+
:yellow
|
|
28
30
|
end
|
|
29
31
|
end
|
|
30
32
|
else
|
|
@@ -39,7 +41,7 @@ module Skylight
|
|
|
39
41
|
say "Checking for Rails"
|
|
40
42
|
|
|
41
43
|
indent do
|
|
42
|
-
if
|
|
44
|
+
if rails?
|
|
43
45
|
say "Rails application detected", :green
|
|
44
46
|
else
|
|
45
47
|
say "No Rails application detected", :yellow
|
|
@@ -63,11 +65,9 @@ module Skylight
|
|
|
63
65
|
say "Unable to load native extension", :yellow
|
|
64
66
|
|
|
65
67
|
indent do
|
|
66
|
-
install_log = File.expand_path("../../../ext/install.log",
|
|
68
|
+
install_log = File.expand_path("../../../ext/install.log", __dir__)
|
|
67
69
|
if File.exist?(install_log)
|
|
68
|
-
File.readlines(install_log).each
|
|
69
|
-
say line, :red
|
|
70
|
-
end
|
|
70
|
+
File.readlines(install_log).each { |line| say line, :red }
|
|
71
71
|
else
|
|
72
72
|
say "Reason unknown", :red
|
|
73
73
|
end
|
|
@@ -84,20 +84,18 @@ module Skylight
|
|
|
84
84
|
say "Checking for valid configuration"
|
|
85
85
|
|
|
86
86
|
indent do
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
say "This may occur if you are configuring with ENV variables and didn't set them in this shell."
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
done!
|
|
87
|
+
config.validate!
|
|
88
|
+
say "Configuration is valid", :green
|
|
89
|
+
rescue ConfigError => e
|
|
90
|
+
encountered_error!
|
|
91
|
+
|
|
92
|
+
say "Configuration is invalid", :red
|
|
93
|
+
indent do
|
|
94
|
+
say e.message, :red
|
|
95
|
+
say "This may occur if you are configuring with ENV variables and didn't set them in this shell."
|
|
100
96
|
end
|
|
97
|
+
|
|
98
|
+
done!
|
|
101
99
|
end
|
|
102
100
|
|
|
103
101
|
puts "\n"
|
|
@@ -109,16 +107,19 @@ module Skylight
|
|
|
109
107
|
indent do
|
|
110
108
|
# Set this after we validate. It will give us more detailed information on start.
|
|
111
109
|
logger = Logger.new("/dev/null") # Rely on `say` in the formatter instead
|
|
110
|
+
|
|
112
111
|
# Log everything
|
|
113
112
|
logger.level = Logger::DEBUG
|
|
113
|
+
|
|
114
114
|
# Remove excess formatting
|
|
115
|
-
logger.formatter =
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
logger.formatter =
|
|
116
|
+
proc do |severity, _datetime, _progname, msg|
|
|
117
|
+
msg = msg.sub("[SKYLIGHT] [#{Skylight::VERSION}] ", "")
|
|
118
|
+
say "#{severity} - #{msg}" # Definitely non-standard
|
|
119
|
+
end
|
|
119
120
|
config.logger = logger
|
|
120
121
|
|
|
121
|
-
config.set(:
|
|
122
|
+
config.set(:"daemon.lazy_start", false)
|
|
122
123
|
|
|
123
124
|
started = Skylight.start!(config)
|
|
124
125
|
|
|
@@ -139,7 +140,7 @@ module Skylight
|
|
|
139
140
|
daemon_running = false
|
|
140
141
|
while tries < 5
|
|
141
142
|
`ps cax | grep skylightd`
|
|
142
|
-
if
|
|
143
|
+
if $CHILD_STATUS.success?
|
|
143
144
|
daemon_running = true
|
|
144
145
|
break
|
|
145
146
|
end
|
|
@@ -166,58 +167,55 @@ module Skylight
|
|
|
166
167
|
|
|
167
168
|
private
|
|
168
169
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
# Overwrite the default helper method to load from Rails
|
|
171
|
+
def config
|
|
172
|
+
return @config if @config
|
|
172
173
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
railtie = Skylight::Railtie.send(:new)
|
|
180
|
-
@config = railtie.send(:load_skylight_config, Rails.application)
|
|
181
|
-
else
|
|
182
|
-
super
|
|
183
|
-
end
|
|
184
|
-
end
|
|
174
|
+
# MEGAHAX
|
|
175
|
+
if rails?
|
|
176
|
+
# Normally auto-loaded, but we haven't loaded Rails by the time Skylight is loaded
|
|
177
|
+
require "skylight/railtie"
|
|
178
|
+
require rails_rb
|
|
185
179
|
|
|
186
|
-
|
|
187
|
-
|
|
180
|
+
railtie = Skylight::Railtie.send(:new)
|
|
181
|
+
@config = railtie.send(:load_skylight_config, Rails.application)
|
|
182
|
+
else
|
|
183
|
+
super
|
|
188
184
|
end
|
|
185
|
+
end
|
|
189
186
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
@has_rvm = system("which rvm > /dev/null");
|
|
194
|
-
end
|
|
195
|
-
@has_rvm
|
|
196
|
-
end
|
|
187
|
+
def mac?
|
|
188
|
+
Util::Platform::OS == "darwin"
|
|
189
|
+
end
|
|
197
190
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
191
|
+
# NOTE: This check won't work correctly on Windows
|
|
192
|
+
def rvm_present?
|
|
193
|
+
@has_rvm = system("which rvm > /dev/null") if @has_rvm.nil?
|
|
194
|
+
@has_rvm
|
|
195
|
+
end
|
|
201
196
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
197
|
+
def encountered_error!
|
|
198
|
+
@has_errors = true
|
|
199
|
+
end
|
|
205
200
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
201
|
+
def has_errors?
|
|
202
|
+
@has_errors
|
|
203
|
+
end
|
|
209
204
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
205
|
+
def done!
|
|
206
|
+
shell.padding = 0
|
|
207
|
+
say "\n\n"
|
|
208
|
+
|
|
209
|
+
if has_errors?
|
|
210
|
+
say "Skylight Doctor found some errors. Please review the output above.", :red
|
|
211
|
+
say "If you have any further questions, please contact support@skylight.io.", :yellow
|
|
212
|
+
exit 1
|
|
213
|
+
else
|
|
214
|
+
say "All checks passed!", :green
|
|
215
|
+
say "If you're still having trouble, please contact support@skylight.io.", :yellow
|
|
216
|
+
exit 0
|
|
219
217
|
end
|
|
220
|
-
|
|
218
|
+
end
|
|
221
219
|
end
|
|
222
220
|
end
|
|
223
221
|
end
|
data/lib/skylight/cli/helpers.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
module Skylight
|
|
2
2
|
module CLI
|
|
3
3
|
module Helpers
|
|
4
|
-
|
|
5
4
|
private
|
|
6
5
|
|
|
7
6
|
# Duplicated below
|
|
@@ -9,7 +8,7 @@ module Skylight
|
|
|
9
8
|
File.expand_path("config/application.rb")
|
|
10
9
|
end
|
|
11
10
|
|
|
12
|
-
def
|
|
11
|
+
def rails?
|
|
13
12
|
File.exist?(rails_rb)
|
|
14
13
|
end
|
|
15
14
|
|
|
@@ -20,13 +19,12 @@ module Skylight
|
|
|
20
19
|
|
|
21
20
|
# Sets the output padding while executing a block and resets it.
|
|
22
21
|
#
|
|
23
|
-
def indent(count = 1
|
|
22
|
+
def indent(count = 1)
|
|
24
23
|
orig_padding = shell.padding
|
|
25
24
|
shell.padding += count
|
|
26
25
|
yield
|
|
27
26
|
shell.padding = orig_padding
|
|
28
27
|
end
|
|
29
|
-
|
|
30
28
|
end
|
|
31
29
|
end
|
|
32
|
-
end
|
|
30
|
+
end
|