Skip to main content

Working with Documents

Pre-requisite

Let's assume your

Driver download

  pyC8 requires Python 3.5+. Python 3.6 or higher is recommended

To install pyC8, simply run

$ pip3 install pyC8

or, if you prefer to use conda:

conda install -c conda-forge pyC8

or pipenv:

pipenv install --pre pyC8

Once the installation process is finished, you can begin developing applications in Python.

Code Sample

  from c8 import C8Client
import pprint
import time

if __name__ == '__main__':

# Variables - URLs
global_url = "gdn.paas.macrometa.io"
region_urls = [
"https://gdn-sfo2.prod.macrometa.io",
"https://gdn-us-west1.prod.macrometa.io",
"https://gdn-nyc1.prod.macrometa.io"
]

# Variables - DB
email = "[email protected]"
password = "xxxxx"
geo_fabric = "_system"
collection_name = "ddoslist"
ip_address = "20.1.1.9"

# Variables - Queries
read_query = "FOR device in ddoslist " + "FILTER device.ip == \"" + ip_address + "\"RETURN { IP:device.ip, IsAllowed:device.action}"

insert_query = "INSERT { \"ip\" : \"" + ip_address + "\", \"action\": \"block\", \"rule\":\"blacklistA\"} INTO ddoslist"


# Variables - Data
data = [
{"ip": "10.1.1.1", "action": "block", "rule": "blacklistA"},
{"ip": "20.1.1.2", "action": "block", "rule": "blacklistA"},
{"ip": "30.1.1.3", "action": "block", "rule": "blacklistB"},
{"ip": "40.1.1.4", "action": "block", "rule": "blacklistA"},
{"ip": "50.1.1.5", "action": "block", "rule": "blacklistB"},
{"ip": "20.1.1.3", "action": "allow", "rule": "whitelistA"},
{"ip": "20.1.1.4", "action": "allow", "rule": "whitelistA"},
{"ip": "30.1.1.4", "action": "allow", "rule": "whitelistB"},
{"ip": "30.1.1.5", "action": "allow", "rule": "whitelistB"}
]
pp = pprint.PrettyPrinter(indent=4)

# Step1: Open connection to GDN. You will be routed to closest region.
print("1. CONNECT: federation: {}, user: {}".format(global_url, email))
client = C8Client(protocol='https', host=global_url, port=443,
email=email, password=password,
geofabric=geo_fabric)

# Step2: Create a collection if not exists
print("2. CREATE_COLLECTION: region: {}, collection: {}".format(global_url, collection_name))
if client.has_collection(collection_name):
collection = client.collection(collection_name)
else:
collection = client.create_collection(collection_name)

# Step3: Insert data into collection.
print("3. INSERT_DDOS_DATA: in region: {}".format(global_url))
client.insert_document(collection_name, document=data)

# Step4: Read Data
print("4. IS_IP_ALLOWED...from region: {}".format(global_url))
cursor = client.execute_query(read_query)
docs = [document for document in cursor]
if docs == []:
print("IP: {}, IsAllowed: {}\n".format(ip_address, "'allow'"))
else:
pp.pprint(docs)


# Step5: Blacklist IP Address
print("5. BLACKLIST the IP...from region: {}, ip: {}".format(global_url, ip_address))
cursor = client.execute_query(insert_query)
time.sleep(0.3)

# Step6: Read Data from other regions.
print("6. Check again if IP is allowed globally")
for region_url in region_urls:
print("\n IS_IP_ALLOWED...cheking from region: {}".format(region_url))
clientx = C8Client(protocol='https', host=region_url, port=443, email=email, password=password,
geofabric=geo_fabric)
cursorx = clientx.execute_query(read_query)
docs = [document for document in cursorx]
pp.pprint(docs[0])

# Step7: Delete Data
print("\n7. DELETE_DATA: region: {}, collection: {}".format(global_url, collection_name))
collection.truncate()
#client.delete_collection(collection_name)