论坛: FAQ (Thread #40346)

ジョブ[スケジュール予定]のcsv出力方法について (2019-01-22 13:31 by sgsunyou #82464)

初めまして。
Hinemos6.0をCentOSにインストールし検証を行なっています。
ジョブ[スケジュール予定]をcsvに出力することは可能でしょうか?
参考書を確認するとWebAPIで対応出来そうなのですが、
オプションに何を入れていいの、使い方が分からず上手くいきません。

<メソッド>
getPlanList(JobPlanFilter property,int plans)

ご教示頂きますようお願い致します。

Re: ジョブ[スケジュール予定]のcsv出力方法について (2019-01-23 13:12 by nonono #82467)

> getPlanList(JobPlanFilter property,int plans)

JobPlanFilterのオブジェクトを作成してそれを引数に渡せばいいんじゃないですかね。
Pythonで書くとこんな感じ?適当です。
------------------------------
#!/usr/bin/python
from suds.client import Client
from suds.transport.http import HttpAuthenticated
url = "http://<マネージャのホスト名>:8080/HinemosWS/JobEndpoint?wsdl"
t = HttpAuthenticated(username="〇〇〇", password="△△△")
client = Client(url, transport=t)

prop = client.factory.create('jobPlanFilter')
plans = 200

result = client.service.getPlanList(prop,plans)
print result
------------------------------
回复到 #82464

Re: ジョブ[スケジュール予定]のcsv出力方法について (2019-01-24 09:31 by sgsunyou #82475)

早速のご返事有難うございます。

URL、ID、パスワードをテスト環境に合わせスクリプトを作成ました。
このスクリプトをどのように利用するのでしょうか?
jobPlanFilterとは抽出する条件でしょうか?
素人で申し訳ございません。

ご教示頂きますようお願い致します。

回复到 #82467

Re: ジョブ[スケジュール予定]のcsv出力方法について (2019-01-24 10:06 by nonono #82476)

あ。作成したスクリプトは手元の5.0系の環境では動いたけど、
6.0系の環境で動くかは確かめてないです。あくまでも参考にしてください。

> このスクリプトをどのように利用するのでしょうか?

pythonスクリプトなので、Linuxであれば実行権限与えて実行するだけです。
実行するとgetPlanListで取得したジョブ[スケジュール予定]のデータが
標準出力に表示されます。この際、特にデータの整形はしていないので、
----------------
[(jobPlan){
date = 1548291120000
jobId = "job01"
jobKickId = "sche01"
jobKickName = "sche01"
jobName = "job01"
jobunitId = "jobunit01"
}, (jobPlan){

----------------
のようにdict型の要素を持つリストが生で出てきます。
このデータをCSVに変換する方法を考えればいいんじゃないでしょうかね。

> jobPlanFilterとは抽出する条件でしょうか?

そうですね。ジョブ[スケジュール予定]ビュー右上にあるフィルタで設定する内容を
保持するものだと思います。どんな条件が指定できるかは、 jobPlanFilterのソースコードを
見てみればいいと思います。
HinemosManager\src_jobmanagement\com\clustercontrol\jobmanagement\bean\JobPlanFilter.java

サンプルのスクリプトは、jobPlanFilterの各変数に値を設定しないでgetPlanListに渡しているので、
フィルタ設定を行わなずにジョブ[スケジュール予定]ビューを表示させた際のデータが取れてるはずです。
回复到 #82475

Re: ジョブ[スケジュール予定]のcsv出力方法について (2019-01-25 10:26 by sgsunyou #82489)

ご回答有難うございます。

スクリプトを以下以外コメントアウトして実行するとこの時点でエラーが出てしまいます。
urlを"JobEndpoint?wsdl"ではなく、"RepositoryEndpoint?wsdl"だとエラーなくログイン出来ているのですが。
もう少し調査してみます。

スクリプト抜粋
=======
from suds.client import Client
from suds.transport.http import HttpAuthenticated
url = "http://<マネージャのホスト名>:8080/HinemosWS/JobEndpoint?wsdl"
t = HttpAuthenticated(username="〇〇〇", password="△△△")
client = Client(url, transport=t)
=======

エラー内容抜粋
=======
Traceback (most recent call last):
File "./plan.py", line 6, in <module>
・・・・
・・・・
File "/usr/lib/python2.7/site-packages/suds/sax/element.py", line 404, in getAttribute
prefix, name = splitPrefix(name)
RuntimeError: maximum recursion depth exceeded
=======



回复到 #82476

Re: ジョブ[スケジュール予定]のcsv出力方法について (2019-01-25 14:24 by nonono #82490)

「 RuntimeError: maximum recursion depth exceeded」とpythonのsudsで検索すると
いくつか情報が出てくるので、suds依存の問題なのかもしれないですね。

なので、suds以外のライブラリ使ってみるとか(調べるとZeepというのがあるみたいです)、
いっそ他の言語で作ってみるとかを考えてみてください。
回复到 #82489

Re: ジョブ[スケジュール予定]のcsv出力方法について (2019-01-30 11:41 by nonono #82515)

pythonのZeepライブラリの使い方調べながら作ってみた。
お蔵入りするのも勿体ないので載せておきます。
6系でスケジュール予定とれることは簡単に確認したけど、
全体的にまともに動くかはしらんです。参考程度にしてください。
--------------------
#!/usr/bin/python

from requests import Session
from requests.auth import HTTPBasicAuth
from zeep import Client
from zeep.transports import Transport

session = Session()
session.auth = HTTPBasicAuth("ユーザ", "パスワード")

client = Client('http://【ホスト名】:8080/HinemosWS/JobEndpoint?wsdl',
transport=Transport(session=session))

jobplanfilter_type = client.get_type('ns3:jobPlanFilter')

prop = jobplanfilter_type(fromDate='',jobKickId='',toDate='')
plans = 200

result = client.service.getPlanList(arg0=prop,arg1=plans)
print result
--------------------
回复到 #82490