Commit 91ed938e authored by GitLab Bot's avatar GitLab Bot

Add latest changes from gitlab-org/gitlab@master

parent bef1bd93
---
title: Separate key and other entities into own class files
merge_request: 24495
author: Rajendra Kadam
type: added
...@@ -82,6 +82,7 @@ preload_app true ...@@ -82,6 +82,7 @@ preload_app true
check_client_connection false check_client_connection false
require_relative "/home/git/gitlab/lib/gitlab/cluster/lifecycle_events" require_relative "/home/git/gitlab/lib/gitlab/cluster/lifecycle_events"
require_relative "/home/git/gitlab/lib/gitlab/log_timestamp_formatter.rb"
before_exec do |server| before_exec do |server|
# Signal application hooks that we're about to restart # Signal application hooks that we're about to restart
...@@ -137,3 +138,7 @@ after_fork do |server, worker| ...@@ -137,3 +138,7 @@ after_fork do |server, worker|
# addr = "127.0.0.1:#{9293 + worker.nr}" # addr = "127.0.0.1:#{9293 + worker.nr}"
# server.listen(addr, :tries => -1, :delay => 5, :tcp_nopush => true) # server.listen(addr, :tries => -1, :delay => 5, :tcp_nopush => true)
end end
# Configure the default logger to use a custom formatter that formats the
# timestamps to be in UTC and in ISO8601.3 format
Configurator::DEFAULTS[:logger].formatter = Gitlab::LogTimestampFormatter.new
...@@ -15,6 +15,7 @@ preload_app true ...@@ -15,6 +15,7 @@ preload_app true
check_client_connection false check_client_connection false
require_relative "/home/git/gitlab/lib/gitlab/cluster/lifecycle_events" require_relative "/home/git/gitlab/lib/gitlab/cluster/lifecycle_events"
require_relative "/home/git/gitlab/lib/gitlab/log_timestamp_formatter.rb"
before_exec do |server| before_exec do |server|
# Signal application hooks that we're about to restart # Signal application hooks that we're about to restart
...@@ -70,3 +71,7 @@ after_fork do |server, worker| ...@@ -70,3 +71,7 @@ after_fork do |server, worker|
# addr = "127.0.0.1:#{9293 + worker.nr}" # addr = "127.0.0.1:#{9293 + worker.nr}"
# server.listen(addr, :tries => -1, :delay => 5, :tcp_nopush => true) # server.listen(addr, :tries => -1, :delay => 5, :tcp_nopush => true)
end end
# Configure the default logger to use a custom formatter that formats the
# timestamps to be in UTC and in ISO8601.3 format
Configurator::DEFAULTS[:logger].formatter = Gitlab::LogTimestampFormatter.new
...@@ -27,7 +27,7 @@ end ...@@ -27,7 +27,7 @@ end
This will end up producing queries such as: This will end up producing queries such as:
``` ```plaintext
User Load (0.7ms) SELECT "users"."id" FROM "users" WHERE ("users"."id" >= 41654) ORDER BY "users"."id" ASC LIMIT 1 OFFSET 1000 User Load (0.7ms) SELECT "users"."id" FROM "users" WHERE ("users"."id" >= 41654) ORDER BY "users"."id" ASC LIMIT 1 OFFSET 1000
(0.7ms) SELECT COUNT(*) FROM "users" WHERE ("users"."id" >= 41654) AND ("users"."id" < 42687) (0.7ms) SELECT COUNT(*) FROM "users" WHERE ("users"."id" >= 41654) AND ("users"."id" < 42687)
``` ```
......
...@@ -16,25 +16,25 @@ There are a few basic commands License Finder provides that you'll need in order ...@@ -16,25 +16,25 @@ There are a few basic commands License Finder provides that you'll need in order
To verify that the checks are passing, and/or to see what dependencies are causing the checks to fail: To verify that the checks are passing, and/or to see what dependencies are causing the checks to fail:
``` ```shell
bundle exec license_finder bundle exec license_finder
``` ```
To whitelist a new license: To whitelist a new license:
``` ```shell
license_finder whitelist add MIT license_finder whitelist add MIT
``` ```
To blacklist a new license: To blacklist a new license:
``` ```shell
license_finder blacklist add GPLv2 license_finder blacklist add GPLv2
``` ```
To tell License Finder about a dependency's license if it isn't auto-detected: To tell License Finder about a dependency's license if it isn't auto-detected:
``` ```shell
license_finder licenses add my_unknown_dependency MIT license_finder licenses add my_unknown_dependency MIT
``` ```
......
...@@ -9,7 +9,7 @@ Currently `Rails.logger` calls all get saved into `production.log`, which contai ...@@ -9,7 +9,7 @@ Currently `Rails.logger` calls all get saved into `production.log`, which contai
a mix of Rails' logs and other calls developers have inserted in the code base. a mix of Rails' logs and other calls developers have inserted in the code base.
For example: For example:
``` ```plaintext
Started GET "/gitlabhq/yaml_db/tree/master" for 168.111.56.1 at 2015-02-12 19:34:53 +0200 Started GET "/gitlabhq/yaml_db/tree/master" for 168.111.56.1 at 2015-02-12 19:34:53 +0200
Processing by Projects::TreeController#show as HTML Processing by Projects::TreeController#show as HTML
Parameters: {"project_id"=>"gitlabhq/yaml_db", "id"=>"master"} Parameters: {"project_id"=>"gitlabhq/yaml_db", "id"=>"master"}
......
...@@ -38,7 +38,7 @@ endpoints like: ...@@ -38,7 +38,7 @@ endpoints like:
Since the packages belong to a project, it's expected to have project-level endpoint (remote) Since the packages belong to a project, it's expected to have project-level endpoint (remote)
for uploading and downloading them. For example: for uploading and downloading them. For example:
``` ```plaintext
GET https://gitlab.com/api/v4/projects/<your_project_id>/packages/npm/ GET https://gitlab.com/api/v4/projects/<your_project_id>/packages/npm/
PUT https://gitlab.com/api/v4/projects/<your_project_id>/packages/npm/ PUT https://gitlab.com/api/v4/projects/<your_project_id>/packages/npm/
``` ```
......
...@@ -28,7 +28,7 @@ By default, QueryRecorder will ignore cached queries in the count. However, it m ...@@ -28,7 +28,7 @@ By default, QueryRecorder will ignore cached queries in the count. However, it m
all queries to avoid introducing an N+1 query that may be masked by the statement cache. To do this, all queries to avoid introducing an N+1 query that may be masked by the statement cache. To do this,
pass the `skip_cached` variable to `QueryRecorder` and use the `exceed_all_query_limit` matcher: pass the `skip_cached` variable to `QueryRecorder` and use the `exceed_all_query_limit` matcher:
``` ```ruby
it "avoids N+1 database queries" do it "avoids N+1 database queries" do
control_count = ActiveRecord::QueryRecorder.new(skip_cached: false) { visit_some_page }.count control_count = ActiveRecord::QueryRecorder.new(skip_cached: false) { visit_some_page }.count
create_list(:issue, 5) create_list(:issue, 5)
...@@ -48,13 +48,13 @@ This could lead to false successes where subsequent "requests" could have querie ...@@ -48,13 +48,13 @@ This could lead to false successes where subsequent "requests" could have querie
It may be useful to identify the source of the queries by looking at the call backtrace. It may be useful to identify the source of the queries by looking at the call backtrace.
To enable this, run the specs with the `QUERY_RECORDER_DEBUG` environment variable set. For example: To enable this, run the specs with the `QUERY_RECORDER_DEBUG` environment variable set. For example:
``` ```shell
QUERY_RECORDER_DEBUG=1 bundle exec rspec spec/requests/api/projects_spec.rb QUERY_RECORDER_DEBUG=1 bundle exec rspec spec/requests/api/projects_spec.rb
``` ```
This will log calls to QueryRecorder into the `test.log`. For example: This will log calls to QueryRecorder into the `test.log`. For example:
``` ```plaintext
QueryRecorder SQL: SELECT COUNT(*) FROM "issues" WHERE "issues"."deleted_at" IS NULL AND "issues"."project_id" = $1 AND ("issues"."state" IN ('opened')) AND "issues"."confidential" = $2 QueryRecorder SQL: SELECT COUNT(*) FROM "issues" WHERE "issues"."deleted_at" IS NULL AND "issues"."project_id" = $1 AND ("issues"."state" IN ('opened')) AND "issues"."confidential" = $2
--> /home/user/gitlab/gdk/gitlab/spec/support/query_recorder.rb:19:in `callback' --> /home/user/gitlab/gdk/gitlab/spec/support/query_recorder.rb:19:in `callback'
--> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/fanout.rb:127:in `finish' --> /home/user/.rbenv/versions/2.3.5/lib/ruby/gems/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications/fanout.rb:127:in `finish'
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
Note that if your db user does not have advanced privileges you must create the db manually before running this command. Note that if your db user does not have advanced privileges you must create the db manually before running this command.
``` ```shell
bundle exec rake setup bundle exec rake setup
``` ```
...@@ -70,7 +70,7 @@ Group are additionally seeded with epics if GitLab instance has epics feature av ...@@ -70,7 +70,7 @@ Group are additionally seeded with epics if GitLab instance has epics feature av
If you're very sure that you want to **wipe the current database** and refill If you're very sure that you want to **wipe the current database** and refill
seeds, you could: seeds, you could:
``` shell ```shell
echo 'yes' | bundle exec rake setup echo 'yes' | bundle exec rake setup
``` ```
...@@ -83,7 +83,7 @@ your terminal, and it would generate more than 20G logs if you just redirect ...@@ -83,7 +83,7 @@ your terminal, and it would generate more than 20G logs if you just redirect
it to a file. If we don't care about the output, we could just redirect it to it to a file. If we don't care about the output, we could just redirect it to
`/dev/null`: `/dev/null`:
``` shell ```shell
echo 'yes' | bundle exec rake setup > /dev/null echo 'yes' | bundle exec rake setup > /dev/null
``` ```
...@@ -138,13 +138,13 @@ you don't need to boot it every time you run a test, rake task or migration. ...@@ -138,13 +138,13 @@ you don't need to boot it every time you run a test, rake task or migration.
If you want to use it, you'll need to export the `ENABLE_SPRING` environment If you want to use it, you'll need to export the `ENABLE_SPRING` environment
variable to `1`: variable to `1`:
``` ```shell
export ENABLE_SPRING=1 export ENABLE_SPRING=1
``` ```
Alternatively you can use the following on each spec run, Alternatively you can use the following on each spec run,
``` ```shell
bundle exec spring rspec some_spec.rb bundle exec spring rspec some_spec.rb
``` ```
...@@ -154,7 +154,7 @@ You shouldn't ever need to compile frontend assets manually in development, but ...@@ -154,7 +154,7 @@ You shouldn't ever need to compile frontend assets manually in development, but
if you ever need to test how the assets get compiled in a production if you ever need to test how the assets get compiled in a production
environment you can do so with the following command: environment you can do so with the following command:
``` ```shell
RAILS_ENV=production NODE_ENV=production bundle exec rake gitlab:assets:compile RAILS_ENV=production NODE_ENV=production bundle exec rake gitlab:assets:compile
``` ```
...@@ -167,7 +167,7 @@ they can be easily inspected. ...@@ -167,7 +167,7 @@ they can be easily inspected.
To update the Emoji aliases file (used for Emoji autocomplete) you must run the To update the Emoji aliases file (used for Emoji autocomplete) you must run the
following: following:
``` ```shell
bundle exec rake gemojione:aliases bundle exec rake gemojione:aliases
``` ```
...@@ -176,7 +176,7 @@ bundle exec rake gemojione:aliases ...@@ -176,7 +176,7 @@ bundle exec rake gemojione:aliases
To update the Emoji digests file (used for Emoji autocomplete) you must run the To update the Emoji digests file (used for Emoji autocomplete) you must run the
following: following:
``` ```shell
bundle exec rake gemojione:digests bundle exec rake gemojione:digests
``` ```
...@@ -187,7 +187,7 @@ available Emoji. ...@@ -187,7 +187,7 @@ available Emoji.
Generating a sprite file containing all the Emoji can be done by running: Generating a sprite file containing all the Emoji can be done by running:
``` ```shell
bundle exec rake gemojione:sprite bundle exec rake gemojione:sprite
``` ```
...@@ -201,7 +201,7 @@ task, then check the dimensions of the new spritesheet and update the ...@@ -201,7 +201,7 @@ task, then check the dimensions of the new spritesheet and update the
Starting a project from a template needs this project to be exported. On a Starting a project from a template needs this project to be exported. On a
up to date master branch run: up to date master branch run:
``` ```shell
gdk start gdk start
bundle exec rake gitlab:update_project_templates bundle exec rake gitlab:update_project_templates
git checkout -b update-project-templates git checkout -b update-project-templates
...@@ -233,7 +233,7 @@ a file for quick reference. ...@@ -233,7 +233,7 @@ a file for quick reference.
To see a list of all obsolete `ignored_columns` run: To see a list of all obsolete `ignored_columns` run:
``` ```shell
bundle exec rake db:obsolete_ignored_columns bundle exec rake db:obsolete_ignored_columns
``` ```
......
...@@ -129,63 +129,6 @@ module API ...@@ -129,63 +129,6 @@ module API
end end
end end
class SSHKey < Grape::Entity
expose :id, :title, :key, :created_at
end
class SSHKeyWithUser < SSHKey
expose :user, using: Entities::UserPublic
end
class DeployKeyWithUser < SSHKeyWithUser
expose :deploy_keys_projects
end
class DeployKeysProject < Grape::Entity
expose :deploy_key, merge: true, using: Entities::SSHKey
expose :can_push
end
class GPGKey < Grape::Entity
expose :id, :key, :created_at
end
class DiffPosition < Grape::Entity
expose :base_sha, :start_sha, :head_sha, :old_path, :new_path,
:position_type
end
class Note < Grape::Entity
# Only Issue and MergeRequest have iid
NOTEABLE_TYPES_WITH_IID = %w(Issue MergeRequest).freeze
expose :id
expose :type
expose :note, as: :body
expose :attachment_identifier, as: :attachment
expose :author, using: Entities::UserBasic
expose :created_at, :updated_at
expose :system?, as: :system
expose :noteable_id, :noteable_type
expose :position, if: ->(note, options) { note.is_a?(DiffNote) } do |note|
note.position.to_h
end
expose :resolvable?, as: :resolvable
expose :resolved?, as: :resolved, if: ->(note, options) { note.resolvable? }
expose :resolved_by, using: Entities::UserBasic, if: ->(note, options) { note.resolvable? }
# Avoid N+1 queries as much as possible
expose(:noteable_iid) { |note| note.noteable.iid if NOTEABLE_TYPES_WITH_IID.include?(note.noteable_type) }
end
class Discussion < Grape::Entity
expose :id
expose :individual_note?, as: :individual_note
expose :notes, using: Entities::Note
end
class Avatar < Grape::Entity class Avatar < Grape::Entity
expose :avatar_url do |avatarable, options| expose :avatar_url do |avatarable, options|
avatarable.avatar_url(only_path: false, size: options[:size]) avatarable.avatar_url(only_path: false, size: options[:size])
...@@ -733,9 +676,9 @@ module API ...@@ -733,9 +676,9 @@ module API
expose :id, :status, :stage, :name, :ref, :tag, :coverage, :allow_failure expose :id, :status, :stage, :name, :ref, :tag, :coverage, :allow_failure
expose :created_at, :started_at, :finished_at expose :created_at, :started_at, :finished_at
expose :duration expose :duration
expose :user, with: User expose :user, with: Entities::User
expose :commit, with: Commit expose :commit, with: Entities::Commit
expose :pipeline, with: PipelineBasic expose :pipeline, with: Entities::PipelineBasic
expose :web_url do |job, _options| expose :web_url do |job, _options|
Gitlab::Routing.url_helpers.project_job_url(job.project, job) Gitlab::Routing.url_helpers.project_job_url(job.project, job)
...@@ -751,7 +694,7 @@ module API ...@@ -751,7 +694,7 @@ module API
end end
class JobBasicWithProject < JobBasic class JobBasicWithProject < JobBasic
expose :project, with: ProjectIdentity expose :project, with: Entities::ProjectIdentity
end end
class Trigger < Grape::Entity class Trigger < Grape::Entity
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
module API module API
module Entities module Entities
class BasicProjectDetails < ProjectIdentity class BasicProjectDetails < Entities::ProjectIdentity
include ::API::ProjectsRelationBuilder include ::API::ProjectsRelationBuilder
expose :default_branch, if: -> (project, options) { Ability.allowed?(options[:current_user], :download_code, project) } expose :default_branch, if: -> (project, options) { Ability.allowed?(options[:current_user], :download_code, project) }
......
# frozen_string_literal: true
module API
module Entities
class DeployKeyWithUser < Entities::SSHKeyWithUser
expose :deploy_keys_projects
end
end
end
# frozen_string_literal: true
module API
module Entities
class DeployKeysProject < Grape::Entity
expose :deploy_key, merge: true, using: Entities::SSHKey
expose :can_push
end
end
end
# frozen_string_literal: true
module API
module Entities
class DiffPosition < Grape::Entity
expose :base_sha, :start_sha, :head_sha, :old_path, :new_path,
:position_type
end
end
end
# frozen_string_literal: true
module API
module Entities
class Discussion < Grape::Entity
expose :id
expose :individual_note?, as: :individual_note
expose :notes, using: Entities::Note
end
end
end
# frozen_string_literal: true
module API
module Entities
class GPGKey < Grape::Entity
expose :id, :key, :created_at
end
end
end
# frozen_string_literal: true
module API
module Entities
class Note < Grape::Entity
# Only Issue and MergeRequest have iid
NOTEABLE_TYPES_WITH_IID = %w(Issue MergeRequest).freeze
expose :id
expose :type
expose :note, as: :body
expose :attachment_identifier, as: :attachment
expose :author, using: Entities::UserBasic
expose :created_at, :updated_at
expose :system?, as: :system
expose :noteable_id, :noteable_type
expose :position, if: ->(note, options) { note.is_a?(DiffNote) } do |note|
note.position.to_h
end
expose :resolvable?, as: :resolvable
expose :resolved?, as: :resolved, if: ->(note, options) { note.resolvable? }
expose :resolved_by, using: Entities::UserBasic, if: ->(note, options) { note.resolvable? }
# Avoid N+1 queries as much as possible
expose(:noteable_iid) { |note| note.noteable.iid if NOTEABLE_TYPES_WITH_IID.include?(note.noteable_type) }
end
end
end
# frozen_string_literal: true
module API
module Entities
class SSHKey < Grape::Entity
expose :id, :title, :key, :created_at
end
end
end
# frozen_string_literal: true
module API
module Entities
class SSHKeyWithUser < Entities::SSHKey
expose :user, using: Entities::UserPublic
end
end
end
# frozen_string_literal: true
module Gitlab
class LogTimestampFormatter < Logger::Formatter
FORMAT = "%s, [%s #%d] %5s -- %s: %s\n"
def call(severity, timestamp, program_name, message)
FORMAT % [severity[0..0], timestamp.utc.iso8601(3), $$, severity, program_name, msg2str(message)]
end
end
end
# frozen_string_literal: true
require 'spec_helper'
describe Gitlab::LogTimestampFormatter do
subject { described_class.new }
let(:formatted_timestamp) { Time.now.utc.iso8601(3) }
it 'logs the timestamp in UTC and ISO8601.3 format' do
Timecop.freeze(Time.now) do
expect(subject.call('', Time.now, '', '')).to include formatted_timestamp
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment