I forget some notes ..
*NOTE: for this System monitor to work,  Requires libstatgrab and pystatgrab
.*


libstatgrab + pystatgrab works under Linux and Cygwin.
for linux under debian based distro. apt-get install libstatgrab to get
statgrab library and get pystatgrab here :

http://www.i-scream.org/pystatgrab/

*
NOTE: layout.html is not used so jquery files and ajax files need to be
included manually.*

For short: Following 2 JQuery Function does the trick:

  $.post(('cpumon'),function(data)
        {
            if (data < 6){
                $("#amount").animate(
                {
                    width: 6 + "%"
                },1000);
                document.getElementById('amount').innerHTML=data + '%';

}

This makes posts in parallel.

<script language="JavaScript1.8">


>     var clockid = 0;
>     function updatecpu()
>     {
>         if(clockid)
>         {
>             clearTimeout(clockid);
>             clockid = 0;
>         }
>         cpueffect();
>         clockid = setTimeout('updatecpu()',2000)

;
>
>     }
> <script language="JavaScript1.8">
>
>     var clockid2 = 0;
>         function updatemem()
>         {
>             if(clockid2)
>             {
>                 clearTimeout(clockid2);
>                 clockid2 = 0;
>             }
>             memeffect();
>             clockid2 = setTimeout('updatemem()',2000)
>>
>> ;
>>
>>         }
>
>
>
>



On Mon, Oct 27, 2008 at 3:13 PM, Phyo Arkar <[EMAIL PROTECTED]>wrote:

> I have not  read everything carefully yet .I am doing a system monitor
> ajax+web2py application , which monitor CPU and MEM at the same time and
> updates the page with jquery ajax effects. its pretty simple.So it is
> multi-threading in a webapp . to get response from multiple httprequest at
> the same time can be done like this.
>
> *NOTE:* for this System monitor to work,  Requires libstatgrab and
> pystatgrab .
>
> libstatgrab + pystatgrab works under Linux and Cygwin.
>
> to
>
> *in controllers , default.py :*
>
> import statgrab
>
> def index():
>     return dict()
>
>
> def cpumon():
>
>     cpustat = statgrab.sg_get_cpu_percents()
>     perc = int(round(100 - cpustat['idle']))
>     return perc
>
> def memon():
>
>     #otno=random.randrange(0,100)
>     memstat = statgrab.sg_get_mem_stats()
>     memdiff = memstat['total'] - (memstat['cache'] + memstat['free'] )
>     memfloat = float (memdiff) / float(memstat['total'])
>     perc = int(round (memfloat * 100))
>     return perc
>
>
> in view . Index.html :
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
>     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd";>
> <html>
> <head>
> <title>Ajax + Web2py monitor</title>
> <link rel="stylesheet" type="text/css" href="css/style.css"/>
> <script type="text/javascript" src="js/jq.js"/>
> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
> <meta name="author" content="Your name here" />
> <meta name="Copyright" content="Copyright (c) Your copyright here 2005" />
>
> <script language="JavaScript1.8">
> // You can put Functions i
> </script>
>
>
>
> <script language="JavaScript1.8">
>
>     var clockid = 0;
>     function updatecpu()
>     {
>         if(clockid)
>         {
>             clearTimeout(clockid);
>             clockid = 0;
>         }
>         cpueffect();
>         clockid = setTimeout('updatecpu()',2000);
>
>     }
>
>     function cpueffect() {
>
>         $.post(('cpumon'),function(data)
>         {
>             if (data < 6){
>                 $("#amount").animate(
>                 {
>                     width: 6 + "%"
>                 },1000);
>                 document.getElementById('amount').innerHTML=data + '%';
>
>             } else {
>                 $("#amount").animate(
>                 {
>                     width: data + "%"
>                 },1000);
>                 document.getElementById('amount').innerHTML=data + '%';
>             }
>
>
>
>         });
>
>     }
>     $(document).ready(updatecpu());
> </script>
>
> <script language="JavaScript1.8">
>
>     var clockid2 = 0;
>         function updatemem()
>         {
>             if(clockid2)
>             {
>                 clearTimeout(clockid2);
>                 clockid2 = 0;
>             }
>             memeffect();
>             clockid2 = setTimeout('updatemem()',2000);
>
>         }
>
>         function memeffect()
>         {
>
>             $.post(('memon'),function(data)
>             {
>                 $("#mem").animate(
>                 {
>                     width: data + "%"
>                 },1000);
>                 document.getElementById('mem').innerHTML=data + '%';
>
>             });
>
>         }
>     $(document).ready(updatemem());
> </script>
>
> </head>
> <body>
>
> <h5><a href="#" onclick=blinds() >JxMon </a></h5>
>
>
>
> <!-- ****************** BEGIN CPU Progress Bars ****************** -->
>
> <h3><a href="#" onclick=blinds() >cpu: </a></h3>
> <div class= "mon_cont" >
>     <div class="cpumon_fill" id='amount'></div>
> </div>
>
> <h3><a href="#" onclick=blinds() >mem: </a></h3>
> <div class= "mon_cont"  >
>     <div class="memmon_fill" id='mem'></div>
> </div>
>
>
> </body>
> </html>
>
> On Mon, Oct 27, 2008 at 9:47 AM, achipa <[EMAIL PROTECTED]> wrote:
>
>>
>> Note that databases generally dislike multithreaded access, my patch
>> won't help you with that. You can shift some the problem to the
>> database if you're using multiple connections, but with SQLite you
>> don't have that option (it's not 'lite' for no reason). The database
>> adapter that boasts to be the best with that regard would be a
>> postgresql + psycopg2 backend, but even that won't save you from logic
>> errors and deadlocks - data consistency is tricky business in
>> multithread land.
>>
>> On Oct 27, 4:50 am, tommy <[EMAIL PROTECTED]> wrote:
>> > Archipa, when you use the different thread to access same SQLITE
>> > database, do you have any problem? It looks like SQLITE database can
>> > be only accessed by one thread. How do you walk around it?
>> >
>> > To all, thanks for your replies, I think my design has some issue.
>> > Massimo's example code and Bill's suggestion made me think I need to
>> > create another process in the background. Tito's suggestion is also
>> > good. but I am so bad at Ajax.
>> >
>> > Tommy
>> >
>> > On Oct 26, 4:31 pm, achipa <[EMAIL PROTECTED]> wrote:
>> >
>> > > Actually, I made a patch that allows execution of code in a parallel
>> > > thread after the page has been served. It can be scheduled (e.g.
>> > > cron), or just launched in a fire and forget fashion without affecting
>> > > the main app and the user (e.g. session cleaning, a long(er)
>> > > conversion task, etc). It runs on all platforms and under both
>> > > mod_wsgi and the stock cherrypy. I sent the patch to Massimo, but I
>> > > have had no response so far, I don't know if he disapproves of the
>> > > patch or simply did not have the time to review it. If there are brave
>> > > souls willing to try it out, I can attach it here, too.
>> >
>> > > On Oct 26, 9:52 pm, billf <[EMAIL PROTECTED]> wrote:
>> >
>> > > > Assuming an event causes the data in the "other" application to
>> change
>> > > > wouldn't it be easier for the "other" application to post the
>> changes
>> > > > to your web2py app when the event occurs?   Having said that, I can
>> > > > envisage a case where there are hundreds or thousands of updates per
>> > > > couple of minutes and you only want a snapsot.
>> >
>> > > > Looking at Massimo's videotest app, that seems to use the approach
>> of
>> > > > starting a process outside of web2py.  If that is the case then that
>> > > > process could execute a method after an interval that either:
>> > > > a) sends your web2py app a request that causes it to retrieve the
>> data
>> > > > from the "other" application and update the web2py app database, or
>> > > > b) the process gets the data and updates the web2py database
>> directly
>> > > > (unknown to your web2py app that just selects and gets the latest)
>> >
>> > > > To stop the external process your web2py app could write to the db
>> or
>> > > > a file that is checked by the external process each time it wakes
>> up.
>> >
>> > > > Admittedly, none of the above explains how to create a background
>> > > > process within web2py - maybe it is just not meant to be done by a
>> > > > mere mortal.
>> >
>> > > > On Oct 26, 8:01 pm, tommy <[EMAIL PROTECTED]> wrote:
>> >
>> > > > > Massimo,
>> >
>> > > > > Here is my code,
>> >
>> > > > > I use GUI button to start my service (StartEngine, in the
>> background,
>> > > > > I want to retrieve the infomation from another application and
>> save it
>> > > > > in my database for every couple of munites.  after I starting my
>> start
>> > > > > engine service, I can go to other screen. and the background
>> service
>> > > > > keeps runing.
>> >
>> > > > > I can create the thread now, but got an error :SQLITE object
>> created
>> > > > > in a thread can only used  in that same thread.
>> >
>> > > > > def enginestart():
>> > > > >     menu_setup()
>> > > > >  #   engine.start()
>> > > > >     session.starttimer=True
>> >
>> > > > >     symbols=db(db.symbols.id>0).select()
>> >
>> > > > >    # for symbol in symbols:
>> > > > >    #     engine.addMarket(symbol.symbol_Name,
>> > > > > symbol.description,symbol.tick)
>> >
>> > > > >     session.flash='engine stared'
>> > > > >     session.enginestarted=True
>> > > > >     db(db.historyprice.id >0).delete()
>> > > > >  #   tt=threading.Timer(2, gethistoryprice(db))
>> > > > >  #   tt.start()
>> > > > >     t=Gethistoryprice()
>> > > > >     t.start()
>> > > > >     redirect(URL(r=request,c='engine',f='enginemaint'))
>> > > > >     return dict()     session.starttimer=True
>> >
>> > > > >     symbols=db(db.symbols.id>0).select()
>> >
>> > > > >    # for symbol in symbols:
>> > > > >    #     engine.addMarket(symbol.symbol_Name,
>> > > > > symbol.description,symbol.tick)
>> >
>> > > > >     session.flash='engine stared'
>> > > > >     session.enginestarted=True
>> > > > >     db(db.historyprice.id >0).delete()
>> > > > >     t=Gethistoryprice(db)
>> > > > >     t.start()
>> > > > >     redirect(URL(r=request,c='engine',f='enginemaint'))
>> > > > >     return dict()
>> >
>> > > > > class  Gethistoryprice(threading.Thread):
>> > > > >   def __init__(self, db):
>> > > > >          threading.Thread.__init__(self)
>> >
>> > > > >          self.stopped=0
>> > > > >          self.db=db
>> >
>> > > > >      def run(self):
>> > > > >        while not self.stopped:
>> > > > >           mysym=self.db(db.symbols.id>0).select()
>> > > > >           for symbol in mysym:
>> > > > >               #  p=engine.getlastprice(symbol)
>> > > > >               p=random.randrange(10.00,60.00)
>> > > > >               now=datetime.datetime.now()
>> > > > >
>> db.historyprice.insert(symbol_Name=symbol.symbol_Name,
>> > > > > timestamp= now, price=p)
>> >
>> > > > >      def stop(self):
>> > > > >          self.stopped=1
>> >
>> > > > > On Oct 26, 2:05 pm, mdipierro <[EMAIL PROTECTED]> wrote:
>> >
>> > > > > > This app does that. You upload a video and it is converted in
>> > > > > > background (like at youtube) in a separate process (not a
>> thread, a
>> > > > > > process although the process my have threads). The visitor can
>> later
>> > > > > > check the conversion was completed. It includes documentation:
>> >
>> > > > > >http://mdp.cti.depaul.edu/appliances/default/show/38
>> >
>> > > > > > Massimo
>> >
>> > > > > > On Oct 26, 2:00 pm, Keith Edmunds <[EMAIL PROTECTED]> wrote:
>> >
>> > > > > > > On Sun, 26 Oct 2008 11:55:08 -0700 (PDT),
>> [EMAIL PROTECTED]
>> > > > > > > said:
>> >
>> > > > > > > > 1) what other background tasks do people envisage?
>> >
>> > > > > > > A regular display update via Ajax (but that could probably be
>> demanded by
>> > > > > > > the client rather than pushed)
>> >
>> > > > > > > > 2) how should you do it in web2py?
>> >
>> > > > > > > Pass.
>> >
>> > > > > > > --
>> > > > > > > Keith Edmunds- Hide quoted text -
>> >
>> > > > > > - Show quoted text -- Hide quoted text -
>> >
>> > > - Show quoted text -
>> >>
>>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to