diff --git a/bin/macos_battery_exporter b/bin/macos_battery_exporter new file mode 100755 index 0000000..6e8610d --- /dev/null +++ b/bin/macos_battery_exporter @@ -0,0 +1,81 @@ +#! /usr/bin/env ruby +# frozen_string_literal: true + +require 'json' + +class MacOSBatteryExporter + def export + puts metrics + end + + def metrics + <<~METRICS + # HELP node_battery_charge_percent Battery charge percent + # TYPE node_battery_charge_percent gauge + node_battery_charge_percent{serial="#{battery_serial_number}"} #{charge_percentage} + # HELP node_battery_charge_ampere Battery charge ampere + # TYPE node_battery_charge_ampere gauge + node_battery_charge_ampere{serial="#{battery_serial_number}"} #{charge_info['sppower_battery_current_capacity'] / 1000.0} + # HELP node_battery_full_charge_ampere Battery full charge capacity + # TYPE node_battery_full_charge_ampere gauge + node_battery_full_charge_ampere{serial="#{battery_serial_number}"} #{charge_info['sppower_battery_max_capacity'] / 1000.0} + # HELP node_battery_current_flow_ampere Current flow of ampere in (+) or out (-) of battery + # TYPE node_battery_current_flow_ampere gauge + node_battery_current_flow_ampere{serial="#{battery_serial_number}"} #{battery_info['sppower_current_amperage'] / 1000.0} + # HELP node_battery_charger_connected Is charger connected? + # TYPE node_battery_charger_connected gauge + node_battery_charger_connected{serial="#{battery_serial_number}"} #{ac_charger_info['sppower_battery_charger_connected'] == 'TRUE' ? 1.0 : 0.0} + # HELP node_battery_is_charging Is charger connected? + # TYPE node_battery_is_charging gauge + node_battery_is_charging{serial="#{battery_serial_number}"} #{ac_charger_info['sppower_battery_is_charging'] == 'TRUE' ? 1.0 : 0.0} + # HELP node_battery_charger_watts Watts provided by charger + # TYPE node_battery_charger_watts gauge + node_battery_charger_watts{serial="#{battery_serial_number}"} #{ac_charger_info['sppower_ac_charger_watts'].to_f} + # HELP node_battery_fully_charged Is battery fully charged? + # TYPE node_battery_fully_charged gauge + node_battery_fully_charged{serial="#{battery_serial_number}"} #{ac_charger_info['sppower_battery_fully_charged'] == 'TRUE' ? 1.0 : 0.0} + # HELP node_battery_cycle_count Battery cycle count + # TYPE node_battery_cycle_count counter + node_battery_cycle_count{serial="#{battery_serial_number}"} #{health_info['sppower_battery_cycle_count']} + METRICS + end + + def charge_percentage + @charge_percentage ||= + `pmset -g batt | grep -Eo '\\d+%' | cut -d% -f1`.strip + end + + def battery_serial_number + battery_info.dig( + 'sppower_battery_model_info', + 'sppower_battery_serial_number' + ) + end + + def charge_info + @charge_info ||= battery_info['sppower_battery_charge_info'] + end + + def health_info + @health_info ||= battery_info['sppower_battery_health_info'] + end + + def battery_info + @battery_info ||= power_data&.find do |v| + v['_name'] == 'spbattery_information' + end + end + + def ac_charger_info + @ac_charger_info ||= power_data&.find do |v| + v['_name'] == 'sppower_ac_charger_information' + end + end + + def power_data + @power_data ||= JSON.parse(`system_profiler SPPowerDataType -json`) + &.[]('SPPowerDataType') + end +end + +MacOSBatteryExporter.new.export if __FILE__ == $PROGRAM_NAME diff --git a/launch_agents/me.jimeh.macos-battery-exporter.plist b/launch_agents/me.jimeh.macos-battery-exporter.plist new file mode 100644 index 0000000..5cc66d4 --- /dev/null +++ b/launch_agents/me.jimeh.macos-battery-exporter.plist @@ -0,0 +1,25 @@ + + + + + Disabled + + Label + me.jimeh.macos-battery-exporter + ProgramArguments + + sh + -c + $HOME/.dotfiles/bin/macos_battery_exporter > $HOME/.node_metrics/battery.prom + + RunAtLoad + + EnvironmentVariables + + PATH + /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin + + StartInterval + 30 + + diff --git a/zsh/ruby.zsh b/zsh/ruby.zsh index ce225e2..d02df35 100755 --- a/zsh/ruby.zsh +++ b/zsh/ruby.zsh @@ -39,19 +39,15 @@ alias cu="bundle exec cucumber" alias scu="RAILS_ENV=cucumber bundle exec spring cucumber" alias va="vagrant" -alias bc="bundle check" +# Bundler aliases +alias bcn="bundle clean" alias bco="bundle console" - -if [ -n "$BASH_VERSION" ]; then - # Bundler aliases - alias be="bundle exec" - alias bl="bundle list" - alias bp="bundle package" - alias bo="bundle open" - alias bu="bundle update" - alias bi="bundle_install" - alias bcn="bundle clean" -fi +alias be="bundle exec" +alias bi="bundle_install" +alias bl="bundle list" +alias bo="bundle open" +alias bp="bundle package" +alias bu="bundle update" # lazy-load rbenv if [ -d "$HOME/.rbenv/shims" ]; then