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コマンドの説明。

Source: https://habr.com/ru/post/J135408/


All Articles