Zfssa list replication actions status
wordpress meta
title: 'ZFSSA List Replication Actions Status'
date: '2017-04-30T09:22:57-05:00'
status: publish
permalink: /zfssa-list-replication-actions-status
author: admin
excerpt: ''
type: post
id: 1107
category:
- ZFS
tag: []
post_format: []
title: 'ZFSSA List Replication Actions Status'
date: '2017-04-30T09:22:57-05:00'
status: publish
permalink: /zfssa-list-replication-actions-status
author: admin
excerpt: ''
type: post
id: 1107
category:
- ZFS
tag: []
post_format: []
Using the ZFS appliance REST API to take a quick look at all replication actions and check on progress of long running jobs.
# python zfssa_status_replication_v1.0.py
List Replicated Project Snapshots -- PST Run Date 2017-04-30 06:42:59.386738
date target project pool bytes_sent estimated_size estimated_time_left average_throughput
2017-04-30 07:20:04.232975 zfs2 EBSPRD POOL1 6.78G 21.3G 01:00:35 4MB/s
2017-04-30 06:42:59.386738 zfs3 EBSPRD POOL2 0 0 00:00:00 0B/s
<snip>
# cat zfssa_status_replication_v1.0.py
#!/usr/bin/env python
# Version 1.0
import sys
import requests, json, os
import datetime
requests.packages.urllib3.disable_warnings()
dt = datetime.datetime.now()
# ZFSSA API URL
url = "https://zfs1:215"
# ZFSSA authentication credentials, it reads username and password from environment variables ZFSUSER and ZFSPASSWORD
#zfsauth = (os.getenv('ZFSUSER'), os.getenv('ZFSPASSWORD'))
zfsauth = ('ROuser','password')
jsonheader={'Content-Type': 'application/json'}
def list_replication_actions_status():
r = requests.get("%s/api/storage/v1/replication/actions" % (url), auth=zfsauth, verify=False, headers=jsonheader)
if r.status_code != 200:
print("Error getting actions %s %s" % (r.status_code, r.text))
else:
j = json.loads(r.text)
#print j
for action in j["actions"]:
#print action
print("{} {:15} {:10} {:15} ".format(dt, action["target"], action["project"], action["pool"])),
show_one_replication_action(action["id"])
def show_one_replication_action(id):
r = requests.get("%s/api/storage/v1/replication/actions/%s" % (url,id), auth=zfsauth, verify=False, headers=jsonheader)
if r.status_code != 200:
print("Error getting status %s %s" % (r.status_code, r.text))
else:
j = json.loads(r.text)
#print j
print("{:15} {:15} {:19} {:15}".format(j["action"]["bytes_sent"], j["action"]["estimated_size"], j["action"]["estimated_time_left"], j["action"]["average_throughput"]))
print ("\nList Replicated Project Snapshots -- PST Run Date %s" % dt)
print('{:26} {:15} {:10} {:16} {:15} {:15} {:16} {}').format('date','target','project','pool','bytes_sent','estimated_size','estimated_time_left','average_throughput')
list_replication_actions_status()