Jump to content

Track Your Fortunastake Yourself (masternode)


buzzkillb
 Share

Recommended Posts

This is a lot easier than it looks, and a super easy way to watch the status of your Fortunastakes (masternodes) from anything, including a raspberry pi.

If you have multiple fortunastakes, somehow you want to get each json of your fortunastake status onto a single nginx server. Depends a lot on how to go about this.

I am using blocknotify on the daemon to create 1.json and 2.json files, also grab the current block from blocknotify send that to block.txt, sending these files to /var/www/html and then making sure permissions are what I want.

Install nginx on your ubuntu you will be using.

sudo apt install nginx

Verify that works by going to your ip address. I am doing everything on a local network, this is gonna vary, but if its working you should see the default nginx welcome screen.

denarius.conf (change the full path to your server, maybe /home/username/status.sh)

blocknotify=/root/status.sh

status.sh (creates block.txt and iterates through 2 fortunastakes on same server at directories /root/D01 and /root/D02, i<3 is +1 of the number you are running if on same server)

#!/bin/bash
denariusd -datadir=/root/D01 getblockcount > /var/www/html/block.txt
#stop and start 01-02
for ((i=1; i<3; i++))
do
echo "$i"
denariusd -datadir=/root/D0$i fortunastake status > /var/www/html/$i.json
chmod -R 644 /var/www/html/*
done

Restart the daemon and on the first new block status.sh will run and send the files into /var/www/html. Double check the directory has some files after running for a bit.

Basically you want to get each of your Fortunastakes json files into your /var/www/html, maybe even using scp from multiple vps's. Just make sure to label them 1.json 2.json 3.json and so forth for how we will iterate through these json files.

example of using scp command way to do it, you want ssh-key login if using scp

scp 2.json [email protected]:/var/www/html/2.json

Create 4 files we will use to create the website, stick them in /var/www/html folder

style.css

body
{
background: #020000;
font-family: 'Raleway', sans-serif;
font-size:16px;
}

.row {
  display: flex;
  flex-wrap: wrap;
}

.col {
  flex: 1 0 18%; /* The important bit. This percentage decides your columns. 
 The percent can be px. It just represents your minimum starting width.
  */
  margin: 0.5px;
  background: #333333;
  height: 30px;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* visited link */
a:visited {
  color: white;
}

/* unvisited link */
a:link {
  color: white;
}

fortunastake.js

fetchData = () => {

  const urls = [
    "1.json", "2.json"
  ];

  const allRequests = urls.map(url => 
    fetch(url).then(response => response.json())
  );

  return Promise.all(allRequests);
};

fetchData().then(arrayOfResponses => {
for (index = 0; index < arrayOfResponses.length; index++) { 
    window.FS = '<div class="row">' + 
                '<div class="col">FS' + [index+1] + '</div>' + 
                '<div class="col">' + (arrayOfResponses[index].local.service) + '</div>' + 
                '<div class="col">' + '<a href="https://www.coinexplorer.net/D/address/' + (arrayOfResponses[index].local.payment_address)  + '">' + (arrayOfResponses[index].local.payment_address) + '</a></div>' +
                '<div class="col">' + (arrayOfResponses[index].local.network_status) + '</div>' +
                '<div class="col">' + parseFloat((arrayOfResponses[index].local.earnings) / 100000000).toFixed(8) + '</div>'
                + '</div>';
    console.log(window.FS)
    $("#fsnumber").append(window.FS).hide().fadeIn("fast");

}
}
);

block.js

fetch('block.txt', {mode: 'no-cors'})
  .then(function(response) {
    return response.json();
  })
  .then(function(data) {
    if (data)
      console.log(data);
        $('#block').html("");
        $("#block").append(data).hide().fadeIn("slow");
  })
  .catch(function(err) {
    console.log(err);
  });

var listen = setInterval(function() {

    fetch('block.txt', {mode: 'no-cors'})
      .then(function(response) {
        return response.json();
      })
      .then(function(data) {
        if (data)
          console.log(data);
            $('#block').html("");
            $("#block").append(data).hide().fadeIn("slow");
      })
      .catch(function(err) {
        console.log(err);
      });

}, 30000);//30 second

index.html

<html>
  <head>
    <title>FortunaStake List</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.min.css">
    <script type="text/javascript" src="block.js?version=0.1337"></script>
    <script type="text/javascript" src="fortunastake.js?version=0.1337"></script>
    <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="style.css?version=0.1337">

  </head>

<body>
<div class="row">
  <div class="col">FortunaStake List</div>
</div>
<div class="row">
  <div class="col">Block #<div id="block"; style="display:inline-block"; class="animated rubberBand"></div></div>
</div>

  <div id="fsnumber"></div>


</body>
</html>

Go back to your nginx IP and force refresh by using shift+ctrl+r and now you can start watching your Fortunastake Status from wherever.

This uses a 5 column flex grid and has clickable link to coinexplorer per address and auto refreshes the block count every 30 seconds. This does not autorefresh the FS list though.

FS # | IP Address | FS Address | Status | Round Earnings

fs-list.thumb.jpg.7e4a323dc1b7c54a85d1a65cecfed86d.jpg

What it shows when one goes down from the list. This particular one lost sync on the daemon, and still shows active as I restarted the QT. Was about to get bumped off to inactive and REKT.

image.thumb.png.35083b0c7d2ffab2a1b1855cb4d26ef3.png

Link to comment
Share on other sites

What the index.html looks like to add the row header to the above.

index.html

<html>
  <head>
    <title>FortunaStake List</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.min.css">
    <script type="text/javascript" src="block.js?version=0.1337"></script>
    <script type="text/javascript" src="fortunastake.js?version=0.1337"></script>
    <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="style.css?version=0.1337">

  </head>

<body>
<div class="row">
  <div class="col">FortunaStake List</div>
</div>
<div class="row">
  <div class="col">Block #<div id="block"; style="display:inline-block"; class="animated rubberBand"></div></div>
</div>
<div class="row">
  <div class="col">FS #</div>
  <div class="col">IP Address</div>
  <div class="col">Address</div>
  <div class="col">Status</div>
  <div class="col">Earnings</div>
</div>

  <div id="fsnumber"></div>


</body>
</html>

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...