beautiful printing for curl

 

add  | python -m json.tool

 

to check which meters that ceilometer supported.

 

http://zqfan.github.io/assets/doc/ceilometer-havana-api-v2.html

 

to show whole system disk write byte using a statistics

 

curl -H 'X-Auth-Token: 90872f53cf534bf98292693ffe31c1ac' -H 'Content-Type: application/json' http://localhost:8777/v2/meters/disk.write.bytes/statistics

 

you can change disk.write.bytes to

 

http://www.openstack.cn/p861.html

 

such as cpu_util …..

 

take avg or sum

 

curl -H 'X-Auth-Token: 90872f53cf534bf98292693ffe31c1ac' -H 'Content-Type: application/json' http://localhost:8777/v2/meters/cpu_util/statistics?aggregate.func=avg



get resource information

 

curl -H 'X-Auth-Token: 90872f53cf534bf98292693ffe31c1ac' -H 'Content-Type: application/json' http://localhost:8777/v2/resources/f8a524a1-11c2-4620-bffa-bcc8f5014793

 

will show tenant_id ……

 

get project cpu_util information

 

curl -H 'X-Auth-Token: 90872f53cf534bf98292693ffe31c1ac' -H 'Content-Type: application/json'  "http://localhost:8777/v2/meters/cpu_util/statistics?q.field=timestamp&q.op=ge&q.value=2014-08-20T13:34:17&q.field=project_id&q.op=eq&q.value=9aff044df2d44839bd36ee98e08ffa88"

 

query for a instance

 

curl -H 'X-Auth-Token: 90872f53cf534bf98292693ffe31c1ac' -H 'Content-Type: application/json'  "http://localhost:8777/v2/meters/cpu_util/statistics?q.field=timestamp&q.op=ge&q.value=2014-08-20T13:34:17&q.field=resource_id&q.op=eq&q.value=664615f2-c9b2-4c5b-b3df-68e9f5616a1b"



An example for query filter need “   ”

 

curl -X GET -H 'X-Auth-Token: 90872f53cf534bf98292693ffe31c1ac' "http://localhost:8777/v2/meters/instance?q.field=metadata.event_type&q.value=compute.instance.exists"

 

curl -H 'X-Auth-Token: 90872f53cf534bf98292693ffe31c1ac' -H 'Content-Type: application/json'  "http://localhost:8777/v2/meters/cpu_util/statistics?q.field=timestamp&q.op=ge&q.value=2014-08-20T13:34:17"

 

for multiple query:

 

curl -H 'X-Auth-Token: 90872f53cf534bf98292693ffe31c1ac' -H 'Content-Type: application/json'  "http://localhost:8777/v2/meters/cpu_util/statistics?q.field=timestamp&q.op=ge&q.value=2014-08-20T13:34:17&q.field=timestamp&q.op=le&q.value=2014-08-30T13:00:00"

 

simple test in bash

 

token='90872f53cf534bf98292693ffe31c1ac'
curl -H "X-Auth-Token: $token" -H 'Content-Type: application/json' http://localhost:8777/v2/meters/network.incoming.packets/statistics

 

python code to provide you a billing method for a given tenant including statistics of diskio and networkio and cpu usage.

 

from six.moves.urllib import parse
from httplib2 import Http
import json
admin_token='90872f53cf534bf98292693ffe31c1ac'

def build_url(path, q, params=None):
   '''This converts from a list of dicts and a list of params to
      what the rest api needs, so from:
   "[{field=this,op=le,value=34},{field=that,op=eq,value=foo}],
    ['foo=bar','sna=fu']"
   to:
   "?q.field=this&q.op=le&q.value=34&
     q.field=that&q.op=eq&q.value=foo&
     foo=bar&sna=fu"
   '''
   if q:
       query_params = {'q.field': [],
                       'q.value': [],
                       'q.op': [],
                       'q.type': []}

       for query in q:
           for name in ['field', 'op', 'value', 'type']:
               query_params['q.%s' % name].append(query.get(name, ''))

       # Transform the dict to a sequence of two-element tuples in fixed
       # order, then the encoded string will be consistent in Python 2&3.
       new_qparams = sorted(query_params.items(), key=lambda x: x[0])
       path += "?" + parse.urlencode(new_qparams, doseq=True)

       if params:
           for p in params:
               path += '&%s' % p
   elif params:
       path += '?%s' % params[0]
       for p in params[1:]:
           path += '&%s' % p
   return path

def build_path(meter_name, meter_type='statistics'):
   #path ='http://localhost:8777/v2/meters/cpu_util/statistics'
   path ='http://localhost:8777/v2/meters/%s/%s'%(meter_name, meter_type)
   return path
def get_metaname_stat(meta_name, project_id):
   #path = build_path('cpu_util')
   path = build_path(meta_name)
   q=[{"field":"timestamp","op":"ge","value":"2014-09-29T13:34:17","type":"None"},
   {'field':'project_id','op':'eq','value':project_id}]
   full_path= build_url(path,q)

   h = Http()
   headers = {'Content-type': 'application/json','X-Auth-Token':'%s'%admin_token}
   esp, content = h.request("%s"%full_path, headers=headers)
   datas = json.loads(content)

   for data in datas:
       print '%s usage %s for this tenant %s'%(meta_name, data['sum'],project_id)


project_id='5bee4ac21f2844439b76665ba65ee952'
get_metaname_stat('cpu_util', project_id)
get_metaname_stat('disk.write.bytes', project_id)
get_metaname_stat('disk.read.bytes', project_id)
get_metaname_stat('network.incoming.bytes', project_id)
get_metaname_stat('network.outgoing.bytes', project_id)

 

 

 

 

 

文章標籤

太空梭創業日誌 發表在 痞客邦 留言(0) 人氣()

餐廳名稱:狀元紅牛肉火鍋專家
消費時間:2014/09
地址:基隆市仁愛區仁一路293巷2號1樓
電話:02-24259989

可以大口吃肉的牛肉鍋,獨特湯頭,搭配80年代的搖滾樂、啤酒,真是感到太暢快了。

原本跟朋友想去基隆吃個小吃,沒想到找不到停車位,因此車停比較遠。
突然看到不起眼的小巷子裡有一間挺特別的小店,紅色與白色的看板,感覺挺明顯的。
還有兩個小燈籠,外觀挺雅致的。
其實我還蠻相信,小巷裡有美食的這個說法。
因此跟我朋友決定進去嘗嘗。

當我走進去後,聽到滿滿的80年代的搖滾樂,aerosmith,guns and roses等。
挺特別的,還沒去過火鍋店,放80年代的搖滾樂。

隨即點了店裡招牌牛雜火鍋。
五分鐘左右,火鍋來了。
挺令人感到意外的,牛肉很大塊,分量很足,還有帶骨的,咬開竟然還有軟骨吃(本人很愛吃軟骨)。
鍋裡的牛肉非片狀,為塊狀,吃下去只能說是滿滿的牛肉味,不會太軟,也可輕鬆嚼爛。
牛雜裡我只認識牛肚,牛腱,其他不知道是甚麼,有一個東西長看起來像我吃過的豬肺,大概是牛肺吧?。
牛肚與牛腱切得很大塊,分量很多,大塊的牛肉放在嘴裡總有一種很爽的感覺。
白菜感覺少了點,但我只想吃牛肉,因此我也就不太理會白菜了。
湯頭,入口時總覺得有點清淡,幾秒後嘴裡竟滿滿的牛肉味,而最後竟然有很輕微的辣感(是洋蔥?)。
才疏學淺的我,倒覺得這湯頭還挺奇妙的。


順口問了老闆用甚麼油(新聞鬧得兇),老闆說牛油,而且是他們自己熬(台語唸ㄅㄧㄚ)出來的牛油。

叫了台啤一罐,我只能說,這火鍋配上啤酒,真是絕配,所有的口腹之慾都被滿足了。
除此外還搭配了我最愛的80年代搖滾樂,耳慾也被滿足了。

後來又叫了一碗麵,加入火鍋中,我不是甚麼饕客,但我對牛肉麵很挑剔的,我發覺這湯頭,
好像比大部分我吃過的牛肉麵都好吃,這間如果只賣牛肉麵也會是一間很強的牛肉麵才是。
吃了約一小時,沒有叫其他的肉了,因為吃夠了。

結帳時看了一下菜單,發現菜單裡還有牛尾、牛鞭、牛舌、牛心等,果真是全牛火鍋專家阿。
因為覺得湯頭很特別,因此特別問了老闆,湯好喝是怎麼做的,老闆很開心的回答,我們的高湯是用牛排骨熬煮的,

可以避免用牛大骨的油膩與腥味,喝起來也比較甘甜,然後加入特製的紅燒原汁調味,還可以配合客人的口味調整濃淡。

(....... 老闆打死不講紅燒原汁怎麼做的@@)

另外,我常在外吃火鍋,但每次吃完總覺得,牛肉吃得不夠爽。不過,這家牛肉火鍋店讓我感到很滿足的離開。

文章標籤

太空梭創業日誌 發表在 痞客邦 留言(0) 人氣()

簡單的email client 使用python實現

 

#!/usr/bin/env python

# -*- coding: utf-8 -*-
from email.header import Header
from email.mime.text import MIMEText
from getpass import getpass
from smtplib import SMTP_SSL

# provide credentials if use yahoo
login = 'youremail.yahoo.com'
password = 'yourpassword'

# create message
msg = MIMEText('哈哈哈', 'plain', 'utf-8')
msg['Subject'] = Header('大部份測試', 'utf-8')
msg['From'] = login
msg['To'] = 'sendemail.xxx.com'

# send it if use yahoo
s = SMTP_SSL('smtp.mail.yahoo.com', timeout=10) #NOTE: no server cert. check
s.set_debuglevel(0)
try:

   s.login(login, password)

   s.sendmail(msg['From'], msg['To'], msg.as_string())
finally:
   s.quit()

文章標籤

太空梭創業日誌 發表在 痞客邦 留言(0) 人氣()

如果你需要某些網站提供你需要的訊息,作為某些用途,比如說

某種提供資訊的App,或者bigdata的計算。

一種方式是copy paste網頁上的資料,再存在資料庫中,但,如果網頁資料有新增,基本上你是無從得知的,只能一筆一筆慢慢比對。

python 提供了很好的opensource,pyquery。

用最簡單的方式把你要的資訊爬出來。

下面為一簡單範例,將中油直營站的地址全部找出來。

先看一下網站的內容

http://pd.wh.seed.net.tw/fetc/cpc/cpc0331.html

再用這指令看一下這網站的source code

curl http://pd.wh.seed.net.tw/fetc/cpc/cpc0331.html

基本上是可以用chorme看source code的,但指令用習慣了,就用curl了。

內容被我簡化,如下

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>台灣中油直營據點</title>
<link href="css/main.css" rel="stylesheet" type="text/css" />
<style type="text/css">
body {
background-color: #DDF5FF;
}
</style>
</head>


<tr height="22">
<td height="22" bgcolor="#FFFFCE">台灣中油-西定路站</td>
<td bgcolor="#FFFFCE">基隆市中山區西定路190號</td>
<td align="center" bgcolor="#FFFFCE">7:00</td>
<td align="center" bgcolor="#FFFFCE">21:00</td>
</tr>
<tr height="22">
<td height="22" bgcolor="#fefbec">台灣中油-成功一路站</td>
<td bgcolor="#fefbec">基隆市仁愛區成功一路105號</td>
<td align="center" bgcolor="#fefbec">0:00</td>
<td align="center" bgcolor="#fefbec">24:00</td>
</tr>

---------------------------------------------------------------------------

程式在此

---------------------------------------------------------------------------

# -*- coding: utf-8 -*-
from pyquery import PyQuery as pq
import sys
import os,codecs

counter = 0
q = pq(url='http://pd.wh.seed.net.tw/fetc/cpc/cpc0331.html')

q1 = pq(url='http://www.wdps.ntpc.edu.tw/index.php')
q2 = pq(url='http://tw.yahoo.com/')
print(q('title').text().encode('iso-8859-1'))
print ('---------------------------')
#os.exit(1)
ss = q('title').find('table').eq(1).text()
counter= 0
#print ss
for data in q('tr'):

   res = q(data).find('td').eq(1).text().encode('iso-8859-1')#.decode('iso-8859-1')
   print res
   resnum2 = res.find('市')
   resnum1= res.find('縣')
   resnum = res.find('號')
   
   if resnum>0 and (resnum1 >0 or resnum2> 0):
     counter = counter + 1
     print res
     print q(data).find('td').eq(0).text().encode('iso-8859-1')

--------------------------------------------------------------------------------------

1. 由於此網頁的response是用iso-8859-1所以用此去encode,一般都是utf-8。

2. 這方法還是需要很多try and error,但越爬越快吧。

3. 觀察網頁資料,每個tr下的td第一根第二個元素是我們要的因此你可以這樣取出來。

    q(data).find('td').eq(0).text().encode('iso-8859-1')

    q(data).find('td').eq(1).text().encode('iso-8859-1')

 

試試看,你現在拿到中油的站名跟地址了。

接下來能做些什麼應用,就靠自己的創意了。

 

文章標籤

太空梭創業日誌 發表在 痞客邦 留言(0) 人氣()

使用python撰寫程式後,開始安裝到系統,這中間還是大有學問的。

一般的做法是包成package如下圖,執行python setup install. 你的程式就可以放到OS上指定的目錄,之後就可以用import的方式當作lib使用。

Screen Shot 2014-08-27 at 上午10.06.19  

這方法是寫python程式時大家最常用到的方法。

 

一個大問題是,source code還在系統中,對於你是做一個enterprise的產品來說,這中間還需要一些事情要做

1. 變成deb檔(用ubuntu為範例):

在deploy整個系統時,變成deb檔是能夠很有效管理你的deploy程序

2. 刪除py檔,保留pyc檔

系統中,你的程式碼將會受到保護,不會讓人看到你的Source Code.

 

如何做:

在ubuntu 14.04的server中,安裝所需要的套件

apt-get install -y ruby1.9.3 build-essential

gem install fpm -v 1.1.0

 

除此之外你還需要已經做好的package,如上圖

整個目錄結構與目錄中的檔案可能是這樣

Screen Shot 2014-08-27 at 上午10.06.45  

 

產生一個Makefile如下,並放到主目錄中

#!/usr/bin/make -f

 

NAME=flysatellite

 

all: clean package

 

package:

        fpm -s python -t deb -a amd64 -d python \

        -x '**/*.py' -x '**/test' -x '**/tests' \

        --deb-upstart upstart/fs-flysatellite.upstart \

        --python-package-name-prefix fs \

        setup.py

 

clean:

        rm -rf dist build fs-$(NAME)*.deb usr *.egg-info

 

 

接著你可以執行make

你會看到產生出來的deb檔 fs-flysatellite_0.05_amd64.deb

Screen Shot 2014-08-27 at 上午10.16.43  

很簡單吧

裝看看

dpkg -i fs-flysatellite_0.05_amd64.deb

裝完後看看安裝的目錄為怎樣

Screen Shot 2014-08-27 at 上午10.13.39  

 

完成了

你的source code只剩下 .pyc檔

Screen Shot 2014-08-27 at 上午10.13.52   

opensource 是你最好的朋友

文章標籤

太空梭創業日誌 發表在 痞客邦 留言(0) 人氣()

更新kernel > 3.10

sudo update-pciids && sudo update-usbids

apt-get purge linux-image-* linux-headers-*

apt-get install linux-image-generic-lts-saucy linux-headers-generic-lts-saucy
uname -a

安裝bcache

add-apt-repository ppa:g2p/storage
apt-get update
apt-get install bcache-tools
make-bcache -C /dev/sdd -B /dev/sdb

其中sdd為ssd或傳統硬碟或memory, sdb 為傳統硬碟。

mkfs.ext4 /dev/bcache0

從新開機

看看 /dev/bcache0是否還在

mount /dev/bcache0 /mnt/testssd

開始試用吧

文章標籤

太空梭創業日誌 發表在 痞客邦 留言(0) 人氣()

帶一家大小去平溪,走山路,出發時油還剩100km。

沒想到,到平溪時油表只剩下13km。

當然,這時候我得趕快找個加油站才行。

一問之下,平溪沒有加油站,平溪沒有加油站,平溪沒有加油站。

最近的加油站,還有25km,且要走山路。

別忘了,我的油只剩下13km。

天啊。這時大家會怎麼做哩。

只好拼了,前兩分鐘,開上坡,心想,糟了,馬上只剩下10km的油。

好險,接下來,一路下坡,用最省油的開法,不踩油門,也好險,後方無車。

一路開到最近加油站,停車,油表剩下0km。

從來沒有看到加油站那麼開心過,不過,平溪之旅也毀了。

大家,記得,出門多喝水外,還要多加油。

 

太空梭創業日誌 發表在 痞客邦 留言(0) 人氣()

 

最近對想寫個關於GPS應用方面的程式,因此今天試做了一下Layout,如下圖這是今天花了一個小時搞出來的東西。

tracker_layout    

以前都是搞server端的東西,完全不用到 UI,跳到手機端,還得多處理一下UI的部分。

UI總是很大的問題,永遠改不完的部分就是UI,所以今天算想多花時間針對layout能否動態增減做一番了解。

一開始的想法是要有一個Login的UIView(View Controller),按了一個按鈕後(next),連到MapViewController。我想這是打UI草稿的最一開始的流程。

接著,我想我需要一個Navigating Controller,連到MapViewController,因此後面可以有更多的操作。後來我發現我需要至少兩個主要功能才能完成我的軟體。因此,我又建了一個Tab Bar Controller。

另外一個功能需要另一個View Controller,因此我建了Group View Controller,當然我還需要一個Navitation Controller,再將Tab Bar Controller與新建的Navigation Controller相連。

因此,我得到了我初步的Layout。

從View Controller開始,產生不同的Map View Controller並透過 Editor-> embed in -> (Navigation Controller, Tab Bar Controller) ,最後連回ViewController。

這真是個有趣的過程。執行後還真的能動。只能說Apple實在太偉大了。

有了這個Layout後,我想我可以開始把我之前的測試程式,分別的放入這個 layout裏,再依照情況動態增減layout。

目前測試的差不多的程式有,

1. iphone video streaming 觀看server端的電影

2. backgroud gps location recorder

3. restful api from iphone to server

4. 從手機camera取像後將部分影像直接encode成mp4於buffer中,直接傳到遠端伺服器,不佔手機硬碟空間。目前手機當作broadcasting server,因為這樣可以做更多的應用。

5. 漂亮的table view .....應該吧。對一個RD而言,美感大概只能放在女生身上。

6. server端的 web application server與mongodb

改天再分享上面幾項東西,可以的話,把程式也貼出來。

 

太空梭創業日誌 發表在 痞客邦 留言(0) 人氣()

  • Aug 26 Tue 2014 13:11
  • test

test first

太空梭創業日誌

flysatellite

文章標籤

太空梭創業日誌 發表在 痞客邦 留言(0) 人氣()