Changeset 15166

Show
Ignore:
Timestamp:
07/04/08 22:56:19 (5 months ago)
Author:
cho45
Message:

asyncrun backtick

Location:
dotfiles
Files:
1 added
2 modified

Legend:

Unmodified
Added
Removed
  • dotfiles/git/cho45-gitconfig

    r15061 r15166  
    77        di      = diff 
    88        co      = checkout 
    9         ci      = commit -v 
     9        ci      = !sh -c 'git commit -av && [ $(git config --bool svn-remote.svn.autodcommit) = "true" ] && $HOME/.screen/asyncrun.rb git svn dcommit && echo "dcommit done!"' 
     10        cii     = commit -v 
     11        svn-ad  = config svn-remote.svn.autodcommit true 
     12        svn-ado = config svn-remote.svn.autodcommit false 
    1013        br      = branch 
    1114        srd     = svn rebase 
  • dotfiles/screen/cho45/.screen/backtick.rb

    r4521 r15166  
    11#!/usr/bin/ruby 
    22 
     3require "open3" 
     4require "drb/drb" 
     5require "thread" 
     6NAME = "AsyncRunDRb/screen" 
    37 
    4 def network 
    5         s = File.readlines("/proc/net/dev").detect {|i| i[/^\s*eth0/]}.split(/:|\s+/) 
    6         [s[2].to_i, s[10].to_i] 
     8`/bin/ps -x -o pid=pid,command=comand`.split(/\n/).map {|i| i.strip.split(/\s+/) }.each {|pid, command| 
     9        system "kill", pid if command.include?(NAME) 
     10} 
     11$0 = NAME 
     12 
     13$stdout.sync = true 
     14 
     15class AsyncRun 
     16        def initialize 
     17                @queue = Queue.new 
     18                Thread.start do 
     19                        loop do 
     20                                run_queue 
     21                        end 
     22                end 
     23        end 
     24 
     25        def add_queue(env, command) 
     26                @queue << [env, command] 
     27        end 
     28 
     29        def run_queue 
     30                $0 = "#{NAME} waiting..." 
     31                env, command = @queue.pop 
     32                $0 = "#{NAME} #{command}" 
     33                prev_env = ENV.to_hash 
     34                ENV.replace(env) 
     35                ENV["LANG"] = "C" 
     36                Dir.chdir(env["PWD"]) do 
     37                        Open3.popen3(command) do |stdin, stdout, stderr| 
     38                                stdin.close 
     39                                out = Thread.start do 
     40                                        stdout.each do |l| 
     41                                                puts l.gsub(/[^-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]\s]/n, "#") 
     42                                        end 
     43                                end 
     44                                err = Thread.start do 
     45                                        stderr.each do |l| 
     46                                                puts l.gsub(/[^-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]\s]/n, "#") 
     47                                        end 
     48                                end 
     49                                out.join 
     50                                err.join 
     51                        end 
     52                end 
     53        ensure 
     54                ENV.replace(prev_env) 
     55        end 
    756end 
    857 
    9 def cpu_stat 
    10         _, *s = *File.read("/proc/stat").match(/^cpu\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/) 
    11         s.collect {|i| i.to_i} 
    12 end 
     58DRb.start_service("druby://localhost:9999", AsyncRun.new) 
     59puts DRb.uri 
    1360 
    14 stats = [] 
    15 prev_net = network 
    16 prev_cpu = cpu_stat 
     61case RUBY_PLATFORM 
     62when /linux/ 
     63        def network 
     64                s = File.readlines("/proc/net/dev").detect {|i| i[/^\s*eth0/]}.split(/:|\s+/) 
     65                [s[2].to_i, s[10].to_i] 
     66        end 
     67 
     68        def cpu_stat 
     69                _, *s = *File.read("/proc/stat").match(/^cpu\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/) 
     70                s.collect {|i| i.to_i} 
     71        end 
     72 
     73        stats = [] 
     74        prev_net = network 
     75        prev_cpu = cpu_stat 
    1776 
    1877 
    19 loop do 
    20         sleep 1 
     78        loop do 
     79                sleep 1 
    2180 
    22         # network 
    23         now = network 
    24         stats << [now[0] - prev_net[0], now[1] - prev_net[1]] 
    25         stats = stats.last(10) 
     81                # network 
     82                now = network 
     83                stats << [now[0] - prev_net[0], now[1] - prev_net[1]] 
     84                stats = stats.last(10) 
    2685 
    27         down, up = stats.inject {|r,i| [r[0]+i[0], r[1]+i[1]] }.map {|i| 
    28                 i.to_f / stats.size / 1024 
    29         } 
    30         prev_net = now 
     86                down, up = stats.inject {|r,i| [r[0]+i[0], r[1]+i[1]] }.map {|i| 
     87                        i.to_f / stats.size / 1024 
     88                } 
     89                prev_net = now 
    3190 
    32         s = 00 
    33         # cpu 
    34         now = cpu_stat 
    35         t = prev_cpu.zip(now) 
    36         total = t.inject(0) {|r,(pr,nw)| r + pr - nw} 
    37         t.pop 
    38         load  = t.inject(0) {|r,(pr,nw)| r + pr - nw} / total.to_f * 100 
    39         load  = load.abs 
     91                s = 00 
     92                # cpu 
     93                now = cpu_stat 
     94                t = prev_cpu.zip(now) 
     95                total = t.inject(0) {|r,(pr,nw)| r + pr - nw} 
     96                t.pop 
     97                load  = t.inject(0) {|r,(pr,nw)| r + pr - nw} / total.to_f * 100 
     98                load  = load.abs 
    4099 
    41         puts "%.1f%% d:% 5.1fKB/s u:% 5.1fKB/s" % [load, down, up] 
    42         $stdout.flush 
     100                puts "%.1f%% d:% 5.1fKB/s u:% 5.1fKB/s" % [load, down, up] 
    43101 
    44         prev_cpu = now 
     102                prev_cpu = now 
     103        end 
     104when /darwin/ 
     105        loop do 
     106                sleep 1 
     107        end 
    45108end 
    46