@@ -339,6 +339,8 @@ def _replace_config_values(config_data, replace_file):
339
339
new_output .append (f"{ name } = { new_value } " )
340
340
else :
341
341
new_output .append (line )
342
+ # Make trailing new line
343
+ new_output .append ("" )
342
344
return "\n " .join (new_output )
343
345
344
346
def _config_from_example (self , protocol_version , ip = None , replace_toml = None ):
@@ -821,9 +823,6 @@ def get_trusted_hash(self):
821
823
help = "Protocol version for chainspec to verify same network" ,
822
824
required = False ,
823
825
default = "1_0_0" )
824
- parser .add_argument ("--block" ,
825
- help = "Block number to use (latest if omitted)" ,
826
- required = False )
827
826
828
827
args = parser .parse_args (sys .argv [2 :])
829
828
@@ -850,24 +849,87 @@ def get_trusted_hash(self):
850
849
if last_added_block_info is None :
851
850
print (f"No last_added_block_info in { args .ip } status. Node is not in sync and will not be used." )
852
851
exit (1 )
853
- # If no block, getting latest so store now
854
852
block_hash = last_added_block_info ["hash" ]
855
- if args .block :
856
- try :
857
- block = self ._rpc_get_block (server = args .ip , block_height = args .block )
858
- block_hash = block ["block" ]["hash" ]
859
- except Exception as e :
860
- if "timed out" in str (e ):
861
- print (f"RPC call timed out, either { args .ip } has RPC port blocked or is not in sync." )
862
- else :
863
- print (f"Error calling RPC for { args .ip } ." )
864
- exit (1 )
865
853
print (f"{ block_hash } " )
866
854
867
855
def get_ip (self ):
868
856
""" Get external IP of node. Can be used to test code used for automatically filling IP
869
857
or to check if you need to update the IP in your config.toml file. """
870
858
print (self ._get_external_ip ())
871
859
860
+ def node_log (self ):
861
+ """ Get nodes current logs. Same as 'cat /var/log/casper-node.log` with grep added if using arguments
862
+ and tail if following. """
863
+ parser = argparse .ArgumentParser (description = self .node_log .__doc__ ,
864
+ usage = f"{ self .SCRIPT_NAME } node_log [--err] [--warn] [--follow]" )
865
+ parser .add_argument ("--err" ,
866
+ help = "Return log lines with level ERR" ,
867
+ action = 'store_true' ,
868
+ required = False )
869
+ parser .add_argument ("--warn" ,
870
+ help = "Return log lines with level WARN" ,
871
+ action = 'store_true' ,
872
+ required = False )
873
+ parser .add_argument ("--follow" ,
874
+ help = "Follow log file as lines are added" ,
875
+ action = 'store_true' ,
876
+ required = False )
877
+ args = parser .parse_args (sys .argv [2 :])
878
+
879
+ grep_args = ""
880
+ grep_args += " -e '\" level\" :\" ERR\" '" if args .err else ""
881
+ grep_args += " -e '\" level\" :\" WARN\" '" if args .warn else ""
882
+
883
+ grep = f" | grep { grep_args } " if len (grep_args ) > 0 else ""
884
+
885
+ main_cmd = "tail -f" if args .follow else "cat"
886
+
887
+ os .system (f"{ main_cmd } /var/log/casper/casper-node.log { grep } " )
888
+
889
+ @staticmethod
890
+ def node_error_log ():
891
+ """ Get nodes current teardown error log. Same as 'cat /var/log/casper-node.stderr.log` """
892
+ os .system ("cat /var/log/casper/casper-node.stderr.log" )
893
+
894
+ @staticmethod
895
+ def sidecar_status ():
896
+ """ Get systemd status of casper-sidecar. Same as `systemctl status casper-sidecar` """
897
+ # using op.popen to stop hanging return to terminate
898
+ result = os .popen ("systemctl status casper-sidecar" )
899
+ print (result .read ())
900
+
901
+ def sidecar_log (self ):
902
+ """ Get log from casper-sidecar. Same as `journalctl -u casper-sidecar --no-pager` """
903
+ parser = argparse .ArgumentParser (description = self .sidecar_log .__doc__ ,
904
+ usage = f"{ self .SCRIPT_NAME } sidecar_log [--follow]" )
905
+ parser .add_argument ("--follow" ,
906
+ help = "Follow log file as lines are added" ,
907
+ action = 'store_true' ,
908
+ required = False )
909
+
910
+ args = parser .parse_args (sys .argv [2 :])
911
+ follow = "--follow" if args .follow else ""
912
+ os .system (f"journalctl -u casper-sidecar --no-pager { follow } " )
913
+
914
+ def sidecar_stop (self ):
915
+ """ Stop casper-sidecar. Use 'sudo'.
916
+ Same as `sudo systemctl stop casper-sidecar` """
917
+ self ._verify_root_user ()
918
+ os .system ("sudo systemctl stop casper-sidecar" )
919
+
920
+ def sidecar_start (self ):
921
+ """ Start casper-sidecar. Use 'sudo'.
922
+ Same as `sudo systemctl start casper-sidecar` """
923
+ self ._verify_root_user ()
924
+ os .system ("sudo systemctl start casper-sidecar" )
925
+
926
+ def sidecar_restart (self ):
927
+ """ Restart casper-sidecar. Use 'sudo'. """
928
+ self ._verify_root_user ()
929
+ self .sidecar_stop ()
930
+ time .sleep (0.5 )
931
+ self .sidecar_start ()
932
+
933
+
872
934
if __name__ == '__main__' :
873
935
NodeUtil ()
0 commit comments