diff options
| author | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-05-10 13:58:10 -0500 | 
|---|---|---|
| committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-05-10 13:58:10 -0500 | 
| commit | db25c17036b47cc4ee0bd08b7dc70def25d9a3c9 (patch) | |
| tree | e3cbcf3f34bf1ff043d5947bc0da434da8a4c0ca /doc | |
| parent | 74520f23db51c95b4aea8856fb51c4246785f776 (diff) | |
| parent | e3911a1896d8725f7b739929b7de1ab09917eed5 (diff) | |
| download | gitlab-ce-db25c17036b47cc4ee0bd08b7dc70def25d9a3c9.tar.gz | |
Merge remote-tracking branch 'origin/master' into send-incremental-build-log
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/api/build_triggers.md | 12 | ||||
| -rw-r--r-- | doc/api/issues.md | 15 | ||||
| -rw-r--r-- | doc/api/merge_requests.md | 22 | ||||
| -rw-r--r-- | doc/api/notes.md | 10 | ||||
| -rw-r--r-- | doc/development/instrumentation.md | 129 | ||||
| -rw-r--r-- | doc/workflow/lfs/manage_large_binaries_with_git_lfs.md | 2 | 
6 files changed, 165 insertions, 25 deletions
| diff --git a/doc/api/build_triggers.md b/doc/api/build_triggers.md index 4a12e962b62..0881a7d7a90 100644 --- a/doc/api/build_triggers.md +++ b/doc/api/build_triggers.md @@ -101,8 +101,18 @@ DELETE /projects/:id/triggers/:token  | Attribute | Type    | required | Description              |  |-----------|---------|----------|--------------------------|  | `id`      | integer | yes      | The ID of a project      | -| `token`   | string  | yes      | The `token` of a project | +| `token`   | string  | yes      | The `token` of a trigger |  ```  curl -X DELETE -H "PRIVATE_TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/1/triggers/7b9148c158980bbd9bcea92c17522d"  ``` + +```json +{ +    "created_at": "2015-12-23T16:25:56.760Z", +    "deleted_at": "2015-12-24T12:32:20.100Z", +    "last_used": null, +    "token": "7b9148c158980bbd9bcea92c17522d", +    "updated_at": "2015-12-24T12:32:20.100Z" +} +``` diff --git a/doc/api/issues.md b/doc/api/issues.md index 3e78149f442..fc7a7ae0c0c 100644 --- a/doc/api/issues.md +++ b/doc/api/issues.md @@ -77,7 +77,8 @@ Example response:        "created_at" : "2016-01-04T15:31:51.081Z",        "iid" : 6,        "labels" : [], -      "subscribed" : false +      "subscribed" : false, +      "user_notes_count": 1     }  ]  ``` @@ -154,7 +155,8 @@ Example response:        "title" : "Ut commodi ullam eos dolores perferendis nihil sunt.",        "updated_at" : "2016-01-04T15:31:46.176Z",        "created_at" : "2016-01-04T15:31:46.176Z", -      "subscribed" : false +      "subscribed" : false, +      "user_notes_count": 1     }  ]  ``` @@ -216,7 +218,8 @@ Example response:     "title" : "Ut commodi ullam eos dolores perferendis nihil sunt.",     "updated_at" : "2016-01-04T15:31:46.176Z",     "created_at" : "2016-01-04T15:31:46.176Z", -   "subscribed": false +   "subscribed": false, +   "user_notes_count": 1  }  ``` @@ -271,7 +274,8 @@ Example response:     "description" : null,     "updated_at" : "2016-01-07T12:44:33.959Z",     "milestone" : null, -   "subscribed" : true +   "subscribed" : true, +   "user_notes_count": 0  }  ``` @@ -329,7 +333,8 @@ Example response:     "id" : 85,     "assignee" : null,     "milestone" : null, -   "subscribed" : true +   "subscribed" : true, +   "user_notes_count": 0  }  ``` diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index 2057f9d77aa..8217e30fe25 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -67,7 +67,8 @@ Parameters:      },      "merge_when_build_succeeds": true,      "merge_status": "can_be_merged", -    "subscribed" : false +    "subscribed" : false, +    "user_notes_count": 1    }  ]  ``` @@ -130,7 +131,8 @@ Parameters:    },    "merge_when_build_succeeds": true,    "merge_status": "can_be_merged", -  "subscribed" : true +  "subscribed" : true, +  "user_notes_count": 1  }  ``` @@ -230,6 +232,7 @@ Parameters:    "merge_when_build_succeeds": true,    "merge_status": "can_be_merged",    "subscribed" : true, +  "user_notes_count": 1,    "changes": [      {      "old_path": "VERSION", @@ -308,7 +311,8 @@ Parameters:    },    "merge_when_build_succeeds": true,    "merge_status": "can_be_merged", -  "subscribed" : true +  "subscribed" : true, +  "user_notes_count": 0  }  ``` @@ -378,7 +382,8 @@ Parameters:    },    "merge_when_build_succeeds": true,    "merge_status": "can_be_merged", -  "subscribed" : true +  "subscribed" : true, +  "user_notes_count": 1  }  ``` @@ -472,7 +477,8 @@ Parameters:    },    "merge_when_build_succeeds": true,    "merge_status": "can_be_merged", -  "subscribed" : true +  "subscribed" : true, +  "user_notes_count": 1  }  ``` @@ -537,7 +543,8 @@ Parameters:    },    "merge_when_build_succeeds": true,    "merge_status": "can_be_merged", -  "subscribed" : true +  "subscribed" : true, +  "user_notes_count": 1  }  ``` @@ -602,7 +609,8 @@ Example response:        "title" : "Consequatur vero maxime deserunt laboriosam est voluptas dolorem.",        "created_at" : "2016-01-04T15:31:51.081Z",        "iid" : 6, -      "labels" : [] +      "labels" : [], +      "user_notes_count": 1     },  ]  ``` diff --git a/doc/api/notes.md b/doc/api/notes.md index a6b5b1787fd..7aa1c2155bf 100644 --- a/doc/api/notes.md +++ b/doc/api/notes.md @@ -15,7 +15,7 @@ GET /projects/:id/issues/:issue_id/notes  Parameters:  - `id` (required) - The ID of a project -- `issue_id` (required) - The IID of an issue (not ID) +- `issue_id` (required) - The ID of an issue  ```json  [ @@ -73,7 +73,7 @@ GET /projects/:id/issues/:issue_id/notes/:note_id  Parameters:  - `id` (required) - The ID of a project -- `issue_id` (required) - The IID of a project issue (not ID) +- `issue_id` (required) - The ID of a project issue  - `note_id` (required) - The ID of an issue note  ### Create new issue note @@ -87,7 +87,7 @@ POST /projects/:id/issues/:issue_id/notes  Parameters:  - `id` (required) - The ID of a project -- `issue_id` (required) - The IID of an issue (not ID) +- `issue_id` (required) - The ID of an issue  - `body` (required) - The content of a note  - `created_at` (optional) - Date time string, ISO 8601 formatted, e.g. 2016-03-11T03:45:40Z @@ -102,7 +102,7 @@ PUT /projects/:id/issues/:issue_id/notes/:note_id  Parameters:  - `id` (required) - The ID of a project -- `issue_id` (required) - The IID of an issue (not ID) +- `issue_id` (required) - The ID of an issue  - `note_id` (required) - The ID of a note  - `body` (required) - The content of a note @@ -120,7 +120,7 @@ Parameters:  | Attribute | Type | Required | Description |  | --------- | ---- | -------- | ----------- |  | `id` | integer | yes | The ID of a project | -| `issue_id` | integer | yes | The IID of an issue | +| `issue_id` | integer | yes | The ID of an issue |  | `note_id` | integer | yes | The ID of a note |  ```bash diff --git a/doc/development/instrumentation.md b/doc/development/instrumentation.md index c1cf2e77c26..9168c70945a 100644 --- a/doc/development/instrumentation.md +++ b/doc/development/instrumentation.md @@ -1,12 +1,125 @@  # Instrumenting Ruby Code -GitLab Performance Monitoring allows instrumenting of custom blocks of Ruby -code. This can be used to measure the time spent in a specific part of a larger -chunk of code. The resulting data is stored as a field in the transaction that -executed the block. +GitLab Performance Monitoring allows instrumenting of both methods and custom +blocks of Ruby code. Method instrumentation is the primary form of +instrumentation with block-based instrumentation only being used when we want to +drill down to specific regions of code within a method. -To start measuring a block of Ruby code you should use `Gitlab::Metrics.measure` -and give it a name: +## Instrumenting Methods + +Instrumenting methods is done by using the `Gitlab::Metrics::Instrumentation` +module. This module offers a few different methods that can be used to +instrument code: + +* `instrument_method`: instruments a single class method. +* `instrument_instance_method`: instruments a single instance method. +* `instrument_class_hierarchy`: given a Class this method will recursively +  instrument all sub-classes (both class and instance methods). +* `instrument_methods`: instruments all public class methods of a Module. +* `instrument_instance_methods`: instruments all public instance methods of a +  Module. + +To remove the need for typing the full `Gitlab::Metrics::Instrumentation` +namespace you can use the `configure` class method. This method simply yields +the supplied block while passing `Gitlab::Metrics::Instrumentation` as its +argument. An example: + +``` +Gitlab::Metrics::Instrumentation.configure do |conf| +  conf.instrument_method(Foo, :bar) +  conf.instrument_method(Foo, :baz) +end +``` + +Using this method is in general preferred over directly calling the various +instrumentation methods. + +Method instrumentation should be added in the initializer +`config/initializers/metrics.rb`. + +### Examples + +Instrumenting a single method: + +``` +Gitlab::Metrics::Instrumentation.configure do |conf| +  conf.instrument_method(User, :find_by) +end +``` + +Instrumenting an entire class hierarchy: + +``` +Gitlab::Metrics::Instrumentation.configure do |conf| +  conf.instrument_class_hierarchy(ActiveRecord::Base) +end +``` + +Instrumenting all public class methods: + +``` +Gitlab::Metrics::Instrumentation.configure do |conf| +  conf.instrument_methods(User) +end +``` + +### Checking Instrumented Methods + +The easiest way to check if a method has been instrumented is to check its +source location. For example: + +``` +method = Rugged::TagCollection.instance_method(:[]) + +method.source_location +``` + +If the source location points to `lib/gitlab/metrics/instrumentation.rb` you +know the method has been instrumented. + +If you're using Pry you can use the `$` command to display the source code of a +method (along with its source location), this is easier than running the above +Ruby code. In case of the above snippet you'd run the following: + +``` +$ Rugged::TagCollection#[] +``` + +This will print out something along the lines of: + +``` +From: /path/to/your/gitlab/lib/gitlab/metrics/instrumentation.rb @ line 148: +Owner: #<Module:0x0055f0865c6d50> +Visibility: public +Number of lines: 21 + +def #{name}(#{args_signature}) +  trans = Gitlab::Metrics::Instrumentation.transaction + +  if trans +    start    = Time.now +    retval   = super +    duration = (Time.now - start) * 1000.0 + +    if duration >= Gitlab::Metrics.method_call_threshold +      trans.increment(:method_duration, duration) + +      trans.add_metric(Gitlab::Metrics::Instrumentation::SERIES, +                       { duration: duration }, +                       method: #{label.inspect}) +    end + +    retval +  else +    super +  end +end +``` + +## Instrumenting Ruby Blocks + +Measuring blocks of Ruby code is done by calling `Gitlab::Metrics.measure` and +passing it a block. For example:  ```ruby  Gitlab::Metrics.measure(:foo) do @@ -14,6 +127,10 @@ Gitlab::Metrics.measure(:foo) do  end  ``` +The block is executed and the execution time is stored as a set of fields in the +currently running transaction. If no transaction is present the block is yielded +without measuring anything. +  3 values are measured for a block:  1. The real time elapsed, stored in NAME_real_time. diff --git a/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md b/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md index 31620044b15..83db44c10b1 100644 --- a/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md +++ b/doc/workflow/lfs/manage_large_binaries_with_git_lfs.md @@ -152,4 +152,4 @@ If you are using OS X you can use `osxkeychain` to store and encrypt your creden  For Windows, you can use `wincred` or Microsoft's [Git Credential Manager for Windows](https://github.com/Microsoft/Git-Credential-Manager-for-Windows/releases).  More details about various methods of storing the user credentials can be found -on [Git Credential Storage documentation](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage).
\ No newline at end of file +on [Git Credential Storage documentation](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage). | 
