Files
ThingsBoard/migration/convertDynamoDB.ipynb
2023-06-03 11:42:26 -05:00

203 lines
8.1 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"import boto3, json"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"def convertToNewConfig(config):\n",
" #old form\n",
" #\"{'mainHP': 'https://hp-drivers.s3-us-west-2.amazonaws.com/mainMeshify/','m1': 'https://hp-drivers.s3-us-west-2.amazonaws.com/M1/','flowmonitor': 'https://s3.amazonaws.com/pocloud-drivers/flow-monitor/'}\"\n",
"\n",
" #new form\n",
" #\"{'mainHP': 'https://hp-thingsboard.s3.amazonaws.com/mainHP/','m1': 'https://hp-thingsboard.s3.amazonaws.com/M1/','flowmonitor': 'https://hp-thingsboard.s3.amazonaws.com/flowmonitor/'}\"\n",
" mainHPMapping = {\n",
" \"mainMeshify\": \"https://hp-thingsboard.s3.amazonaws.com/mainHP/\",\n",
" \"piflow\": \"https://hp-thingsboard.s3.amazonaws.com/mainHPRPI/\",\n",
" \"plcfresh\": \"https://hp-thingsboard.s3.amazonaws.com/mainHPPLCFRESH/\"\n",
" }\n",
"\n",
" configMapping = {\n",
" \"abbflow\": \"https://hp-thingsboard.s3.amazonaws.com/abbflow/\",\n",
" \"advvfdipp\": \"https://hp-thingsboard.s3.amazonaws.com/advvfdipp/\",\n",
" \"dhsensor\": \"https://hp-thingsboard.s3.amazonaws.com/dhsensor/\",\n",
" \"dual_flowmeter\": \"https://hp-thingsboard.s3.amazonaws.com/dual_flowmeter/\",\n",
" \"flowmeterskid\": \"https://hp-thingsboard.s3.amazonaws.com/flowmeterskid/\",\n",
" \"flowmonitor\": \"https://hp-thingsboard.s3.amazonaws.com/flowmonitor/\",\n",
" \"PiFlow\": \"https://hp-thingsboard.s3.amazonaws.com/PiFlow/\",\n",
" \"ipp\": \"https://hp-thingsboard.s3.amazonaws.com/ipp/\",\n",
" \"plcpond\": \"https://hp-thingsboard.s3.amazonaws.com/plcpond/\",\n",
" \"multisensor\": \"https://hp-thingsboard.s3.amazonaws.com/multisensor/\",\n",
" \"dualactuator\": \"https://hp-thingsboard.s3.amazonaws.com/dualactuator/\",\n",
" \"dualactuatorpri\": \"https://hp-thingsboard.s3.amazonaws.com/dualactuatorpri/\",\n",
" \"plcfreshwater\": \"https://hp-thingsboard.s3.amazonaws.com/plcfreshwater/\",\n",
" \"pondlevel\": \"https://hp-thingsboard.s3.amazonaws.com/pondlevel/\",\n",
" \"promagmbs\": \"https://hp-thingsboard.s3.amazonaws.com/promagmbs/\",\n",
" \"poc\": \"https://hp-thingsboard.s3.amazonaws.com/poc/\",\n",
" \"recycle_train\": \"https://hp-thingsboard.s3.amazonaws.com/recycle_train/\",\n",
" \"rigpump\": \"https://hp-thingsboard.s3.amazonaws.com/rigpump/\",\n",
" \"submonitor\": \"https://hp-thingsboard.s3.amazonaws.com/submonitor/\",\n",
" \"swdcontroller\": \"https://hp-thingsboard.s3.amazonaws.com/swdcontroller/\",\n",
" \"tankalarms\": \"https://hp-thingsboard.s3.amazonaws.com/tankalarms/\",\n",
" \"tanktransfer\": \"https://hp-thingsboard.s3.amazonaws.com/tanktransfer/\",\n",
" \"tenflowmeterskid\": \"https://hp-thingsboard.s3.amazonaws.com/tenflowmeterskid/\",\n",
" \"transferlite\": \"https://hp-thingsboard.s3.amazonaws.com/transferlite/\",\n",
" \"m1\": \"https://hp-thingsboard.s3.amazonaws.com/m1/\"\n",
" }\n",
" config = json.loads(config.replace(\"'\", '\"'))\n",
" for x in dict.keys(config):\n",
" if x == \"mainHP\":\n",
" config[x] = mainHPMapping.get(config[x].split(\"/\")[-2], \"bad_request\")\n",
" else:\n",
" config[x] = configMapping.get(x, \"bad_request\")\n",
" config = json.dumps(config).replace('\"', \"'\")\n",
" print(config)\n",
" \n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"client = boto3.client('dynamodb')\n",
"table = \"HPDeviceList\"\n",
"macs = ['C4:93:00:0C:68:F9']\n",
"for mac in macs:\n",
" resp = client.get_item(Key={'mac': {'S': mac}}, TableName=table)\n",
" oldconfig = resp[\"Item\"]['config']\n",
" print(oldconfig)\n",
" urls = convertToNewConfig(oldconfig)\n",
" newconfig = oldconfig.copy()\n",
" newconfig['S'] = urls\n",
" print(newconfig)\n",
" client.update_item(\n",
" TableName=table,\n",
" Key={'mac': {'S': mac}},\n",
" ExpressionAttributeNames={\"#C\": 'config'},\n",
" ExpressionAttributeValues={':c': newconfig},\n",
" ReturnValues='ALL_NEW',\n",
" UpdateExpression='SET #C = :c'\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"client.list_tables()\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Table': {'AttributeDefinitions': [{'AttributeName': 'mac',\n",
" 'AttributeType': 'S'}],\n",
" 'TableName': 'HPDeviceList',\n",
" 'KeySchema': [{'AttributeName': 'mac', 'KeyType': 'HASH'}],\n",
" 'TableStatus': 'ACTIVE',\n",
" 'CreationDateTime': datetime.datetime(2020, 6, 4, 13, 0, 51, 690000, tzinfo=tzlocal()),\n",
" 'ProvisionedThroughput': {'NumberOfDecreasesToday': 0,\n",
" 'ReadCapacityUnits': 5,\n",
" 'WriteCapacityUnits': 5},\n",
" 'TableSizeBytes': 100095,\n",
" 'ItemCount': 495,\n",
" 'TableArn': 'arn:aws:dynamodb:us-east-1:860246592755:table/HPDeviceList',\n",
" 'TableId': 'fdb15ece-4feb-4dca-ae90-909c9d31ca7d',\n",
" 'DeletionProtectionEnabled': False},\n",
" 'ResponseMetadata': {'RequestId': 'KJIR35CPC8J544NID1MP1R45NJVV4KQNSO5AEMVJF66Q9ASUAAJG',\n",
" 'HTTPStatusCode': 200,\n",
" 'HTTPHeaders': {'server': 'Server',\n",
" 'date': 'Thu, 09 Mar 2023 19:49:01 GMT',\n",
" 'content-type': 'application/x-amz-json-1.0',\n",
" 'content-length': '513',\n",
" 'connection': 'keep-alive',\n",
" 'x-amzn-requestid': 'KJIR35CPC8J544NID1MP1R45NJVV4KQNSO5AEMVJF66Q9ASUAAJG',\n",
" 'x-amz-crc32': '2354334289'},\n",
" 'RetryAttempts': 0}}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"client.describe_table(TableName=table)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"m1 = client.get_item(Key={'mac': {'S': \"C4:93:00:0C:68:F9\"}}, TableName=table)[\"Item\"]['config']['S']\n",
"piflow = client.get_item(Key={'mac': {'S': \"B2:78:EB:E7:83:45\"}}, TableName=table)[\"Item\"]['config']['S']\n",
"plcfreshwater = client.get_item(Key={'mac': {'S': \"00:00:05:00:00:08\"}}, TableName=table)[\"Item\"]['config']['S']"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'mainHP': 'https://hp-thingsboard.s3.amazonaws.com/mainHP/', 'm1': 'https://hp-thingsboard.s3.amazonaws.com/m1/', 'flowmonitor': 'https://hp-thingsboard.s3.amazonaws.com/flowmonitor/'}\n",
"{'mainHP': 'https://hp-thingsboard.s3.amazonaws.com/mainHPRPI/', 'PiFlow': 'https://hp-thingsboard.s3.amazonaws.com/PiFlow/'}\n",
"{'mainHP': 'https://hp-thingsboard.s3.amazonaws.com/mainHPPLCFRESH/', 'plcfreshwater': 'https://hp-thingsboard.s3.amazonaws.com/plcfreshwater/'}\n"
]
}
],
"source": [
"convertToNewConfig(m1)\n",
"convertToNewConfig(piflow)\n",
"convertToNewConfig(plcfreshwater)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "aws",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.0"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}