Skip to content

Commit

Permalink
Merge pull request ceph#33063 from theanalyst/boto3-ext-append
Browse files Browse the repository at this point in the history
examples: rgw: add boto3 append & get usage api extensions

Reviewed-by: Yuval Lifshitz <[email protected]>
  • Loading branch information
cbodley authored Feb 28, 2020
2 parents e405dc3 + c968f41 commit 3064f20
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 1 deletion.
1 change: 1 addition & 0 deletions doc/radosgw/admin.rst
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,7 @@ the latest quota stats. ::

radosgw-admin user stats --uid=<uid> --sync-stats

.. _rgw_user_usage_stats:

Get User Usage Stats
--------------------
Expand Down
30 changes: 30 additions & 0 deletions doc/radosgw/s3/serviceops.rst
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,33 @@ Response Entities
+----------------------------+-------------+-----------------------------------------------------------------+
| ``DisplayName`` | String | The bucket owner's display name. |
+----------------------------+-------------+-----------------------------------------------------------------+


Get Usage Stats
---------------

Gets usage stats per user, similar to the admin command :ref:`rgw_user_usage_stats`.

Syntax
~~~~~~
::

GET /?usage HTTP/1.1
Host: cname.domain.com

Authorization: AWS {access-key}:{hash-of-header-and-secret}

Response Entities
~~~~~~~~~~~~~~~~~

+----------------------------+-------------+-----------------------------------------------------------------+
| Name | Type | Description |
+============================+=============+=================================================================+
| ``Summary`` | Container | Summary of total stats by user. |
+----------------------------+-------------+-----------------------------------------------------------------+
| ``TotalBytes`` | Integer | Bytes used by user |
+----------------------------+-------------+-----------------------------------------------------------------+
| ``TotalBytesRounded`` | Integer | Bytes rounded to the nearest 4k boundary |
+----------------------------+-------------+-----------------------------------------------------------------+
| ``TotalEntries`` | Integer | Total object entries |
+----------------------------+-------------+-----------------------------------------------------------------+
42 changes: 42 additions & 0 deletions examples/boto3/append_object.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/usr/bin/python
from __future__ import print_function

import boto3
import sys
import json

def js_print(arg):
print(json.dumps(arg, indent=2))

if len(sys.argv) != 3:
print('Usage: ' + sys.argv[0] + ' <bucket> <key>')
sys.exit(1)

# bucket name as first argument
bucketname = sys.argv[1]
keyname = sys.argv[2]
# endpoint and keys from vstart
endpoint = 'http://127.0.0.1:8000'
access_key='0555b35654ad1656d804'
secret_key='h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=='

client = boto3.client('s3',
endpoint_url=endpoint,
aws_access_key_id=access_key,
aws_secret_access_key=secret_key)

print('deleting object first')
js_print(client.delete_object(Bucket=bucketname, Key=keyname))
print('appending at position 0')
resp = client.put_object(Bucket=bucketname, Key=keyname,
Append=True,
AppendPosition=0,
Body='8letters')

js_print(resp)
append_pos = resp['AppendPosition']
print('appending at position %d' % append_pos)
js_print(client.put_object(Bucket=bucketname, Key=keyname,
Append=True,
AppendPosition=append_pos,
Body='8letters'))
17 changes: 17 additions & 0 deletions examples/boto3/get_usage_stats.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/python
from __future__ import print_function

import boto3
import json

# endpoint and keys from vstart
endpoint = 'http://127.0.0.1:8000'
access_key='0555b35654ad1656d804'
secret_key='h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=='

client = boto3.client('s3',
endpoint_url=endpoint,
aws_access_key_id=access_key,
aws_secret_access_key=secret_key)

print(json.dumps(client.get_usage_stats(), indent=2))
62 changes: 61 additions & 1 deletion examples/boto3/service-2.sdk-extras.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@
"input":{"shape":"DeleteBucketNotificationConfigurationRequest"},
"documentationUrl":"https://docs.ceph.com/docs/master/radosgw/s3/bucketops/#delete-notification",
"documentation":"<p>Deletes the notification configuration from the bucket.</p>"
},
"GetUsageStats":{
"name":"GetUsageStats",
"http":{
"method":"GET",
"requestUri":"/?usage",
"responseCode":200
},
"output": {"shape": "GetUsageStatsOutput"},
"documentationUrl":"https://docs.ceph.com/docs/master/radosgw/s3/serviceops#get-usage-stats",
"documentation":"<p>Get usage stats for the user</p>"
}
},
"shapes": {
Expand All @@ -26,6 +37,35 @@
}
},
"AllowUnordered":{"type":"boolean"},
"PutObjectRequest": {
"members": {
"AppendPosition": {
"shape":"AppendPosition",
"documentation": "<p>Position to allow appending</p>",
"location": "querystring",
"locationName": "position"
},
"Append": {
"shape":"Append",
"documentation":"<p>Append Object</p>",
"location": "querystring",
"locationName": "append"
}
}
},
"Append": {"type":"boolean"},
"AppendPosition":{"type":"integer"},
"PutObjectOutput": {
"members": {
"AppendPosition": {
"shape":"AppendPosition",
"documentation": "<p>Position to allow appending</p>",
"location": "header",
"locationName": "x-rgw-next-append-position",
"documentationUrl":"https://docs.ceph.com/docs/master/radosgw/s3/objectops/#append-object"
}
}
},
"GetBucketNotificationConfigurationRequest":{
"type":"structure",
"required":["Bucket"],
Expand Down Expand Up @@ -138,7 +178,27 @@
}
},
"documentation":"<p>A container for object tags filtering rules.</p>"
}
},
"GetUsageStatsOutput": {
"type": "structure",
"members": {
"Summary": {
"shape":"UsageStatsSummary",
"documentation": "<p/>"
}
}
},
"UsageStatsSummary": {
"type": "structure",
"members": {
"TotalBytes":{"shape":"TotalBytes"},
"TotalBytesRounded":{"shape":"TotalBytesRounded"},
"TotalEntries":{"shape":"TotalEntries"}
}
},
"TotalBytesRounded":{"type":"integer"},
"TotalBytes":{"type":"integer"},
"TotalEntries":{"type":"integer"}
},
"documentation":"<p/>"
}
Expand Down

0 comments on commit 3064f20

Please sign in to comment.