Gitの新しいコミット通知デーモンを使用するPython

チームとして、私は参加者の活動について知ることが好きです。 そのため、 gitリポジトリへの新しいコミットを監視するデーモンを作成することが決定されました。 私はUbuntuで働いているので、通知は統合された方法で実装されました-libnotifyライブラリ。

言語-Python



画像



記事の言及:

1. Pythonのデーモン;

2. Pythonでのログイン。

3. Pythonのプログラムの構成ファイルの保存。

4. PythonスクリプトからOSコマンドを操作します。

5. gitから最近の変更のリストを取得します。

6.標準のUbuntuポップアップ通知。



タスクを実装するために、 Python (高レベルで、解釈された、オブジェクト指向で拡張可能なプログラミング言語)が選択されました。

最初に、2つのソースが非常に役立ちました。

-公式ドキュメント: http : //docs.python.org/tutorial/index.html

-ロシア語の一連のIBM記事: https : //www.ibm.com/developerworks/en/library/l-python_part_1/



基本を学びながら、プログラムの作成を開始します。



1.デーモン



ネットワーク上には悪魔の多くの認識があります 。肯定的なレビューと魅力的な名前を持つ既成の悪魔の1つを選択しました: http : //www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ 。 このデーモンでは、この場所でdaemon.py stopコマンドを使用してシャットダウンする際に問題が発生しました

except OSError, err: err = str(err) if err.find("No such process") > 0: if os.path.exists(self.pidfile): os.remove(self.pidfile)
      
      





これはロシアのロケール、私のシステムの「 そのようなプロセスはありません 」というフレーズがロシア語で返されたために発生したようです。 これを修正する簡単な方法は、このチェックを削除することです:

 except OSError, err: if os.path.exists(self.pidfile): os.remove(self.pidfile)
      
      







2.ロギング



プログラムを通知する最も簡単な方法は、 print ()関数を使用することです。 ただし、このプログラムはデーモンとして起動され、その状態に関する情報を起動コンソールに出力する必要はありません。 この場合の便利なオプションは、ログをファイルに書き込むことです。 Pythonには、標準ライブラリの一部であるロギングの組み込みメソッド、 ロギングモジュール( http://docs.python.org/library/logging.html )があります。

モジュールには多くのロギングオプション( ハンドラーhttp//docs.python.org/library/logging.handlers.html )がありますStreamHandlerFileHandlerWatchedFileHandlerRotatingFileHandlerTimedRotatingFileHandlerSocketHandlerDatagramHandlerSysLogHandlerNTlerventHandlerhandlerndandhandhandler HTTPHandler デーモンを制御するために、 FileHandlerが使用されました。

 logging.basicConfig(filename = tempfile.gettempdir() + '/gitPushNotify.log', level = logging.DEBUG, format = '%(asctime)s %(levelname)s: %(message)s', datefmt = '%Y-%m-%d %I:%M:%S') logging.info('Daemon start')
      
      







3. Pythonプログラムの構成を保存する



アプリケーションの構成を保存するには、 iniファイルとそれらを操作するための組み込みのConfigParserモジュールが使用されますhttp://docs.python.org/library/configparser.html ):

 config = ConfigParser.ConfigParser() configPath = os.path.dirname(__file__) + '/config.ini' config.read(configPath)
      
      





関数によるパラメーター値の取得(この場合、 整数値の受信):

 timeout = config.getint('daemon', 'timeout')
      
      







4. PythonスクリプトからのOSコマンドの操作



システムコマンドを実行するには、 サブプロセスモジュール( http://docs.python.org/library/subprocess.html )のcheck_output ()メソッドを使用します。

 sourceOutput = subprocess.check_output('cd ' + repositoryPath, shell=True)
      
      





osモジュールメソッドも使用できます。

 sourceOutput = os.system(commandString)
      
      





ドキュメントでは、 サブプロセスの使用を推奨しています。



5. gitから最近の変更のリストを取得する



whatchangedコマンド( http://schacon.github.com/git/git-whatchanged.html )を使用して、最新のリポジトリ変更を表示すると便利です。 このコマンドを使用すると、表示されるログメッセージの形式を設定し、表示される変更の数を設定できます。 コマンドの使用例:

$ git whatchanged master -10 --date=raw --date-order --pretty=format:"%H %n%cn %n%ce %n%ct %n%s"







引数の順序:

master-リポジトリブランチ;

-10-表示されたレコードの数。

--date-order-変更された日付でソート。

--pretty = format: "..." -出力フォーマット。



6.標準のUbuntuポップアップ通知



Ubuntuでポップアップ通知を処理するにlibnotifyライブラリ( https://wiki.ubuntu.com/NotificationDevelopmentGuidelines )を使用します。 次のコマンドでインストールされているかどうかを確認します。

$ dpkg -l | grep libnotify-bin







またはすぐに実行します:

$ sudo apt-get install libnotify-bin







次のコマンドを使用して通知を表示できます。

$ notify-send "Habr!"

$ notify-send -i notification-message-email "Title" "Message"







-iフラグは画像であり、システム名またはsvgpng、またはjpg形式の画像へのパスが示されます。



デーモンの起動



ファイルを実行可能にする必要があります。

$ chmod +x gitPushNotifyDaemon.py







構成ファイルで開始する前に、リポジトリへのパスとポーリング頻度を指定する必要があります。

$ vim config.ini







打ち上げ:

$ python gitPushNotifyDaemon.py start







すべてがうまくいった場合:

Daemon starting..







開始通知が表示されます:



画像



これで、次のコマンドを実行して、プロセスのリストにデーモンを表示できます。

$ ps uax | grep gitPushNotifyDaemon.py







ログを使用して、デーモンのプロセスを監視できます。

$ tail -f /tmp/gitPushNotify.log







デバッグ用にgitPushNotify.pyファイルを個別に実行することもできます。

$ python gitPushNotify.py









プロジェクトリポジトリ: https : //github.com/antonfisher/gitPushNotify



それだけです 良い一日を!



参照:

1. http://docs.python.org/tutorial/index.html-公式チュートリアル。

2. https://www.ibm.com/developerworks/ru/library/l-python_part_1/-一連のIBM記事。

3. http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/-Sander Marechalのデーモンの実装。

4. http://docs.python.org/library/logging.html-Pythonロギングモジュール。

5. http://docs.python.org/library/configparser.html-Python 、モジュールConfigParser

6. http://docs.python.org/library/subprocess.html-Pythonサブプロセスモジュール。

7. https://wiki.ubuntu.com/NotificationDevelopmentGuidelines-libnotifyの説明。

8. http://schacon.github.com/git/git-whatchanged.html git-whatchangedコマンドの説明。



All Articles