     %{@node_name => interfaces}
   end
 
+  def kernel() do
+    result = Porcelain.shell("uname -mrs")
+    k = result.out |> String.strip
+    %{@node_name => k}
+  end
+
+  def users() do
+    result = Porcelain.shell("who")
+    user_list = result.out |> String.split("\n", trim: true) |> Enum.map(&(String.split(&1, " ", trim: true)))
+    %{@node_name => user_list}
+  end
+
+  def uptime() do
+     {:ok, file_pid} = File.open "/proc/uptime", [:read]
+      u = IO.binread(file_pid, :all) |> String.split |> List.first |> String.to_float
+     %{@node_name =>   u}
+  end
+
   def net_stats() do
     {:ok, interface_info} = :inet.getifaddrs()
      {:ok, file_pid} = File.open "/proc/net/dev", [:read]

  @banana_temp "/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input"
  @pi_temp "/sys/class/thermal/thermal_zone0/temp"


  def cpu() do
    cpu_details = :cpu_sup.util([:per_cpu])
    %{@node_name => %{avg1: :cpu_sup.avg1, avg5: :cpu_sup.avg5, avg15: :cpu_sup.avg15, details: cpu_details }}
  end

  def disks() do

     end)
  end

  # little function to pad a MAC address byte
  defp pad_mac(string_digit) when byte_size(string_digit) != 2, do: "0#{string_digit}"
  defp pad_mac(string_digit) when byte_size(string_digit) == 2, do: string_digit
