{"id":1050,"date":"2020-08-19T06:31:32","date_gmt":"2020-08-19T06:31:32","guid":{"rendered":"http:\/\/spiderwiz.org\/project\/?page_id=1050"},"modified":"2025-04-09T06:15:58","modified_gmt":"2025-04-09T06:15:58","slug":"lesson-14","status":"publish","type":"page","link":"https:\/\/spiderwiz.org\/project\/tutorial\/lesson-14\/","title":{"rendered":"Lesson 14: Monitor, Manage, Maintain and Control Your Applications with SpiderAdmin"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <a href=\"http:\/\/spideradmin.com\">SpiderAdmin<\/a> service was introduced in <a href=\"http:\/\/spiderwiz.org\/project\/tutorial\/lesson-3\/\">Lesson 3<\/a>.\nWe will now go thoroughly through its features and benefits. For the sake of\ncompleteness we repeat the introduction that was presented there.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If\nyou want your application to participate in the game then the first thing you\nhave to do is to include the SpiderAdmin dependency in your project.\nSpiderAdmin is a complimentary service that is not available on the <a href=\"https:\/\/repo1.maven.org\/\">Maven Central Repository<\/a>, therefore you need to define the Spiderwiz internal\nrepository in your project:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre>&lt;project&gt;\n  ...\n  &lt;repositories&gt;\n    &lt;repository&gt;\n      &lt;id&gt;spiderwiz-internal&lt;\/id&gt;\n      &lt;url&gt;http:\/\/spiderwiz.org\/repo&lt;\/url&gt;\n    &lt;\/repository&gt;\n  &lt;\/repositories&gt;\n  ...\n&lt;\/project&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">With\nthis in place you can specify the <code>spider-admin<\/code>\ndependency:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre>&lt;dependency&gt;\n    &lt;groupId&gt;org.spiderwiz&lt;\/groupId&gt;\n    &lt;artifactId&gt;spiderwiz-admin&lt;\/artifactId&gt;\n    &lt;version&gt;2.2&lt;\/version&gt;\n&lt;\/dependency&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Non-Maven\nusers can download <code>spiderwiz-admin.jar<\/code>\ndirectly by <a href=\"http:\/\/spiderwiz.org\/repo\/org\/spiderwiz\/spiderwiz-admin\/2.2\/spiderwiz-admin-2.2.jar\">this link<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As\nmentioned above, this needs to be included in <strong>every<\/strong> application that you want to be governed by SpiderAdmin.\nHowever, it is enough to connect <strong>only\none<\/strong> application to the service, and it will be used as a \u201chole\u201d through\nwhich the \u201ccolonoscope\u201d penetrates the entire service-mesh and administers\nevery SpiderAdmin-enabled application. The demonstration hereinafter\nassumes that the \u201chole\u201d\nis <em>My Hub<\/em>. It works as follows:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First,\nyou must be a registered SpiderAdmin user. Go <a href=\"http:\/\/spiderwiz.org\/project\/spideradmin\/\">here<\/a> and use the panel on the right of the screen to register, or log\nin if you have done it already. If you prefer not to register at this moment\nbut still want to taste the experience, you can use the predefined \u201ctest\u201d user\nwith \u201ctest\u201d also as the password. Once logged in, you will be redirected to the\nSpiderAdmin service page. If you have not connected yet any application to the\nservice (and if you use the \u201ctest\u201d account then no other user of that account\nhas), you will see a page like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"477\" src=\"http:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-3-1-1-1024x477.png\" alt=\"\" class=\"wp-image-1078\" srcset=\"https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-3-1-1-1024x477.png 1024w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-3-1-1-300x140.png 300w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-3-1-1-768x358.png 768w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-3-1-1.png 1278w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Follow\nthe instructions on the page and copy the displayed configuration property to <code>hub.conf<\/code>, which will now look like this:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre>[log folder]Logs\n[consumer server-1]websocket;ping-rate=30\n[producer server-1]websocket;ping-rate=30\n[consumer server-2]port=10001\n[spideradmin]W6WEMWZEbCRImAMvgf2M2Xtt3tvH\n[hub mode]yes\n[mail system]smtp;server=smtp.gmail.com;user=tester@spiderwiz.org;pwd=dumptrump;port=465;ssl=true\n[from address]My Hub Alerts&lt;alert@spiderwiz.org&gt;\n[to email]Spiderwiz Administrator&lt;spiderwiz.admin@gmail.com&gt;\n[to exception email]Spiderwiz Programmer&lt;spiderwiz.geek@gmail.com&gt;<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Restart\n<em>My Hub<\/em> and all the other\napplications. Soon the SpiderAdmin service page will refresh to show something\nlike this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"554\" src=\"http:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-2-1024x554.png\" alt=\"\" class=\"wp-image-1098\" srcset=\"https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-2-1024x554.png 1024w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-2-300x162.png 300w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-2-768x416.png 768w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-2.png 1273w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s\ndwell on what we see here. The \u201cApplications\u201d table shows all the active\napplications, while the \u201cProducers\u201d table shows <em>My Hub<\/em> that connects directly. You can now surf through the entire\nservice mesh by clicking from application to application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We\nremind you that the only application that connects to the service directly is <em>My Hub<\/em>. It means that the other\napplications do not need to do it, and actually they do not even need to have\nInternet access. In terms of cloud computing, your application network can span across\ndifferent clouds with different protection attributes. The only requirements\nare that they will be connected somehow, the connection will be configured by\nSpiderwiz and at least one of them will be configured to connect to\nSpiderAdmin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note that SpiderAdmin is not a\nfull-fledged management system such as <a href=\"https:\/\/istio.io\/\">Istio<\/a>, for instance. It\ndoes not deal with security, resource control, short circuits and some other\ncommonly available management features. On the other hand, unlike common\nmanagement systems that require full access to the managed applications,\nSpiderAdmin can monitor, configure, download log files, control and even\nupgrade applications that are behind a firewall.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Another unique aspect of\nSpiderAdmin is that it controls and monitors the <strong>logical<\/strong> data paths between applications. With SpiderAdmin you can\nsee not only <strong>how<\/strong> data moves between\napplications, but also <strong>what<\/strong> moves\nbetween them. And you can <a href=\"http:\/\/spiderwiz.org\/project\/tutorial\/lesson-18\/\">customize SpiderAdmin<\/a>\nto expose any information that you need about the execution of your\napplications. In other words, if common management systems are supposed to\nensure that your applications are deployed and function the way you want them\nto, SpiderAdmin helps you to ensure that they do what you expect them to do.\nSpiderAdmin and management systems can peacefully exist side by side with quite\na small overlap between them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Having clarified that point, let\u2019s\ndelve into various SpiderAdmin features.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As you can see in the screenshot\nabove, SpiderAdmin displays information about the networked applications, their\nstatus and the traffic between them. With the respect to the latter, Spiderwiz\nshows statistics of both physical traffic (in the \u201cCompressed input\u201d column) \u2013\ncounting the actual number of bytes on the line, and logical traffic (in the\n\u201cUncompressed input\u201d column) \u2013 measuring the volume of the full data that the\nphysical bytes represent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every application name is a link\nto the application page. Try clicking on \u201c<em>Chat\nRoom Bridge<\/em>\u201d and you will see something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"578\" src=\"http:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-3-1024x578.png\" alt=\"\" class=\"wp-image-1099\" srcset=\"https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-3-1024x578.png 1024w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-3-300x169.png 300w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-3-768x434.png 768w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-3.png 1277w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You see a \u201cServer information\u201d table that shows information\nabout the machine that runs the current application (<em>Chat Room Bridge<\/em>), an \u201cApplications\u201d table that shows all the\napplications that interact with the current application, an \u201cImport channels\u201d\ntable that shows the import-export channels that are interfaced by the current\napplication and a \u201cConsumers\u201d application that shows <em>My Hub<\/em>, which is the only application that is connected to the\ncurrent application directly, in this case as a consumer. If there were direct\nproducers you would also see a \u201cProducers\u201d table.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note that the applications listed in the \u201cApplications\u201d\ntable are not necessarily connected directly by the current application. They\nare there because they exchange Data Objects with the current application.\nThat&#8217;s why <em>My Hub<\/em> is not in the\n\u201cApplications\u201d table, as it is only a hub that Data Objects go through.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s start now with some action. If you click the \u201cUpdate\nConfiguration\u201d button at the top-left of the page, you should see something\nlike this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"271\" src=\"http:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-4-1024x271.png\" alt=\"\" class=\"wp-image-1100\" srcset=\"https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-4-1024x271.png 1024w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-4-300x79.png 300w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-4-768x203.png 768w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-4.png 1275w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You see the configuration table of the current application.\nYou can modify any property (except <em>application\nuuid<\/em>) and click the <span class=\"boldgreen\">\u2713<\/span>\nsymbol on the top-right of the pop-up window. The changes will have an\nimmediate effect. If, for instance, you change anything in <code>producer-1<\/code> or <code>import-1<\/code>,\nthen the referred channel is disconnected and reconnected with the new\nparameters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Try clicking the next button \u2013 \u201cView Logs\u201d. You get\nsomething like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"300\" src=\"http:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-5-1024x300.png\" alt=\"\" class=\"wp-image-1101\" srcset=\"https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-5-1024x300.png 1024w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-5-300x88.png 300w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-5-768x225.png 768w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-5.png 1275w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You see the listing of the configured \u201clog folder\u201d. You can\nclick on subfolder names to get their listing. When you get to a listing that\nincludes log files, you can click on the file name to download it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you prefer to access log files directly, you can use the\n\u201cFlush Logs\u201d button to flush all logs files before you access them. There is no\nneed to do that if you download log files through the \u201cView Logs\u201d button\nbecause this is done automatically before a file is downloaded.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Using the \u201cMaintenance\u201d button you can restart your\napplication and even upgrade it (without having access to the machine that runs\nthe application!). To make it work you need to ensure that your application is\nconfigured properly for activating the right \u201crestart\u201d and \u201cdeploy\u201d commands,\nas follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>In the configuration file, configure \u201crestart command\u201d to specify the command that\nSpiderAdmin needs to use in order to restart the application, as a comma\nseparated list of arguments to use when instantiating <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/13\/docs\/api\/java.base\/java\/lang\/ProcessBuilder.html\">ProcessBuilder<\/a>. The default value is &#8220;<code>cmd,\/c,restart.bat<\/code>&#8220;, i.e. The\nWindows arguments for running &#8220;<code>restart.bat<\/code>&#8221;\nin the application&#8217;s root folder.<\/li><li>Configure also \u201cdeploy command\u201d to specify the command that SpiderAdmin needs to use in\norder to deploy the application, as a comma separated list of arguments to use\nwhen instantiating <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/13\/docs\/api\/java.base\/java\/lang\/ProcessBuilder.html\">ProcessBuilder<\/a>. To this list, SpiderAdmin\nwill add the name of the deployment file as supplied by the user, which is supposed to be\na parameter in the batch file that is activated by this command . The default\nvalue is &#8220;<code>cmd,\/c,deploy.bat<\/code>&#8220;,\ni.e. The Windows arguments for running &#8220;<code>deploy.bat<\/code>&#8221; in the application&#8217;s root folder.<\/li><li>Configure \u201cdeploy folder\u201d to specify the folder to which SpiderAdmin copies deployment\nfiles for this application. The default is <code>Deploy<\/code>\nunder the application&#8217;s root folder.<\/li><li>Create the necessary batch files for performing restart\nand deploy.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To demonstrate the use of the \u201cMaintenance\u201d button we assume\nthat <em>Chat Room Bridge<\/em>, whose page we\nare watching now, is installed as a Windows service (for example using <a href=\"https:\/\/wrapper.tanukisoftware.com\/doc\/english\/qna-service.html\">Tanuki\u2019s Java Service Wrapper<\/a>) named <code>chatroombridge<\/code>. We use the default\nvalues of the configuration properties mentioned above.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To enable application restart we create a <code>restart.bat<\/code> file in the application\u2019s\nroot folder that looks like this:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre>net start chatroombridge\nnet stop chatroombridge<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">For application deployment we first need to figure out the deployment file type . In the case of a web application, this would normally be a <code>war<\/code> file. Our example here is a command-line Java application, so we assume that all the files comprising the executable and its libraries are packed into one <code>zip<\/code> file (for example using the <a href=\"https:\/\/medium.com\/@kasunpdh\/using-the-maven-assembly-plugin-to-build-a-zip-distribution-5cbca2a3b052\">Maven Assembly Plugin to build a ZIP distribution<\/a>). Therefore we create a <code>deploy.bat<\/code> file in the application\u2019s root folder that looks like this:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre>net start chatroombridge\nunzip deploy%1 .\nnet stop chatroombridge<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">This batch file stops the <code>chatroombridge<\/code> service, unzips the file that is under the <code>deploy<\/code> folder whose name is given as a\nparameter and restarts the service. We assume that \u201cunzip.exe\u201d is available and\nspecified in the PATH system variable. If this is not the case you would need\nto provide another command.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now everything is in place and we can see how it works in\nSpiderAdmin. When you click the \u201cMaintenance\u201d button it pops up a sub-menu like\nthis:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"287\" height=\"233\" src=\"http:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-6.png\" alt=\"\" class=\"wp-image-1104\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The first option is \u201cRestart Service\u201d. Click it and the\nrestart procedure we have just described will execute.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second option is \u201cUpload Deploy Package\u201d. Clicking it\npops up a window like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"907\" height=\"259\" src=\"http:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-7.png\" alt=\"\" class=\"wp-image-1105\" srcset=\"https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-7.png 907w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-7-300x86.png 300w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-7-768x219.png 768w\" sizes=\"auto, (max-width: 907px) 100vw, 907px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You have one button to choose a file from your local disk\nfor uploading (the distribution <code>zip<\/code>\nfile in our case), and another button to choose the upload location in your\nuser\u2019s area on the&nbsp; SpiderAdmin service.\nHaving chosen the relevant data, click the <span class=\"boldgreen\">\u2713<\/span> symbol\non the top-right of the pop-up window, and the selected deployment file will\nupload to its place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The third option in the \u201cMaintenance\u201d sub-menu is \u201cTransfer\nDeploy Package\u201d. Click it and it will take you to the folder list of your area\non the SpiderAdmin service. Click the file you want to deploy and you will see\nsomething like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"187\" src=\"http:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-8.png\" alt=\"\" class=\"wp-image-1106\" srcset=\"https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-8.png 865w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-8-300x65.png 300w, https:\/\/spiderwiz.org\/project\/wp-content\/uploads\/2020\/08\/lesson-14-8-768x166.png 768w\" sizes=\"auto, (max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Once file transfer completes, click \u201cMaintenance\u201d again and select the last option \u2013 \u201cDeploy Package\u201d. This pops up a window that lets you choose the file you want to deploy from the folder configured as \u201cdeploy folder\u201d in the application that you want to upgrade. This activates the deploy batch file that was mentioned above with the file name as the parameter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See more about SpiderAdmin in <a href=\"http:\/\/spiderwiz.org\/project\/tutorial\/lesson-18\/\">Lesson 18<\/a>.\nIn the <a href=\"http:\/\/spiderwiz.org\/project\/tutorial\/lesson-15\/\">next\nlesson<\/a> we will start learning how to extend Spiderwiz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SpiderAdmin is an administration service that comes free with every Spiderwiz-based application. Learn how to get the most out of it.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":145,"menu_order":14,"comment_status":"closed","ping_status":"closed","template":"tutorial-child.php","meta":{"footnotes":""},"class_list":["post-1050","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/spiderwiz.org\/project\/wp-json\/wp\/v2\/pages\/1050","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spiderwiz.org\/project\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spiderwiz.org\/project\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spiderwiz.org\/project\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spiderwiz.org\/project\/wp-json\/wp\/v2\/comments?post=1050"}],"version-history":[{"count":16,"href":"https:\/\/spiderwiz.org\/project\/wp-json\/wp\/v2\/pages\/1050\/revisions"}],"predecessor-version":[{"id":1297,"href":"https:\/\/spiderwiz.org\/project\/wp-json\/wp\/v2\/pages\/1050\/revisions\/1297"}],"up":[{"embeddable":true,"href":"https:\/\/spiderwiz.org\/project\/wp-json\/wp\/v2\/pages\/145"}],"wp:attachment":[{"href":"https:\/\/spiderwiz.org\/project\/wp-json\/wp\/v2\/media?parent=1050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}