PDA

Επιστροφή στο Forum : Linux script για πληροφορίες των Folding clients σε κονσόλα!



mrsaccess
27-05-05, 06:04
Γεια χαρά σε όλους!

Νωρίτερα σήμερα έγραψα ένα απλό script για να μπορεί να βλέπει όποιος χρησιμοποιεί linux και τρέχει τον F@H client στο background το ποσοστό της τρέχουσας WU.
Το πόσταρα στο thread (http://www.adslgr.com/forum/showthread.php?t=17510) του TheCondor

Ωστόσο το εξέλιξα αρκετά, πρόσθεσα και άλλες πληροφορίες όπως πότε ξεκίνησε η συγκεκριμένη WU και πότε λήγει (και δεν παίρνετε πόντους T_T) και νομίζω ότι είναι έτοιμο για γενική χρήση!!!
Δείτε το και πείτε μου τη γνώμη σας.
Το έχω σαν attachment αλλά και σαν κώδικα για όσους δεν εμπιστεύονται τα attachments!



######
# Script by Marios Andreopoulos
#
# A really basic script for viewing
# "Folding@Home" clients' stats in a
# nice way at a linux terminal :-)
#
# The script is so basic you are
# allowed to do whatever you want
# with it!
# Have fun and be creative!
######


# Usage:
# Just go to the end of the script and use the printFaHclient function to print
# info for as many clients as you want.
#
# i.e. Suppose you have a Folding@Home client installed at /foo/bar and you want to refer to it as "My PC client1"
# Then you add this line at the end of the script:
#
# printFaHclient "My PC client1" /foo/bar
#
# Just do it for as many clients you want

#!/bin/bash

printFaHclient() {
# 1st Client
echo -ne "\033[1m$1:\033[35m "
echo -n `grep -o "Progress.*%" $2/unitinfo.txt | sed -e 's/.*ress: //'`
echo -ne "\033[0m [\033[;36m WU name: "
echo -ne `grep Name $2/unitinfo.txt | sed -e 's/Name: //'`"\033[0m"
echo -ne ", \033[32mstarted at "`grep Download $2/unitinfo.txt | sed -e 's/.*time: //'`
echo -e "\033[0m, \033[31mexpires at "`grep Due $2/unitinfo.txt | sed -e 's/.*time: //'`"\033[0m ]"

}

# Here you add the clients you want to print info for. Some examples follow.
# printFaHclient "ServerPC Client1" /home/user/foldingathome1
# printFaHclient "ServerPC Client2" /home/user/foldingathome2

Πως λειτουργεί:

Θα χρειαστεί να χρησιμοποιήσετε για λίγο τον λογαριασμό του root.
Μπείτε ως root (οι πιο έμπειροι βέβαια μπορούν να το κάνουν μονάχα από την κονσόλα)

Αντιγράψτε το αρχείο μέσα στο συννημένο zip στο φάκελλο /usr/bin του συστήματός σας.
Ενναλακτικά αν δεν θέλετε να χρησιμοποιήσετε το zip δημιουργείστε ένα νέο αρχείο στο /usr/bin με το όνομα "foldstats" χωρίς κατάληξη και κάντε copy-paste τον κώδικα μέσα στο quote.

Ανοίξτε μια κονσόλα και πληκτρολογήστε την εντολή:
chmod 755 /usr/bin/foldstats
ώστε να το κάνετε εκτελέσιμο!

Τέλος ανοίξτε το με έναν editor (το foldstats βρε!) για να δηλώσετε τους clients σας!
Η διαδικασία είναι πολύ απλή!!!
Πηγαίντε κάτω κάτω στο αρχείο και για κάθε client που έχετε γράψτε μια γραμμή όπως αυτή:
printFaHclient "πως θέλετε να λέγεται ο client" /directory/που/είναι/εγκατεστημένος

Αυτό ήταν! Κάντε logout από root! Τώρα αν όλα πήγαν καλά κάθε φορά που σε μια οποιαδήποτε κονσόλα τρέχετε foldstats θα παίρνετε κάτι τέτοιο:

Client1: 97% [ WU name: p885_p53dimer885, started at May 24 01:57:45, expires at July 2 01:57:45 ]
Client2: 85% [ WU name: p1803_Collagen_POG10_ref, started at May 24 12:54:49, expires at June 14 12:54:49 ]


Ελπίζω να φανεί χρήσιμο σε κάποιους!
Προτάσεις, διορθώσεις και σχόλια δεκτά!


Tip. Επειδή έχω δύο pc που τρέχουν F@H clients φρόντισα να κάνω το φάκελο του folding του 2ου pc δικτυακό (προσωπικά χρησιμοποιώ nfs, κάποιοι ίσως θέλετε smb). Έτσι το πρώτο pc τον βλέπει σαν κανονικό φάκελλο και πρόσθεσα στο script και τους clients του δεύτερου pc για να έχω μια πιο σφαιρική πληροφόρηση!

Η πιο πρόσφατη έκδοση του script βρίσκεται στο 5ο post (http://www.adslgr.com/forum/showpost.php?p=507185&postcount=5) !

TheCondor
27-05-05, 07:07
Εξαιρετικο! Το δοκιμασα και δουλευει αψογα! ;) ( τι ωρα και αυτη που ποσταρω.... τα γ@@@@α τα κουνουπια δεν με αφηνανε να κοιμηθω :( )

mich83
27-02-06, 04:12
Ωραίος! Επόμενο project είναι να υπολογίζει πότε περίπου θα τελειώσει το unit όπως η γραφική κονσόλα των win :p

mrsaccess
27-02-06, 05:47
Ωραίος! Επόμενο project είναι να υπολογίζει πότε περίπου θα τελειώσει το unit όπως η γραφική κονσόλα των win :p
Δεν είναι άσχημη ιδέα! Νομίζω μπορώ να το κάνω! Με πρίζωσες τώρα! :lol:

mrsaccess
27-02-06, 07:59
Είναι γεγονός! Το νέο εξελιγμένο script -mfah- με μπλε και πράσινους κόκκους είναι εδώ! :p
Changelog:
-Μίκρυνα λίγο την γραμμή με τις πληροφορίες για να χωράει σε μικρότερα terminal.
-Πλέον το script υπολογίζει το χρόνο που χρειάζεται για να τελειώσει μία πρωτεΐνη!
Το script λαμβάνει υπόψιν του αν η πρωτεΐνη ξεκίνησε το προηγούμενο χρόνο (δεν μασάει ούτε στα δίσεκτα), ενώ σας ενημερώνει αν δεν μπορεί να υπολογίσει σωστά τον χρόνο που απαιτείται για την ολοκλήρωση της πρωτεΐνης επειδή δεν έχει αρκετά δεδομένα.

Screenshot Emulation (τι βλέπω όταν το τρέχω στο pc μου)

mrsaccess@ElectraWS MariosProTools $ ./mfah

ElectraII client1: 33% [ WU name: p2306_BBA5_pfold in water, from Feb 25 23:38, till Apr 19 23:38 ]
Runtime from start : 28h 32m.
Estimated time remaining: 57h 57m

ElectraII client2: 1% [ WU name: p2306_BBA5_pfold in water, from Feb 27 02:47, till Apr 21 02:47 ]
Runtime from start : 1h 24m.
Estimated time remaining: 138h 54m (Warning! Progress is in too early stage for accurate estimation.)

Sempron client: 62% [ WU name: p2306_BBA5_pfold in water, from Feb 26 08:55, till Apr 20 08:55 ]
Runtime from start : 19h 16m.
Estimated time remaining: 11h 48m.
mrsaccess@ElectraWS MariosProTools $

Εγκατάσταση
»Κατεβάζετε το script ή οι πιο άπιστοι κάνετε το κώδικα copy-paste σε ένα νέο αρχείο.

»Το ανοίγετε με τον αγαπημένο σας editor.

»Ορίζετε στην μεταβλητή GMT_diff τη διαφορά ώρας του υπολογιστή σας από την ώρα GMT. Λογικά δεν θα χρειαστεί να το πειράξετε, θα το αφήσετε 2. Αν ωστόσο έχετε ρυθμίσει τον υπολογιστή σας σε ώρα GMT τότε κάνετέ το 0.

»Πηγαίνετε στο τέλος του αρχείου και ρυθμίζεται τους clients σας.
Για κάθε client προσθέτετε μια τέτοια γραμμή:
printFaHclient "πως θέλετε να λέγεται ο client" /directory/που/είναι/εγκατεστημένος

» Ως root αντιγράφετε το αρχείο στο /usr/bin σας, το κάνετε εκτελέσιμο και του δίνετε σωστά permissions:
cp mfah /usr/bin
chown root:root /usr/bin/mfah
chmod 755 /usr/bin/mfah

Για να το τρέξετε πλέον, σε μια οποιαδήποτε κονσόλα δώστε mfah



Ο κώδικας για τους άπιστους:

#########################################
# mfolding@home v2.0 #
# Script by Marios Andreopoulos #
# #
# A really basic script for viewing #
# "Folding@Home" clients' stats in a #
# nice way at a linux terminal :-) #
# #
# The script is so basic you are #
# allowed to do whatever you want #
# with it! #
# Have fun and be creative! #
#########################################


# Usage:
# Just go to the end and use the printFaHclient function to print
# info for as many clients as you want.
#
# i.e. You have a Folding@Home client installed at /foo/bar and you want to refer to it as "My PC client1"
# Then you add this line at the end of the script:
# printFaHclient "My PC client1" /foo/bar
# Just do it for as many clients you want
#
# Oh, one last thing. Remember to change the GMT_diff variable according to your computer's timesettings.

#!/bin/bash



#Please change this according to your PC time difference from the GMT.
#You can use negative numbers, but do not use signs in positive ones.
#For example if you have your machine configured to Greek Local Time then you are 2 hours ahead GMT.
GMT_diff=2




printFaHclient() {
Progress=$(grep -o "Progress.*%" $2/unitinfo.txt | sed -e 's/.*ress: //' | sed -e 's/\%//')

# Print Client Info
echo
echo -ne "\033[1m$1:\033[35m "
echo -n $Progress%
echo -ne "\033[0m [\033[;36m WU name: "
echo -ne `grep Name $2/unitinfo.txt | sed -e 's/Name: //'`"\033[0m"
echo -ne ", \033[32mfrom "$(date -d "$(grep Download $2/unitinfo.txt | sed -e 's/.*time: //')" +%b\ %e\ %H:%M)
echo -e "\033[0m, \033[31mtill "$(date -d "$(grep Due $2/unitinfo.txt | sed -e 's/.*time: //')" +%b\ %e\ %H:%M)"\033[0m ]"

# Estimate hours to completion
if (( $Progress == 0 )); then #Check if we can make estimations.
echo -e "\033[1;36;5mNo enough data to estimate hours to completion.\033[0m"
else
NOW=$(expr $(date +%s) - $(expr $GMT_diff \* 3600))
START=$(date -d "$(grep Download $2/unitinfo.txt | sed -e 's/.*time: //')" +%s)
Running=$(expr $NOW - $START)
if (( Running < 0 )); then #Check if the unit started in the previous year.
if (( $(expr $(expr $(date +%G) - 1) % 4) == 0 )); then #Check if the previous year was leap.
START=$(expr $START - 31622400)
else
START=$(expr $START - 31536000)
fi
Running=$(expr $(expr $NOW - $START))
fi
Remaining=$(expr $(expr $Running \* $(expr 100 - $Progress)) / $Progress)
if (( $Remaining == 0 )); then #Check if we can make estimations.
echo -e "\033[1;36;5mNo enough data to estimate hours to completion.\033[0m"
else
echo -e "\033[1;32mRuntime from start : $(expr $Running / 3600)h $(expr $(expr $Running % 3600) / 60)m"
echo -ne "\033[1;31mEstimated time remaining: $(expr $Remaining / 3600)h $(expr $(expr $Remaining % 3600) / 60)m\033[0m"
if (( $Progress < 10 )); then #Check if accuracy is compromised by short progress.
echo " (Warning! Progress is in too early stage for accurate estimation.)"
fi
echo
fi
fi
}



# Here you add the clients you want to print info for. Some examples follow.
# printFaHclient "ServerPC Client1" /home/user/foldingathome1
# printFaHclient "ServerPC Client2" /home/user/foldingathome2


Διορθώσεις υποδείξεις δεκτές!
Thanx @ mich83 που μου πρότεινε να το κάνω!

:up:

mich83
27-02-06, 13:47
:clap: Είσαι ΑΣΤΕΡΙ :clap:

edit: Δουλεύει άψογα. Μοds ακόμα να το κάνετε sticky;;;

mich83
28-02-06, 15:23
Μάριε το έχεις βάλει να υπολογίζει τον υπολειπόμενο χρόνο βάση του χρόνου που πέρασε από την ώρα που πρωτοξεκίνησε μέχρι τώρα υπολογίζοντας το αν εγώ π.χ. κλείσω το pc μου για 2 μέρες; To λέω γιατί το έκλεισα για το βράδυ (ήθελε 65 ώρες ακόμα) και μόλις το άνοιξα το πρωί έλεγε ότι ήθελε 75 ώρες ακόμα. Και δεν φταίει το ότι δεν είχε προλάβει να "πιάσει το ρυθμό" γιατί τώρα (7 ώρες μετά λειτουργώντας 100%) λέει ότι μένουν 67 ώρες, 2 περισσότερες απ' ότι χθες το βράδυ. Οπότε σκέφτηκα ότι δεν υπολογίζει τον χρόνο που μένει κλειστό η ανενεργό. Τα φώτα σου:hmm:

mrsaccess
28-02-06, 16:11
Ναι ακριβώς, δεν αφαιρεί το χρόνο που έχεις τον υπολογιστή κλειστό.
Δεν ξέρω αν μπορεί να γίνει αυτό χωρίς να τρέχει το πρόγραμμα συνέχεια στο background για να συλλέγει δεδομένα.
Τώρα για να καταλάβεις κοιτάει μόνο την πρόοδο (αρχείο unitinfo.txt μέσα στο φάκελο του client) και πότε ξεκίνησε η work unit.
Οπότε κάνει: ( τωρινή_ώρα - ώρα_που_ξεκίνησε ) &#215; ( 1 - πρόοδος ) &#247; πρόοδος

Θα το κοιτάξω πάντως αλλά όχι τώρα επειδή φεύγω σε λίγο και θα λείψω για καμιά εβδομάδα.
Αν έχεις κάνα άλλο request πες το και όταν θα επιστρέψω θα το κοιτάξω και αυτό! ;)
Ήδη έχω 2-3 πραγματάκια που θα ήθελα να προσθέσω.

Τα λέμε! :D
Μάριος.

ΥΣ. Από ότι ξέρω υπάρχουν προγράμματα για να παρακολουθείς το folding στο linux. Το script το έφτιαξα πιο πολύ γιατί ήθελα κάτι απλό για να παρακολουθώ όλους τους clients μου. Να τρέχω μια εντολή στη κονσόλα και να μου βγάζει την πρόοδο του καθενός.
Οπότε αν θες κάτι πιο advanced (γραφικό περιβάλλον, ενδεχομένως να μπαίνει στο tray σου) ψάξε για κάτι άλλο. ;)

mich83
28-02-06, 16:18
Οπότε αν θες κάτι πιο advanced (γραφικό περιβάλλον, ενδεχομένως να μπαίνει στο tray σου) ψάξε για κάτι άλλο. ;)


Όχι επιμένω στο δικό σου:p Nα το βάλεις και στο portage κ.λ.π :)

katafitos
22-11-06, 22:40
Μαριε :respekt:
Ηθελα να σε ρωτησω για το mfah στην κονσολα το κομματι που λεει πχ "from Νοεμβριο till Δεκεμβριο"
Μολις βαζω το encoding της κονσολας σε iso-8859-7 δεν εμφανιζει τους μηνες σωστα. Μονο με utf-8 αναγνωριζονται. Βεβαια εχει να κανει με τις ρυθμισεις μου. Μπορω να το αλλαξω να εμφανιζονται σωστα με iso-8859-7? :oops:

mrsaccess
22-11-06, 23:08
Από ότι καταλαβαίνω έχεις όλο το σύστημά σου στα Ελληνικά και έτσι η εντολή date δίνει την ώρα & ημερομηνία στα Ελληνικά! Εγώ το έχω στα Αγγλικά. :)


Τη λύση θα στη δώσω στη long version γιατί τη θεωρώ ενδιαφέρουσα! :p

Το character encoding είναι system wide ρύθμιση. Δηλαδή έχεις βάλει το σύστημά σου να λειτουργεί με utf8 (και αυτό είναι το σωστό) και επομένως οι διάφορες εντολές και προγράμματα δίνουν στην έξοδο utf8.

Έχεις λοιπόν δύο επιλογές:
Τρέχεις το mfah (ή οποιαδήποτε εντολή θες να δώσει iso-8859-7 αντί για utf8) ξεκινώντας τη με iso-8859-7 ρύθμιση:

LC_ALL="el_GR" mfah
Αν θες να τρέχει πάντοτε σε iso-8859-7, ανοίγεις το script, πηγαίνεις στις τελευταίες γραμμές και πριν από κάθε printFaHclient βάζεις LC_ALL="el_GR".
.
Μετατρέπεις την utf8 έξοδο σε iso-8859-7 με χρήση του εργαλείου iconv το οποίο υπάρχει στο σύστημά σου από τη glibc:

mfah | iconv -f utf8 -t iso-8859-7
Αν θες να γίνεται πάντοτε αυτόματα, ανοίγεις το script, πηγαίνεις στις τελευταίες γραμμές και μετά από κάθε εντολή printFaHclient βάζεις |iconv -f utf8 -t iso-8859-7 .
Αν θες μπορείς να φτιάξεις δύο versions του script για να έχεις εύκολα διαθέσιμα και τα δύο. Πχ mfahISO και mfahUTF. ;)

katafitos
23-11-06, 00:30
ακομη ενα :respekt:
Μολις καταλαβα οτι την ωρα την ειχα στα ελληνικα. Ετσι την αλλαξα σε αγγλικα και προσθεσα το Νο1 στο script σου και ολα καλα!!!
thank you :D

mrsaccess
23-11-06, 02:12
Αν την έβαλες στα Αγγλικά δεν χρειάζεται να προσθέσεις τίποτα. Το utf8 μεταφράζεται σωστά σε iso-8859-1 (Αγγλικά) χωρίς να έχει ανάγκη από κόλπα. ;)

crazykiller
05-12-06, 00:54
Νομίζω πως έχει ένα λαθάκι στον κώδικα (όχι από το συννημένο)


Μου έβγαζε αυτό:

ServerPC Client1: 0% [ WU name: Amber, started at December 4 21:07:09, expires at January 17 21:07:09 ]

αντι για αυτό
Client1: 0% [ WU name: Amber, started at December 4 21:07:09, expires at January 17 21:07:09 ]

Νομίζω αυτό:
echo -ne "\033[0m [\033[;36m WU name: "

Πρέπει να γίνει έτσι:
echo -ne "\033[0m [\033[36m WU name: "


έφαγα κανά 10λέπτο να το βρω καθότι άσχετος από κώδικες κτλ κτλ... :sorry:

mrsaccess
09-12-06, 22:07
Έχεις δίκιο μου ξέφυγε ένα semicolon παραπάνω. :oneup:
Btw, συγγνώμη για την καθυστερημένη απάντηση.

Πάντως αν θέλεις την τελευταία έκδοση του script κοίταξε το 5ο post (http://www.adslgr.com/forum/showpost.php?p=507185&postcount=5). ;)

@ ADSLgr.com All rights reserved.