Skip to content

Commit

Permalink
Add rubygems for profiling and performance analyzing
Browse files Browse the repository at this point in the history
Co-authored-by: Ewoud Kohl van Wijngaarden <[email protected]>
  • Loading branch information
m-bucher and ekohl committed Apr 8, 2024
1 parent 9184906 commit 9a25b4c
Show file tree
Hide file tree
Showing 10 changed files with 287 additions and 15 deletions.
20 changes: 13 additions & 7 deletions comps/comps-foreman-el8.xml
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@
<packagereq type="default">rubygem-mail</packagereq>
<packagereq type="default">rubygem-marcel</packagereq>
<packagereq type="default">rubygem-memoist</packagereq>
<packagereq type="default">rubygem-memory_profiler</packagereq>
<packagereq type="default">rubygem-method_source</packagereq>
<packagereq type="default">rubygem-mime-types</packagereq>
<packagereq type="default">rubygem-mime-types-data</packagereq>
Expand Down Expand Up @@ -253,6 +254,7 @@
<packagereq type="default">rubygem-rack</packagereq>
<packagereq type="default">rubygem-rack-cors</packagereq>
<packagereq type="default">rubygem-rack-jsonp</packagereq>
<packagereq type="default">rubygem-rack-mini-profiler</packagereq>
<packagereq type="default">rubygem-rack-protection</packagereq>
<packagereq type="default">rubygem-rack-test</packagereq>
<packagereq type="default">rubygem-rails</packagereq>
Expand Down Expand Up @@ -297,6 +299,7 @@
<packagereq type="default">rubygem-sprockets-rails</packagereq>
<packagereq type="default">rubygem-sqlite3</packagereq>
<packagereq type="default">rubygem-sshkey</packagereq>
<packagereq type="default">rubygem-stackprof</packagereq>
<packagereq type="default">rubygem-statsd-instrument</packagereq>
<packagereq type="default">rubygem-terser</packagereq>
<packagereq type="default">rubygem-text</packagereq>
Expand Down Expand Up @@ -410,8 +413,8 @@
<packagereq type="default">rubygem-google-apis-pubsub_v1-doc</packagereq>
<packagereq type="default">rubygem-google-apis-sqladmin_v1beta4-doc</packagereq>
<packagereq type="default">rubygem-google-apis-storage_v1-doc</packagereq>
<packagereq type="default">rubygem-googleauth-doc</packagereq>
<packagereq type="default">rubygem-google-cloud-env-doc</packagereq>
<packagereq type="default">rubygem-googleauth-doc</packagereq>
<packagereq type="default">rubygem-graphql-batch-doc</packagereq>
<packagereq type="default">rubygem-graphql-doc</packagereq>
<packagereq type="default">rubygem-gssapi-doc</packagereq>
Expand All @@ -421,8 +424,8 @@
<packagereq type="default">rubygem-highline-doc</packagereq>
<packagereq type="default">rubygem-hocon-doc</packagereq>
<packagereq type="default">rubygem-http-accept-doc</packagereq>
<packagereq type="default">rubygem-httpclient-doc</packagereq>
<packagereq type="default">rubygem-http-cookie-doc</packagereq>
<packagereq type="default">rubygem-httpclient-doc</packagereq>
<packagereq type="default">rubygem-i18n-doc</packagereq>
<packagereq type="default">rubygem-ipaddress-doc</packagereq>
<packagereq type="default">rubygem-journald-logger-doc</packagereq>
Expand All @@ -441,6 +444,7 @@
<packagereq type="default">rubygem-mail-doc</packagereq>
<packagereq type="default">rubygem-marcel-doc</packagereq>
<packagereq type="default">rubygem-memoist-doc</packagereq>
<packagereq type="default">rubygem-memory_profiler-doc</packagereq>
<packagereq type="default">rubygem-method_source-doc</packagereq>
<packagereq type="default">rubygem-mime-types-data-doc</packagereq>
<packagereq type="default">rubygem-mime-types-doc</packagereq>
Expand All @@ -449,12 +453,12 @@
<packagereq type="default">rubygem-multi_json-doc</packagereq>
<packagereq type="default">rubygem-multipart-post-doc</packagereq>
<packagereq type="default">rubygem-mustermann-doc</packagereq>
<packagereq type="default">rubygem-net_http_unix-doc</packagereq>
<packagereq type="default">rubygem-net-ldap-doc</packagereq>
<packagereq type="default">rubygem-net-ping-doc</packagereq>
<packagereq type="default">rubygem-netrc-doc</packagereq>
<packagereq type="default">rubygem-net-scp-doc</packagereq>
<packagereq type="default">rubygem-net-ssh-doc</packagereq>
<packagereq type="default">rubygem-net_http_unix-doc</packagereq>
<packagereq type="default">rubygem-netrc-doc</packagereq>
<packagereq type="default">rubygem-nio4r-doc</packagereq>
<packagereq type="default">rubygem-nokogiri-doc</packagereq>
<packagereq type="default">rubygem-oauth-doc</packagereq>
Expand All @@ -477,6 +481,7 @@
<packagereq type="default">rubygem-rack-cors-doc</packagereq>
<packagereq type="default">rubygem-rack-doc</packagereq>
<packagereq type="default">rubygem-rack-jsonp-doc</packagereq>
<packagereq type="default">rubygem-rack-mini-profiler-doc</packagereq>
<packagereq type="default">rubygem-rack-protection-doc</packagereq>
<packagereq type="default">rubygem-rack-test-doc</packagereq>
<packagereq type="default">rubygem-rails-doc</packagereq>
Expand All @@ -498,15 +503,15 @@
<packagereq type="default">rubygem-roadie-doc</packagereq>
<packagereq type="default">rubygem-roadie-rails-doc</packagereq>
<packagereq type="default">rubygem-rsec-doc</packagereq>
<packagereq type="default">rubygem-ruby-libvirt-doc</packagereq>
<packagereq type="default">rubygem-ruby2_keywords-doc</packagereq>
<packagereq type="default">rubygem-ruby2ruby-doc</packagereq>
<packagereq type="default">rubygem-rubyipmi-doc</packagereq>
<packagereq type="default">rubygem-ruby-libvirt-doc</packagereq>
<packagereq type="default">rubygem-ruby_parser-doc</packagereq>
<packagereq type="default">rubygem-rubyipmi-doc</packagereq>
<packagereq type="default">rubygem-safemode-doc</packagereq>
<packagereq type="default">rubygem-sass-rails-doc</packagereq>
<packagereq type="default">rubygem-sassc-doc</packagereq>
<packagereq type="default">rubygem-sassc-rails-doc</packagereq>
<packagereq type="default">rubygem-sass-rails-doc</packagereq>
<packagereq type="default">rubygem-scoped_search-doc</packagereq>
<packagereq type="default">rubygem-sd_notify-doc</packagereq>
<packagereq type="default">rubygem-secure_headers-doc</packagereq>
Expand All @@ -521,6 +526,7 @@
<packagereq type="default">rubygem-sprockets-rails-doc</packagereq>
<packagereq type="default">rubygem-sqlite3-doc</packagereq>
<packagereq type="default">rubygem-sshkey-doc</packagereq>
<packagereq type="default">rubygem-stackprof-doc</packagereq>
<packagereq type="default">rubygem-statsd-instrument-doc</packagereq>
<packagereq type="default">rubygem-terser-doc</packagereq>
<packagereq type="default">rubygem-text-doc</packagereq>
Expand Down
14 changes: 7 additions & 7 deletions comps/comps-foreman-plugins-el8.xml
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@
<packagereq type="default">rubygem-ffi-compiler-doc</packagereq>
<packagereq type="default">rubygem-fog-kubevirt-doc</packagereq>
<packagereq type="default">rubygem-fog-proxmox-doc</packagereq>
<packagereq type="default">rubygem-foreman-tasks-doc</packagereq>
<packagereq type="default">rubygem-foreman_acd-doc</packagereq>
<packagereq type="default">rubygem-foreman_ansible-doc</packagereq>
<packagereq type="default">rubygem-foreman_azure_rm-doc</packagereq>
Expand Down Expand Up @@ -270,7 +271,6 @@
<packagereq type="default">rubygem-foreman_snapshot_management-doc</packagereq>
<packagereq type="default">rubygem-foreman_statistics-doc</packagereq>
<packagereq type="default">rubygem-foreman_supervisory_authority-doc</packagereq>
<packagereq type="default">rubygem-foreman-tasks-doc</packagereq>
<packagereq type="default">rubygem-foreman_templates-doc</packagereq>
<packagereq type="default">rubygem-foreman_vault-doc</packagereq>
<packagereq type="default">rubygem-foreman_vmwareannotations-doc</packagereq>
Expand All @@ -279,14 +279,14 @@
<packagereq type="default">rubygem-fugit-doc</packagereq>
<packagereq type="default">rubygem-gapic-common-doc</packagereq>
<packagereq type="default">rubygem-git-doc</packagereq>
<packagereq type="default">rubygem-googleapis-common-protos-doc</packagereq>
<packagereq type="default">rubygem-googleapis-common-protos-types-doc</packagereq>
<packagereq type="default">rubygem-google-cloud-common-doc</packagereq>
<packagereq type="default">rubygem-google-cloud-compute-doc</packagereq>
<packagereq type="default">rubygem-google-cloud-compute-v1-doc</packagereq>
<packagereq type="default">rubygem-google-cloud-core-doc</packagereq>
<packagereq type="default">rubygem-google-cloud-errors-doc</packagereq>
<packagereq type="default">rubygem-google-protobuf-doc</packagereq>
<packagereq type="default">rubygem-googleapis-common-protos-doc</packagereq>
<packagereq type="default">rubygem-googleapis-common-protos-types-doc</packagereq>
<packagereq type="default">rubygem-graphite-api-doc</packagereq>
<packagereq type="default">rubygem-grpc-doc</packagereq>
<packagereq type="default">rubygem-hammer_cli_foreman_admin-doc</packagereq>
Expand All @@ -305,10 +305,10 @@
<packagereq type="default">rubygem-hammer_cli_foreman_tasks-doc</packagereq>
<packagereq type="default">rubygem-hammer_cli_foreman_templates-doc</packagereq>
<packagereq type="default">rubygem-hammer_cli_foreman_webhooks-doc</packagereq>
<packagereq type="default">rubygem-httparty-doc</packagereq>
<packagereq type="default">rubygem-http-doc</packagereq>
<packagereq type="default">rubygem-http-form_data-doc</packagereq>
<packagereq type="default">rubygem-http_parser.rb-doc</packagereq>
<packagereq type="default">rubygem-httparty-doc</packagereq>
<packagereq type="default">rubygem-infoblox-doc</packagereq>
<packagereq type="default">rubygem-interactor-doc</packagereq>
<packagereq type="default">rubygem-jgrep-doc</packagereq>
Expand All @@ -317,12 +317,12 @@
<packagereq type="default">rubygem-kubeclient-doc</packagereq>
<packagereq type="default">rubygem-logify-doc</packagereq>
<packagereq type="default">rubygem-mqtt-doc</packagereq>
<packagereq type="default">rubygem-ms_rest_azure-doc</packagereq>
<packagereq type="default">rubygem-ms_rest-doc</packagereq>
<packagereq type="default">rubygem-ms_rest_azure-doc</packagereq>
<packagereq type="default">rubygem-multi_xml-doc</packagereq>
<packagereq type="default">rubygem-netbox-client-ruby-doc</packagereq>
<packagereq type="default">rubygem-net-ssh-gateway-doc</packagereq>
<packagereq type="default">rubygem-net-ssh-multi-doc</packagereq>
<packagereq type="default">rubygem-netbox-client-ruby-doc</packagereq>
<packagereq type="default">rubygem-newt-doc</packagereq>
<packagereq type="default">rubygem-openscap-doc</packagereq>
<packagereq type="default">rubygem-openscap_parser-doc</packagereq>
Expand All @@ -343,6 +343,7 @@
<packagereq type="default">rubygem-ruby-hmac-doc</packagereq>
<packagereq type="default">rubygem-ruby-nmap-doc</packagereq>
<packagereq type="default">rubygem-sentry-raven-doc</packagereq>
<packagereq type="default">rubygem-smart-proxy-probing-doc</packagereq>
<packagereq type="default">rubygem-smart_proxy_acd-doc</packagereq>
<packagereq type="default">rubygem-smart_proxy_ansible-doc</packagereq>
<packagereq type="default">rubygem-smart_proxy_container_gateway-doc</packagereq>
Expand All @@ -362,7 +363,6 @@
<packagereq type="default">rubygem-smart_proxy_monitoring-doc</packagereq>
<packagereq type="default">rubygem-smart_proxy_omaha-doc</packagereq>
<packagereq type="default">rubygem-smart_proxy_openscap-doc</packagereq>
<packagereq type="default">rubygem-smart-proxy-probing-doc</packagereq>
<packagereq type="default">rubygem-smart_proxy_pulp-doc</packagereq>
<packagereq type="default">rubygem-smart_proxy_realm_ad_plugin-doc</packagereq>
<packagereq type="default">rubygem-smart_proxy_remote_execution_ssh-doc</packagereq>
Expand Down
3 changes: 3 additions & 0 deletions package_manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,7 @@ ruby_core_packages_tier1:
rubygem-mail: {}
rubygem-marcel: {}
rubygem-memoist: {}
rubygem-memory_profiler: {}
rubygem-method_source: {}
rubygem-mime-types: {}
rubygem-mime-types-data: {}
Expand Down Expand Up @@ -439,6 +440,7 @@ ruby_core_packages_tier1:
rubygem-rack: {}
rubygem-rack-cors: {}
rubygem-rack-jsonp: {}
rubygem-rack-mini-profiler: {}
rubygem-rack-protection: {}
rubygem-rack-test: {}
rubygem-rails-dom-testing: {}
Expand Down Expand Up @@ -473,6 +475,7 @@ ruby_core_packages_tier1:
rubygem-sprockets: {}
rubygem-sprockets-rails: {}
rubygem-sshkey: {}
rubygem-stackprof: {}
rubygem-statsd-instrument: {}
rubygem-sqlite3: {}
rubygem-terser: {}
Expand Down
24 changes: 23 additions & 1 deletion packages/foreman/foreman/foreman.spec
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
%global dynflow_sidekiq_service_name dynflow-sidekiq@
%global rake /usr/bin/rake

%global release 3
%global release 4
%global prereleasesource develop
%global prerelease %{?prereleasesource}

Expand Down Expand Up @@ -528,6 +528,22 @@ Configuration files for the Performance Co-Pilot integration
%{_sysconfdir}/pcp/proc/%{name}-hotproc.conf
%{_sharedstatedir}/pcp/config/pmlogconf/%{name}-hotproc

%package profiling
Summary: Adds rails-profiling extensions to foreman
# start specfile profiling Requires
Requires: rubygem(rack-mini-profiler)
Requires: rubygem(memory_profiler)
Requires: rubygem(stackprof)
# end specfile profiling Requires

%description profiling
This automatically installs and enables profiling extensions to foreman.
It is probably not what you want on a productive system.

%files profiling
%{_datadir}/%{name}/bundler.d/profiling.rb
%{_datadir}/%{name}/config/initializers/rack_mini_profiler.rb

%description
Foreman is aimed to be a Single Address For All Machines Life Cycle Management.
Foreman is based on Ruby on Rails, and this package bundles Rails and all
Expand Down Expand Up @@ -562,6 +578,9 @@ webpack --bail --config config/webpack.config.js
%{rake} assets:precompile RAILS_ENV=production DATABASE_URL=nulldb://nohost --trace
rm db/schema.rb

# enable profiling if the bundler.d file is present
sed -i 's/,\s*optional:\s*true//' bundler.d/profiling.rb

%install
rm -rf %{buildroot}

Expand Down Expand Up @@ -863,6 +882,9 @@ exit 0
%systemd_postun %{name}.socket

%changelog
* Mon Apr 08 2024 Markus Bucher <[email protected]> - 3.10.0-0.4.develop
- Add profiling subpackage

* Wed Jan 03 2024 Evgeni Golov - 3.10.0-0.3.develop
- Drop requirement on foreman-debug

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# template: default
%global gem_name memory_profiler

Name: rubygem-%{gem_name}
Version: 1.0.1
Release: 1%{?dist}
Summary: Memory profiling routines for Ruby 2.5+
License: MIT
URL: https://github.com/SamSaffron/memory_profiler
Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem

# start specfile generated dependencies
Requires: ruby >= 2.5.0
BuildRequires: ruby >= 2.5.0
BuildRequires: rubygems-devel
BuildArch: noarch
# end specfile generated dependencies

%description
Memory profiling routines for Ruby 2.5+.


%package doc
Summary: Documentation for %{name}
Requires: %{name} = %{version}-%{release}
BuildArch: noarch

%description doc
Documentation for %{name}.

%prep
%setup -q -n %{gem_name}-%{version}

%build
# Create the gem as gem install only works on a gem file
gem build ../%{gem_name}-%{version}.gemspec

# %%gem_install compiles any C extensions and installs the gem into ./%%gem_dir
# by default, so that we can move it into the buildroot in %%install
%gem_install

%install
mkdir -p %{buildroot}%{gem_dir}
cp -a .%{gem_dir}/* \
%{buildroot}%{gem_dir}/

mkdir -p %{buildroot}%{_bindir}
cp -a .%{_bindir}/* \
%{buildroot}%{_bindir}/

find %{buildroot}%{gem_instdir}/bin -type f | xargs chmod a+x

%files
%dir %{gem_instdir}
%{_bindir}/ruby-memory-profiler
%license %{gem_instdir}/LICENSE.txt
%{gem_instdir}/bin
%{gem_libdir}
%exclude %{gem_cache}
%{gem_spec}

%files doc
%doc %{gem_docdir}
%doc %{gem_instdir}/CHANGELOG.md
%doc %{gem_instdir}/README.md

%changelog
* Mon Nov 06 2023 Markus Bucher <[email protected]> 1.0.1-1
- Add rubygem-memory_profiler generated by gem2rpm using the default template

Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# template: default
%global gem_name rack-mini-profiler

Name: rubygem-%{gem_name}
Version: 3.1.1
Release: 1%{?dist}
Summary: Profiles loading speed for rack applications
License: MIT
URL: https://miniprofiler.com
Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem

# start specfile generated dependencies
Requires: ruby >= 2.6.0
BuildRequires: ruby >= 2.6.0
BuildRequires: rubygems-devel
BuildArch: noarch
# end specfile generated dependencies

%description
Profiling toolkit for Rack applications with Rails integration. Client Side
profiling, DB profiling and Server profiling.


%package doc
Summary: Documentation for %{name}
Requires: %{name} = %{version}-%{release}
BuildArch: noarch

%description doc
Documentation for %{name}.

%prep
%setup -q -n %{gem_name}-%{version}

%build
# Create the gem as gem install only works on a gem file
gem build ../%{gem_name}-%{version}.gemspec

# %%gem_install compiles any C extensions and installs the gem into ./%%gem_dir
# by default, so that we can move it into the buildroot in %%install
%gem_install

%install
mkdir -p %{buildroot}%{gem_dir}
cp -a .%{gem_dir}/* \
%{buildroot}%{gem_dir}/

%files
%dir %{gem_instdir}
%{gem_libdir}
%exclude %{gem_cache}
%{gem_spec}

%files doc
%doc %{gem_docdir}
%doc %{gem_instdir}/CHANGELOG.md
%doc %{gem_instdir}/README.md
%exclude %{gem_instdir}/rack-mini-profiler.gemspec

%changelog
* Mon Nov 06 2023 Markus Bucher <[email protected]> 3.1.1-1
- Add rubygem-rack-mini-profiler generated by gem2rpm using the default template

Loading

0 comments on commit 9a25b4c

Please sign in to comment.