mirror of https://github.com/statping/statping
1858 lines
1.5 MiB
HTML
1858 lines
1.5 MiB
HTML
![]() |
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>Coverage Report</title>
|
||
|
|
||
|
<style type="text/css">
|
||
|
body { background-color: #fff; }
|
||
|
table {
|
||
|
margin-left: 10px;
|
||
|
border-collapse: collapse;
|
||
|
}
|
||
|
td {
|
||
|
background-color: #fff;
|
||
|
padding: 2px;
|
||
|
}
|
||
|
table.overview td {
|
||
|
padding-right: 20px;
|
||
|
}
|
||
|
td.percent, td.linecount { text-align: right; }
|
||
|
div.package, #totalcov {
|
||
|
color: #fff;
|
||
|
background-color: #375eab;
|
||
|
font-size: 16px;
|
||
|
font-weight: bold;
|
||
|
padding: 10px;
|
||
|
border-radius: 5px 5px 5px 5px;
|
||
|
}
|
||
|
div.package, #totalcov {
|
||
|
float: right;
|
||
|
right: 10px;
|
||
|
}
|
||
|
#totalcov {
|
||
|
top: 10px;
|
||
|
position: relative;
|
||
|
background-color: #fff;
|
||
|
color: #000;
|
||
|
border: 1px solid #375eab;
|
||
|
clear: both;
|
||
|
}
|
||
|
#summaryWrapper {
|
||
|
position: fixed;
|
||
|
top: 10px;
|
||
|
float: right;
|
||
|
right: 10px;
|
||
|
|
||
|
}
|
||
|
span.packageTotal {
|
||
|
float: right;
|
||
|
color: #000;
|
||
|
}
|
||
|
#doctitle {
|
||
|
background-color: #fff;
|
||
|
font-size: 24px;
|
||
|
margin-top: 20px;
|
||
|
margin-left: 10px;
|
||
|
color: #375eab;
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
#about {
|
||
|
margin-left: 18px;
|
||
|
font-size: 10px;
|
||
|
}
|
||
|
table tr:last-child td {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
.functitle, .funcname {
|
||
|
text-align: center;
|
||
|
font-size: 20px;
|
||
|
font-weight: bold;
|
||
|
color: 375eab;
|
||
|
}
|
||
|
.funcname {
|
||
|
text-align: left;
|
||
|
margin-top: 20px;
|
||
|
margin-left: 10px;
|
||
|
margin-bottom: 20px;
|
||
|
padding: 2px 5px 5px;
|
||
|
background-color: #e0ebf5;
|
||
|
}
|
||
|
table.listing {
|
||
|
margin-left: 10px;
|
||
|
}
|
||
|
table.listing td {
|
||
|
padding: 0px;
|
||
|
font-size: 12px;
|
||
|
background-color: #eee;
|
||
|
vertical-align: top;
|
||
|
padding-left: 10px;
|
||
|
border-bottom: 1px solid #fff;
|
||
|
}
|
||
|
table.listing td:first-child {
|
||
|
text-align: right;
|
||
|
font-weight: bold;
|
||
|
vertical-align: center;
|
||
|
}
|
||
|
table.listing tr.miss td {
|
||
|
background-color: #FFBBB8;
|
||
|
}
|
||
|
table.listing tr:last-child td {
|
||
|
font-weight: normal;
|
||
|
color: #000;
|
||
|
}
|
||
|
table.listing tr:last-child td:first-child {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
.info {
|
||
|
margin-left: 10px;
|
||
|
}
|
||
|
.info code {
|
||
|
}
|
||
|
pre { margin: 1px; }
|
||
|
pre.cmd {
|
||
|
background-color: #e9e9e9;
|
||
|
border-radius: 5px 5px 5px 5px;
|
||
|
padding: 10px;
|
||
|
margin: 20px;
|
||
|
line-height: 18px;
|
||
|
font-size; 14px;
|
||
|
}
|
||
|
a {
|
||
|
text-decoration: none;
|
||
|
color: #375eab;
|
||
|
}
|
||
|
a:hover { text-decoration: underline; }
|
||
|
p { margin-left: 10px; }
|
||
|
</style>
|
||
|
|
||
|
</head>
|
||
|
<body>
|
||
|
<div id="doctitle">Coverage Report</div>
|
||
|
<div id="about">Generated on 05 Oct 18 23:37 -0700 with <a href="https://github.com/matm/gocov-html">gocov-html</a></div><div class="funcname">Report Overview</div><table class="overview">
|
||
|
<tr id="s_pkg_github.com/hunterlong/statup/cmd"><td><code><a href="#pkg_github.com/hunterlong/statup/cmd">github.com/hunterlong/statup/cmd</a></code></td><td class="percent"><code>31.37%</code></td><td class="linecount"><code>48/153</code></td></tr>
|
||
|
<tr id="s_pkg_github.com/hunterlong/statup/core"><td><code><a href="#pkg_github.com/hunterlong/statup/core">github.com/hunterlong/statup/core</a></code></td><td class="percent"><code>52.31%</code></td><td class="linecount"><code>487/931</code></td></tr>
|
||
|
<tr id="s_pkg_github.com/hunterlong/statup/core/notifier"><td><code><a href="#pkg_github.com/hunterlong/statup/core/notifier">github.com/hunterlong/statup/core/notifier</a></code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>152/209</code></td></tr>
|
||
|
<tr id="s_pkg_github.com/hunterlong/statup/handlers"><td><code><a href="#pkg_github.com/hunterlong/statup/handlers">github.com/hunterlong/statup/handlers</a></code></td><td class="percent"><code>64.61%</code></td><td class="linecount"><code>617/955</code></td></tr>
|
||
|
<tr id="s_pkg_github.com/hunterlong/statup/notifiers"><td><code><a href="#pkg_github.com/hunterlong/statup/notifiers">github.com/hunterlong/statup/notifiers</a></code></td><td class="percent"><code>7.14%</code></td><td class="linecount"><code>18/252</code></td></tr>
|
||
|
<tr id="s_pkg_github.com/hunterlong/statup/plugin"><td><code><a href="#pkg_github.com/hunterlong/statup/plugin">github.com/hunterlong/statup/plugin</a></code></td><td class="percent"><code>33.33%</code></td><td class="linecount"><code>1/3</code></td></tr>
|
||
|
<tr id="s_pkg_github.com/hunterlong/statup/source"><td><code><a href="#pkg_github.com/hunterlong/statup/source">github.com/hunterlong/statup/source</a></code></td><td class="percent"><code>77.71%</code></td><td class="linecount"><code>136/175</code></td></tr>
|
||
|
<tr id="s_pkg_github.com/hunterlong/statup/utils"><td><code><a href="#pkg_github.com/hunterlong/statup/utils">github.com/hunterlong/statup/utils</a></code></td><td class="percent"><code>55.29%</code></td><td class="linecount"><code>115/208</code></td></tr>
|
||
|
<tr><td><code>Report Total</code></td><td class="percent"><code>54.54%</code></td><td class="linecount"><code>1574/2886</code></td></tr>
|
||
|
</table>
|
||
|
<div id="pkg_github.com/hunterlong/statup/cmd" class="funcname">Package Overview: github.com/hunterlong/statup/cmd <span class="packageTotal">31.37%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/cmd</code> package. It
|
||
|
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/cmd | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
|
||
|
<tr id="s_fn_HelpEcho"><td><code><a href="#fn_HelpEcho">HelpEcho(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/cli.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>17/17</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_LoadDotEnvs"><td><code><a href="#fn_LoadDotEnvs">LoadDotEnvs(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
|
||
|
<tr id="s_fn_CatchCLI"><td><code><a href="#fn_CatchCLI">CatchCLI(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/cli.go</code></td><td class="percent"><code>44.26%</code></td><td class="linecount"><code>27/61</code></td></tr>
|
||
|
<tr id="s_fn_main"><td><code><a href="#fn_main">main(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/22</code></td></tr>
|
||
|
<tr id="s_fn_RunOnce"><td><code><a href="#fn_RunOnce">RunOnce(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/cli.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/17</code></td></tr>
|
||
|
<tr id="s_fn_mainProcess"><td><code><a href="#fn_mainProcess">mainProcess(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/14</code></td></tr>
|
||
|
<tr id="s_fn_CheckGithubUpdates"><td><code><a href="#fn_CheckGithubUpdates">CheckGithubUpdates(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/cli.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/10</code></td></tr>
|
||
|
<tr id="s_fn_parseFlags"><td><code><a href="#fn_parseFlags">parseFlags(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_ForEachPlugin"><td><code><a href="#fn_ForEachPlugin">ForEachPlugin(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_LoadPlugins"><td><code><a href="#fn_LoadPlugins">LoadPlugins(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/0</code></td></tr>
|
||
|
<tr><td colspan="2"><code>github.com/hunterlong/statup/cmd</code></td><td class="percent"><code>31.37%</code></td><td class="linecount"><code>48/153</code></td></tr>
|
||
|
</table>
|
||
|
|
||
|
<div class="funcname" id="fn_HelpEcho">func HelpEcho</div><div class="info"><a href="#s_fn_HelpEcho">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/cli.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>152</td><td><code><pre>func HelpEcho() {</pre></code></td></tr><tr><td>153</td><td><code><pre> fmt.Printf("Statup v%v - Statup.io\n", VERSION)</pre></code></td></tr><tr><td>154</td><td><code><pre> fmt.Printf("A simple Application Status Monitor that is opensource and lightweight.\n")</pre></code></td></tr><tr><td>155</td><td><code><pre> fmt.Printf("Commands:\n")</pre></code></td></tr><tr><td>156</td><td><code><pre> fmt.Println(" statup - Main command to run Statup server")</pre></code></td></tr><tr><td>157</td><td><code><pre> fmt.Println(" statup version - Returns the current version of Statup")</pre></code></td></tr><tr><td>158</td><td><code><pre> fmt.Println(" statup run - Check all services 1 time and then quit")</pre></code></td></tr><tr><td>159</td><td><code><pre> fmt.Println(" statup test plugins - Test all plugins for required information")</pre></code></td></tr><tr><td>160</td><td><code><pre> fmt.Println(" statup assets - Dump all assets used locally to be edited.")</pre></code></td></tr><tr><td>161</td><td><code><pre> fmt.Println(" statup sass - Compile .scss files into the css directory")</pre></code></td></tr><tr><td>162</td><td><code><pre> fmt.Println(" statup env - Show all environment variables being used for Statup")</pre></code></td></tr><tr><td>163</td><td><code><pre> fmt.Println(" statup export - Exports the index page as a static HTML for pushing")</pre></code></td></tr><tr><td>164</td><td><code><pre> fmt.Println(" statup update - Attempts to update to the latest version")</pre></code></td></tr><tr><td>165</td><td><code><pre> fmt.Println(" statup help - Shows the user basic information about Statup")</pre></code></td></tr><tr><td>166</td><td><code><pre> fmt.Printf("Flags:\n")</pre></code></td></tr><tr><td>167</td><td><code><pre> fmt.Println(" -ip 127.0.0.1 - Run HTTP server on specific IP address (default: localhost)")</pre></code></td></tr><tr><td>168</td><td><code><pre> fmt.Println(" -port 8080 - Run HTTP server on Port (default: 8080)")</pre></code></td></tr><tr><td>169</td><td><code><pre> fmt.Println("Give Statup a Star at https://github.com/hunterlong/statup")</pre></code></td></tr><tr><td>170</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>39</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>40</td><td><code><pre> core.VERSION = VERSION</pre></code></td></tr><tr><td>41</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_LoadDotEnvs">func LoadDotEnvs</div><div class="info"><a href="#s_fn_LoadDotEnvs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>86</td><td><code><pre>func LoadDotEnvs() error {</pre></code></td></tr><tr><td>87</td><td><code><pre> err := godotenv.Load()</pre></code></td></tr><tr><td>88</td><td><code><pre> if err == nil {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> utils.Log(1, "Environment file '.env' Loaded")</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> usingEnv = true</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr><td>92</td><td><code><pre> return err</pre></code></td></tr><tr><td>93</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CatchCLI">func CatchCLI</div><div class="info"><a href="#s_fn_CatchCLI">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/cli.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>33</td><td><code><pre>func CatchCLI(args []string) error {</pre></code></td></tr><tr><td>34</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr><td>35</td><td><code><pre> utils.InitLogs()</pre></code></td></tr><tr><td>36</td><td><code><pre> source.Assets()</pre></code></td></tr><tr><td>37</td><td><code><pre> LoadDotEnvs()</pre></code></td></tr><tr><td>38</td><td><code><pre></pre></code></td></tr><tr><td>39</td><td><code><pre> switch args[0] {</pre></code></td></tr><tr><td>40</td><td><code><pre> case "app":</pre></code></td></tr><tr class="miss"><td>41</td><td><code><pre> handlers.DesktopInit(ipAddress, port)</pre></code></td></tr><tr><td>42</td><td><code><pre> case "version":</pre></code></td></tr><tr><td>43</td><td><code><pre> if COMMIT != "" {</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> fmt.Printf("Statup v%v (%v)\n", VERSION, COMMIT)</pre></code></td></tr><tr><td>45</td><td><code><pre> } else {</pre></code></td></tr><tr><td>46</td><td><code><pre> fmt.Printf("Statup v%v\n", VERSION)</pre></code></td></tr><tr><td>47</td><td><code><pre> }</pre></code></td></tr><tr><td>48</td><td><code><pre> return errors.New("end")</pre></code></td></tr><tr><td>49</td><td><code><pre> case "assets":</pre></code></td></tr><tr><td>50</td><td><code><pre> err := source.CreateAllAssets(dir)</pre></code></td></tr><tr><td>51</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> return err</pre></code></td></tr><tr><td>53</td><td><code><pre> } else {</pre></code></td></tr><tr><td>54</td><td><code><pre> return errors.New("end")</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr><tr><td>56</td><td><code><pre> case "sass":</pre></code></td></tr><tr><td>57</td><td><code><pre> utils.InitLogs()</pre></code></td></tr><tr><td>58</td><td><code><pre> source.Assets()</pre></code></td></tr><tr><td>59</td><td><code><pre> err := source.CompileSASS(dir)</pre></code></td></tr><tr><td>60</td><td><code><pre> if err == nil {</pre></code></td></tr><tr><td>61</td><td><code><pre> return errors.New("end")</pre></code></td></tr><tr><td>62</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> return err</pre></code></td></tr><tr><td>64</td><td><code><pre> case "update":</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> gitCurrent, err := CheckGithubUpdates()</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> return nil</pre></code></td></tr><tr><td>68</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> fmt.Printf("Statup Version: v%v\nLatest Version: %v\n", VERSION, gitCurrent.TagName)</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> if VERSION != gitCurrent.TagName[1:] {</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> fmt.Printf("You don't have the latest version v%v!\nDownload the latest release at: https://github.com/hunterlong/statup\n", gitCurrent.TagName[1:])</pre></code></td></tr><tr><td>72</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> fmt.Printf("You have the latest version of Statup!\n")</pre></code></td></tr><tr><td>74</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>75</td><td
|
||
|
|
||
|
<div class="funcname" id="fn_main">func main</div><div class="info"><a href="#s_fn_main">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>55</td><td><code><pre>func main() {</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>57</td><td><code><pre> parseFlags()</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> LoadDotEnvs()</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> source.Assets()</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> utils.InitLogs()</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> args := flag.Args()</pre></code></td></tr><tr><td>62</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> if len(args) >= 1 {</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> err := CatchCLI(args)</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> if err.Error() == "end" {</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> os.Exit(0)</pre></code></td></tr><tr><td>68</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> fmt.Println(err)</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> os.Exit(1)</pre></code></td></tr><tr><td>71</td><td><code><pre> }</pre></code></td></tr><tr><td>72</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> utils.Log(1, fmt.Sprintf("Starting Statup v%v", VERSION))</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> core.Configs, err = core.LoadConfig(utils.Directory)</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> core.SetupMode = true</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> fmt.Println(handlers.RunHTTPServer(ipAddress, port))</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> os.Exit(1)</pre></code></td></tr><tr><td>80</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>81</td><td><code><pre> defer core.CloseDB()</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> mainProcess()</pre></code></td></tr><tr><td>83</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_RunOnce">func RunOnce</div><div class="info"><a href="#s_fn_RunOnce">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/cli.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>126</td><td><code><pre>func RunOnce() {</pre></code></td></tr><tr class="miss"><td>127</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> core.Configs, err = core.LoadConfig(utils.Directory)</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> utils.Log(4, "config.yml file not found")</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre> err = core.Configs.Connect(false, utils.Directory)</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> core.CoreApp, err = core.SelectCore()</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>138</td><td><code><pre> fmt.Println("Core database was not found, Statup is not setup yet.")</pre></code></td></tr><tr><td>139</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> core.CoreApp.SelectAllServices()</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>143</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>144</td><td><code><pre> for _, out := range core.CoreApp.Services {</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> service := out.Select()</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> out.Check(true)</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> fmt.Printf(" Service %v | URL: %v | Latency: %0.0fms | Online: %v\n", service.Name, service.Domain, (service.Latency * 1000), service.Online)</pre></code></td></tr><tr><td>148</td><td><code><pre> }</pre></code></td></tr><tr><td>149</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_mainProcess">func mainProcess</div><div class="info"><a href="#s_fn_mainProcess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>96</td><td><code><pre>func mainProcess() {</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr class="miss"><td>98</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> core.Configs, err = core.LoadConfig(dir)</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> utils.Log(4, fmt.Sprintf("could not load config.yml %v", err))</pre></code></td></tr><tr><td>102</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> err = core.Configs.Connect(false, dir)</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> utils.Log(4, fmt.Sprintf("could not connect to database: %v", err))</pre></code></td></tr><tr><td>106</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> core.Configs.MigrateDatabase()</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> core.InitApp()</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> if !core.SetupMode {</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> LoadPlugins(false)</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> fmt.Println(handlers.RunHTTPServer(ipAddress, port))</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> os.Exit(1)</pre></code></td></tr><tr><td>113</td><td><code><pre> }</pre></code></td></tr><tr><td>114</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CheckGithubUpdates">func CheckGithubUpdates</div><div class="info"><a href="#s_fn_CheckGithubUpdates">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/cli.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>306</td><td><code><pre>func CheckGithubUpdates() (GithubResponse, error) {</pre></code></td></tr><tr class="miss"><td>307</td><td><code><pre> var gitResp GithubResponse</pre></code></td></tr><tr class="miss"><td>308</td><td><code><pre> response, err := http.Get("https://api.github.com/repos/hunterlong/statup/releases/latest")</pre></code></td></tr><tr class="miss"><td>309</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>310</td><td><code><pre> return GithubResponse{}, err</pre></code></td></tr><tr><td>311</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>312</td><td><code><pre> defer response.Body.Close()</pre></code></td></tr><tr class="miss"><td>313</td><td><code><pre> contents, err := ioutil.ReadAll(response.Body)</pre></code></td></tr><tr class="miss"><td>314</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>315</td><td><code><pre> return GithubResponse{}, err</pre></code></td></tr><tr><td>316</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>317</td><td><code><pre> err = json.Unmarshal(contents, &gitResp)</pre></code></td></tr><tr class="miss"><td>318</td><td><code><pre> return gitResp, err</pre></code></td></tr><tr><td>319</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_parseFlags">func parseFlags</div><div class="info"><a href="#s_fn_parseFlags">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>46</td><td><code><pre>func parseFlags() {</pre></code></td></tr><tr class="miss"><td>47</td><td><code><pre> ip := flag.String("ip", "0.0.0.0", "IP address to run the Statup HTTP server")</pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> p := flag.Int("port", 8080, "Port to run the HTTP server")</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> flag.Parse()</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> ipAddress = *ip</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> port = *p</pre></code></td></tr><tr><td>52</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ForEachPlugin">func ForEachPlugin</div><div class="info"><a href="#s_fn_ForEachPlugin">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>116</td><td><code><pre>func ForEachPlugin() {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> if len(core.CoreApp.Plugins) > 0 {</pre></code></td></tr><tr><td>118</td><td><code><pre> //for _, p := range core.Plugins {</pre></code></td></tr><tr><td>119</td><td><code><pre> // p.OnShutdown()</pre></code></td></tr><tr><td>120</td><td><code><pre> //}</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr><td>122</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_LoadPlugins">func LoadPlugins</div><div class="info"><a href="#s_fn_LoadPlugins">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>124</td><td><code><pre>func LoadPlugins(debug bool) {</pre></code></td></tr><tr><td>125</td><td><code><pre> //utils.Log(1, fmt.Sprintf("Loading any available Plugins from /plugins directory"))</pre></code></td></tr><tr><td>126</td><td><code><pre> //if _, err := os.Stat("./plugins"); os.IsNotExist(err) {</pre></code></td></tr><tr><td>127</td><td><code><pre> // os.Mkdir("./plugins", os.ModePerm)</pre></code></td></tr><tr><td>128</td><td><code><pre> //}</pre></code></td></tr><tr><td>129</td><td><code><pre> //</pre></code></td></tr><tr><td>130</td><td><code><pre> ////ForEachPlugin()</pre></code></td></tr><tr><td>131</td><td><code><pre> //files, err := ioutil.ReadDir("./plugins")</pre></code></td></tr><tr><td>132</td><td><code><pre> //if err != nil {</pre></code></td></tr><tr><td>133</td><td><code><pre> // utils.Log(2, fmt.Sprintf("Plugins directory was not found. Error: %v\n", err))</pre></code></td></tr><tr><td>134</td><td><code><pre> // return</pre></code></td></tr><tr><td>135</td><td><code><pre> //}</pre></code></td></tr><tr><td>136</td><td><code><pre> //for _, f := range files {</pre></code></td></tr><tr><td>137</td><td><code><pre> // utils.Log(1, fmt.Sprintf("Attempting to load plugin '%v'", f.Name()))</pre></code></td></tr><tr><td>138</td><td><code><pre> // ext := strings.Split(f.Name(), ".")</pre></code></td></tr><tr><td>139</td><td><code><pre> // if len(ext) != 2 {</pre></code></td></tr><tr><td>140</td><td><code><pre> // utils.Log(3, fmt.Sprintf("Plugin '%v' must end in .so extension", f.Name()))</pre></code></td></tr><tr><td>141</td><td><code><pre> // continue</pre></code></td></tr><tr><td>142</td><td><code><pre> // }</pre></code></td></tr><tr><td>143</td><td><code><pre> // if ext[1] != "so" {</pre></code></td></tr><tr><td>144</td><td><code><pre> // utils.Log(3, fmt.Sprintf("Plugin '%v' must end in .so extension", f.Name()))</pre></code></td></tr><tr><td>145</td><td><code><pre> // continue</pre></code></td></tr><tr><td>146</td><td><code><pre> // }</pre></code></td></tr><tr><td>147</td><td><code><pre> // plug, err := plg.Open("plugins/" + f.Name())</pre></code></td></tr><tr><td>148</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>149</td><td><code><pre> // utils.Log(3, fmt.Sprintf("Plugin '%v' could not load correctly. %v", f.Name(), err))</pre></code></td></tr><tr><td>150</td><td><code><pre> // continue</pre></code></td></tr><tr><td>151</td><td><code><pre> // }</pre></code></td></tr><tr><td>152</td><td><code><pre> // symPlugin, err := plug.Lookup("Plugin")</pre></code></td></tr><tr><td>153</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>154</td><td><code><pre> // utils.Log(3, fmt.Sprintf("Plugin '%v' could not load correctly. %v", f.Name(), err))</pre></code></td></tr><tr><td>155</td><td><code><pre> // continue</pre></code></td></tr><tr><td>156</td><td><code><pre> // }</pre></code></td></tr><tr><td>157</td><td><code><pre> //</pre></code></td></tr><tr><td>158</td><td><code><pre> // if debug {</pre></code></td></tr><tr><td>159</td><td><code><pre> // utils.Log(1, fmt.Sprintf("Plugin '%v' struct:", f.Name()))</pre></code></td></tr><tr><td>160</td><td><code><pre> // utils.Log(1, structs.Map(symPlugin))</pre></code></td></tr><tr><td>161</td><td><code><pre> // }</pre></code></td></tr><tr><td>162</td><td><code><pre> //</pre></code></td></tr><tr><td>163</td><td><code><pre> //
|
||
|
|
||
|
<!-- Can be parsed by external script
|
||
|
PACKAGE:github.com/hunterlong/statup/cmd DONE:31.37
|
||
|
-->
|
||
|
|
||
|
<div id="pkg_github.com/hunterlong/statup/core" class="funcname">Package Overview: github.com/hunterlong/statup/core <span class="packageTotal">52.31%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/core</code> package. It
|
||
|
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/core | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
|
||
|
<tr id="s_fn_InsertLargeSampleData"><td><code><a href="#fn_InsertLargeSampleData">InsertLargeSampleData(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>27/27</code></td></tr>
|
||
|
<tr id="s_fn_InsertSampleData"><td><code><a href="#fn_InsertSampleData">InsertSampleData(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>22/22</code></td></tr>
|
||
|
<tr id="s_fn_Service.CheckQueue"><td><code><a href="#fn_Service.CheckQueue">Service.CheckQueue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>13/13</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.CreateDatabase"><td><code><a href="#fn_DbConfig.CreateDatabase">DbConfig.CreateDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>11/11</code></td></tr>
|
||
|
<tr id="s_fn_Service.dnsCheck"><td><code><a href="#fn_Service.dnsCheck">Service.dnsCheck(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>11/11</code></td></tr>
|
||
|
<tr id="s_fn_insertHitRecords"><td><code><a href="#fn_insertHitRecords">insertHitRecords(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.DropDatabase"><td><code><a href="#fn_DbConfig.DropDatabase">DbConfig.DropDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
|
||
|
<tr id="s_fn_insertFailureRecords"><td><code><a href="#fn_insertFailureRecords">insertFailureRecords(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>8/8</code></td></tr>
|
||
|
<tr id="s_fn_recordSuccess"><td><code><a href="#fn_recordSuccess">recordSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
|
||
|
<tr id="s_fn_Core.CountOnline"><td><code><a href="#fn_Core.CountOnline">Core.CountOnline(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
|
||
|
<tr id="s_fn_recordFailure"><td><code><a href="#fn_recordFailure">recordFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
|
||
|
<tr id="s_fn_Service.LimitedFailures"><td><code><a href="#fn_Service.LimitedFailures">Service.LimitedFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_Service.LimitedHits"><td><code><a href="#fn_Service.LimitedHits">Service.LimitedHits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_Service.Hits"><td><code><a href="#fn_Service.Hits">Service.Hits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_SelectUsername"><td><code><a href="#fn_SelectUsername">SelectUsername(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_NewCore"><td><code><a href="#fn_NewCore">NewCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_User.Update"><td><code><a href="#fn_User.Update">User.Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_Service.TotalHits"><td><code><a href="#fn_Service.TotalHits">Service.TotalHits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_Service.TotalHitsSince"><td><code><a href="#fn_Service.TotalHitsSince">Service.TotalHitsSince(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_insertSampleUsers"><td><code><a href="#fn_insertSampleUsers">insertSampleUsers(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_Service.TotalFailuresSince"><td><code><a href="#fn_Service.TotalFailuresSince">Service.TotalFailuresSince(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_insertSampleCore"><td><code><a href="#fn_insertSampleCore">insertSampleCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.Hits"><td><code><a href="#fn_Checkin.Hits">Checkin.Hits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.Last"><td><code><a href="#fn_Checkin.Last">Checkin.Last(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_reverseHits"><td><code><a href="#fn_reverseHits">reverseHits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_Service.Checkins"><td><code><a href="#fn_Service.Checkins">Service.Checkins(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_Service.Check"><td><code><a href="#fn_Service.Check">Service.Check(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_SelectUser"><td><code><a href="#fn_SelectUser">SelectUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.BeforeCreate"><td><code><a href="#fn_Checkin.BeforeCreate">Checkin.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_Service.AfterFind"><td><code><a href="#fn_Service.AfterFind">Service.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_User.AfterFind"><td><code><a href="#fn_User.AfterFind">User.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_CheckinHit.Ago"><td><code><a href="#fn_CheckinHit.Ago">CheckinHit.Ago(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.Grace"><td><code><a href="#fn_Checkin.Grace">Checkin.Grace(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.Period"><td><code><a href="#fn_Checkin.Period">Checkin.Period(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_CheckinHit.AfterFind"><td><code><a href="#fn_CheckinHit.AfterFind">CheckinHit.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.AfterFind"><td><code><a href="#fn_Checkin.AfterFind">Checkin.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_updateService"><td><code><a href="#fn_updateService">updateService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_Failure.AfterFind"><td><code><a href="#fn_Failure.AfterFind">Failure.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_CheckHash"><td><code><a href="#fn_CheckHash">CheckHash(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_User.Delete"><td><code><a href="#fn_User.Delete">User.Delete(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_reorderServices"><td><code><a href="#fn_reorderServices">reorderServices(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_ReturnCheckinHit"><td><code><a href="#fn_ReturnCheckinHit">ReturnCheckinHit(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_servicesDB"><td><code><a href="#fn_servicesDB">servicesDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_ServiceOrder.Len"><td><code><a href="#fn_ServiceOrder.Len">ServiceOrder.Len(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_ServiceOrder.Swap"><td><code><a href="#fn_ServiceOrder.Swap">ServiceOrder.Swap(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_ServiceOrder.Less"><td><code><a href="#fn_ServiceOrder.Less">ServiceOrder.Less(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_failuresDB"><td><code><a href="#fn_failuresDB">failuresDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_hitsDB"><td><code><a href="#fn_hitsDB">hitsDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_Service.Select"><td><code><a href="#fn_Service.Select">Service.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_coreDB"><td><code><a href="#fn_coreDB">coreDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_usersDB"><td><code><a href="#fn_usersDB">usersDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_checkinDB"><td><code><a href="#fn_checkinDB">checkinDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_checkinHitsDB"><td><code><a href="#fn_checkinHitsDB">checkinHitsDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_ReturnService"><td><code><a href="#fn_ReturnService">ReturnService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_ReturnUser"><td><code><a href="#fn_ReturnUser">ReturnUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.Close"><td><code><a href="#fn_DbConfig.Close">DbConfig.Close(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_ReturnCheckin"><td><code><a href="#fn_ReturnCheckin">ReturnCheckin(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_Service.parseHost"><td><code><a href="#fn_Service.parseHost">Service.parseHost(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>90.91%</code></td><td class="linecount"><code>10/11</code></td></tr>
|
||
|
<tr id="s_fn_Service.Sum"><td><code><a href="#fn_Service.Sum">Service.Sum(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>85.71%</code></td><td class="linecount"><code>6/7</code></td></tr>
|
||
|
<tr id="s_fn_Service.Update"><td><code><a href="#fn_Service.Update">Service.Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>84.62%</code></td><td class="linecount"><code>11/13</code></td></tr>
|
||
|
<tr id="s_fn_Core.SelectAllServices"><td><code><a href="#fn_Core.SelectAllServices">Core.SelectAllServices(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>84.62%</code></td><td class="linecount"><code>11/13</code></td></tr>
|
||
|
<tr id="s_fn_Service.Create"><td><code><a href="#fn_Service.Create">Service.Create(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>81.82%</code></td><td class="linecount"><code>9/11</code></td></tr>
|
||
|
<tr id="s_fn_Service.Delete"><td><code><a href="#fn_Service.Delete">Service.Delete(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>81.82%</code></td><td class="linecount"><code>9/11</code></td></tr>
|
||
|
<tr id="s_fn_Service.OnlineSince"><td><code><a href="#fn_Service.OnlineSince">Service.OnlineSince(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>12/15</code></td></tr>
|
||
|
<tr id="s_fn_Service.duration"><td><code><a href="#fn_Service.duration">Service.duration(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
|
||
|
<tr id="s_fn_SelectAllUsers"><td><code><a href="#fn_SelectAllUsers">SelectAllUsers(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
|
||
|
<tr id="s_fn_Service.AvgUptime"><td><code><a href="#fn_Service.AvgUptime">Service.AvgUptime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>78.57%</code></td><td class="linecount"><code>11/14</code></td></tr>
|
||
|
<tr id="s_fn_Service.AllFailures"><td><code><a href="#fn_Service.AllFailures">Service.AllFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>77.78%</code></td><td class="linecount"><code>7/9</code></td></tr>
|
||
|
<tr id="s_fn_Service.Downtime"><td><code><a href="#fn_Service.Downtime">Service.Downtime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>6/8</code></td></tr>
|
||
|
<tr id="s_fn_SelectService"><td><code><a href="#fn_SelectService">SelectService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>3/4</code></td></tr>
|
||
|
<tr id="s_fn_Service.index"><td><code><a href="#fn_Service.index">Service.index(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>3/4</code></td></tr>
|
||
|
<tr id="s_fn_Service.checkHttp"><td><code><a href="#fn_Service.checkHttp">Service.checkHttp(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>74.47%</code></td><td class="linecount"><code>35/47</code></td></tr>
|
||
|
<tr id="s_fn_User.Create"><td><code><a href="#fn_User.Create">User.Create(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>8/11</code></td></tr>
|
||
|
<tr id="s_fn_Service.checkTcp"><td><code><a href="#fn_Service.checkTcp">Service.checkTcp(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>72.00%</code></td><td class="linecount"><code>18/25</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.Save"><td><code><a href="#fn_DbConfig.Save">DbConfig.Save(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>10/14</code></td></tr>
|
||
|
<tr id="s_fn_AuthUser"><td><code><a href="#fn_AuthUser">AuthUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
|
||
|
<tr id="s_fn_Service.CreateFailure"><td><code><a href="#fn_Service.CreateFailure">Service.CreateFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
|
||
|
<tr id="s_fn_SelectCore"><td><code><a href="#fn_SelectCore">SelectCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>69.23%</code></td><td class="linecount"><code>9/13</code></td></tr>
|
||
|
<tr id="s_fn_LoadConfig"><td><code><a href="#fn_LoadConfig">LoadConfig(...)</a></code></td><td><code>github.com/hunterlong/statup/core/configs.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>8/12</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.MigrateDatabase"><td><code><a href="#fn_DbConfig.MigrateDatabase">DbConfig.MigrateDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>8/12</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.Create"><td><code><a href="#fn_Checkin.Create">Checkin.Create(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>4/6</code></td></tr>
|
||
|
<tr id="s_fn_Service.BeforeCreate"><td><code><a href="#fn_Service.BeforeCreate">Service.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_CheckinHit.BeforeCreate"><td><code><a href="#fn_CheckinHit.BeforeCreate">CheckinHit.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_User.BeforeCreate"><td><code><a href="#fn_User.BeforeCreate">User.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_Service.CreateHit"><td><code><a href="#fn_Service.CreateHit">Service.CreateHit(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.Update"><td><code><a href="#fn_Checkin.Update">Checkin.Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
|
||
|
<tr id="s_fn_CheckinHit.Create"><td><code><a href="#fn_CheckinHit.Create">CheckinHit.Create(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>57.14%</code></td><td class="linecount"><code>4/7</code></td></tr>
|
||
|
<tr id="s_fn_Service.SmallText"><td><code><a href="#fn_Service.SmallText">Service.SmallText(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>6/12</code></td></tr>
|
||
|
<tr id="s_fn_insertNotifierDB"><td><code><a href="#fn_insertNotifierDB">insertNotifierDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>3/6</code></td></tr>
|
||
|
<tr id="s_fn_@347:8"><td><code><a href="#fn_@347:8">@347:8(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>1/2</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.Connect"><td><code><a href="#fn_DbConfig.Connect">DbConfig.Connect(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>46.67%</code></td><td class="linecount"><code>14/30</code></td></tr>
|
||
|
<tr id="s_fn_LoadUsingEnv"><td><code><a href="#fn_LoadUsingEnv">LoadUsingEnv(...)</a></code></td><td><code>github.com/hunterlong/statup/core/configs.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/40</code></td></tr>
|
||
|
<tr id="s_fn_Failure.ParseError"><td><code><a href="#fn_Failure.ParseError">Failure.ParseError(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/28</code></td></tr>
|
||
|
<tr id="s_fn_ExportIndexHTML"><td><code><a href="#fn_ExportIndexHTML">ExportIndexHTML(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/23</code></td></tr>
|
||
|
<tr id="s_fn_GraphDataRaw"><td><code><a href="#fn_GraphDataRaw">GraphDataRaw(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/16</code></td></tr>
|
||
|
<tr id="s_fn_InsertSampleHits"><td><code><a href="#fn_InsertSampleHits">InsertSampleHits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/14</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.Update"><td><code><a href="#fn_DbConfig.Update">DbConfig.Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/12</code></td></tr>
|
||
|
<tr id="s_fn_Dbtimestamp"><td><code><a href="#fn_Dbtimestamp">Dbtimestamp(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/12</code></td></tr>
|
||
|
<tr id="s_fn_ExportChartsJs"><td><code><a href="#fn_ExportChartsJs">ExportChartsJs(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/11</code></td></tr>
|
||
|
<tr id="s_fn_Service.TotalUptime"><td><code><a href="#fn_Service.TotalUptime">Service.TotalUptime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/10</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.RecheckCheckinFailure"><td><code><a href="#fn_Checkin.RecheckCheckinFailure">Checkin.RecheckCheckinFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.CreateCore"><td><code><a href="#fn_DbConfig.CreateCore">DbConfig.CreateCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
|
||
|
<tr id="s_fn_Service.GraphData"><td><code><a href="#fn_Service.GraphData">Service.GraphData(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
|
||
|
<tr id="s_fn_Service.AvgTime"><td><code><a href="#fn_Service.AvgTime">Service.AvgTime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
|
||
|
<tr id="s_fn_CountFailures"><td><code><a href="#fn_CountFailures">CountFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.CreateHit"><td><code><a href="#fn_Checkin.CreateHit">Checkin.CreateHit(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
|
||
|
<tr id="s_fn_Core.Count24HFailures"><td><code><a href="#fn_Core.Count24HFailures">Core.Count24HFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
|
||
|
<tr id="s_fn_InitApp"><td><code><a href="#fn_InitApp">InitApp(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.Expected"><td><code><a href="#fn_Checkin.Expected">Checkin.Expected(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_DatabaseMaintence"><td><code><a href="#fn_DatabaseMaintence">DatabaseMaintence(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_DateScanObj.ToString"><td><code><a href="#fn_DateScanObj.ToString">DateScanObj.ToString(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_Service.lastFailure"><td><code><a href="#fn_Service.lastFailure">Service.lastFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_DeleteAllSince"><td><code><a href="#fn_DeleteAllSince">DeleteAllSince(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_Core.AllOnline"><td><code><a href="#fn_Core.AllOnline">Core.AllOnline(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_Service.DeleteFailures"><td><code><a href="#fn_Service.DeleteFailures">Service.DeleteFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.InsertCore"><td><code><a href="#fn_DbConfig.InsertCore">DbConfig.InsertCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_Core.CurrentTime"><td><code><a href="#fn_Core.CurrentTime">Core.CurrentTime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.Clean"><td><code><a href="#fn_DbConfig.Clean">DbConfig.Clean(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_Service.TotalFailures"><td><code><a href="#fn_Service.TotalFailures">Service.TotalFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_DeleteConfig"><td><code><a href="#fn_DeleteConfig">DeleteConfig(...)</a></code></td><td><code>github.com/hunterlong/statup/core/configs.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_SelectCheckin"><td><code><a href="#fn_SelectCheckin">SelectCheckin(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_SelectCheckinApi"><td><code><a href="#fn_SelectCheckinApi">SelectCheckinApi(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_Hit.BeforeCreate"><td><code><a href="#fn_Hit.BeforeCreate">Hit.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_Core.SassVars"><td><code><a href="#fn_Core.SassVars">Core.SassVars(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_Core.MobileSASS"><td><code><a href="#fn_Core.MobileSASS">Core.MobileSASS(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_Core.BaseSASS"><td><code><a href="#fn_Core.BaseSASS">Core.BaseSASS(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_Failure.BeforeCreate"><td><code><a href="#fn_Failure.BeforeCreate">Failure.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_checkServices"><td><code><a href="#fn_checkServices">checkServices(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_Service.Online24"><td><code><a href="#fn_Service.Online24">Service.Online24(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_CloseDB"><td><code><a href="#fn_CloseDB">CloseDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_Service.ToJSON"><td><code><a href="#fn_Service.ToJSON">Service.ToJSON(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_Service.AvgUptime24"><td><code><a href="#fn_Service.AvgUptime24">Service.AvgUptime24(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_Hit.AfterFind"><td><code><a href="#fn_Hit.AfterFind">Hit.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_UpdateCore"><td><code><a href="#fn_UpdateCore">UpdateCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_Service.HitsBetween"><td><code><a href="#fn_Service.HitsBetween">Service.HitsBetween(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.Ago"><td><code><a href="#fn_Checkin.Ago">Checkin.Ago(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_Service.TotalFailures24"><td><code><a href="#fn_Service.TotalFailures24">Service.TotalFailures24(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_Failure.Delete"><td><code><a href="#fn_Failure.Delete">Failure.Delete(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_SaveFile"><td><code><a href="#fn_SaveFile">SaveFile(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_DbConfig.waitForDb"><td><code><a href="#fn_DbConfig.waitForDb">DbConfig.waitForDb(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_Failure.Ago"><td><code><a href="#fn_Failure.Ago">Failure.Ago(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_@68:10"><td><code><a href="#fn_@68:10">@68:10(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@65:17"><td><code><a href="#fn_@65:17">@65:17(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@71:17"><td><code><a href="#fn_@71:17">@71:17(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_Service.UpdateSingle"><td><code><a href="#fn_Service.UpdateSingle">Service.UpdateSingle(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@59:14"><td><code><a href="#fn_@59:14">@59:14(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@56:14"><td><code><a href="#fn_@56:14">@56:14(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_Core.ServicesCount"><td><code><a href="#fn_Core.ServicesCount">Core.ServicesCount(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@53:11"><td><code><a href="#fn_@53:11">@53:11(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_injectDatabase"><td><code><a href="#fn_injectDatabase">injectDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@93:11"><td><code><a href="#fn_@93:11">@93:11(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.String"><td><code><a href="#fn_Checkin.String">Checkin.String(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_Core.ToCore"><td><code><a href="#fn_Core.ToCore">Core.ToCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@50:9"><td><code><a href="#fn_@50:9">@50:9(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_Service.DowntimeText"><td><code><a href="#fn_Service.DowntimeText">Service.DowntimeText(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_Core.UsingAssets"><td><code><a href="#fn_Core.UsingAssets">Core.UsingAssets(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@62:14"><td><code><a href="#fn_@62:14">@62:14(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_Checkin.CreateFailure"><td><code><a href="#fn_Checkin.CreateFailure">Checkin.CreateFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/0</code></td></tr>
|
||
|
<tr><td colspan="2"><code>github.com/hunterlong/statup/core</code></td><td class="percent"><code>52.31%</code></td><td class="linecount"><code>487/931</code></td></tr>
|
||
|
</table>
|
||
|
|
||
|
<div class="funcname" id="fn_InsertLargeSampleData">func InsertLargeSampleData</div><div class="info"><a href="#s_fn_InsertLargeSampleData">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>174</td><td><code><pre>u2.Create()</pre></code></td></tr><tr><td>175</td><td><code><pre> u3.Create()</pre></code></td></tr><tr><td>176</td><td><code><pre>}</pre></code></td></tr><tr><td>177</td><td><code><pre></pre></code></td></tr><tr><td>178</td><td><code><pre>// InsertSampleData will create the example/dummy services for a brand new Statup installation</pre></code></td></tr><tr><td>179</td><td><code><pre>func InsertLargeSampleData() error {</pre></code></td></tr><tr><td>180</td><td><code><pre> insertSampleCore()</pre></code></td></tr><tr><td>181</td><td><code><pre> InsertSampleData()</pre></code></td></tr><tr><td>182</td><td><code><pre> insertSampleUsers()</pre></code></td></tr><tr><td>183</td><td><code><pre> s6 := ReturnService(&types.Service{</pre></code></td></tr><tr><td>184</td><td><code><pre> Name: "JSON Lint",</pre></code></td></tr><tr><td>185</td><td><code><pre> Domain: "https://jsonlint.com",</pre></code></td></tr><tr><td>186</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>187</td><td><code><pre> Interval: 15,</pre></code></td></tr><tr><td>188</td><td><code><pre> Type: "http",</pre></code></td></tr><tr><td>189</td><td><code><pre> Method: "GET",</pre></code></td></tr><tr><td>190</td><td><code><pre> Timeout: 10,</pre></code></td></tr><tr><td>191</td><td><code><pre> Order: 6,</pre></code></td></tr><tr><td>192</td><td><code><pre> })</pre></code></td></tr><tr><td>193</td><td><code><pre></pre></code></td></tr><tr><td>194</td><td><code><pre> s7 := ReturnService(&types.Service{</pre></code></td></tr><tr><td>195</td><td><code><pre> Name: "Demo Page",</pre></code></td></tr><tr><td>196</td><td><code><pre> Domain: "https://demo.statup.io",</pre></code></td></tr><tr><td>197</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>198</td><td><code><pre> Interval: 30,</pre></code></td></tr><tr><td>199</td><td><code><pre> Type: "http",</pre></code></td></tr><tr><td>200</td><td><code><pre> Method: "GET",</pre></code></td></tr><tr><td>201</td><td><code><pre> Timeout: 15,</pre></code></td></tr><tr><td>202</td><td><code><pre> Order: 7,</pre></code></td></tr><tr><td>203</td><td><code><pre> })</pre></code></td></tr><tr><td>204</td><td><code><pre></pre></code></td></tr><tr><td>205</td><td><code><pre> s8 := ReturnService(&types.Service{</pre></code></td></tr><tr><td>206</td><td><code><pre> Name: "Golang",</pre></code></td></tr><tr><td>207</td><td><code><pre> Domain: "https://golang.org",</pre></code></td></tr><tr><td>208</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>209</td><td><code><pre> Interval: 15,</pre></code></td></tr><tr><td>210</td><td><code><pre> Type: "http",</pre></code></td></tr><tr><td>211</td><td><code><pre> Method: "GET",</pre></code></td></tr><tr><td>212</td><td><code><pre> Timeout: 10,</pre></code></td></tr><tr><td>213</td><td><code><pre> Order: 8,</pre></code></td></tr><tr><td>214</td><td><code><pre> })</pre></code></td></tr><tr><td>215</td><td><code><pre></pre></code></td></tr><tr><td>216</td><td><code><pre> s9 := ReturnService(&types.Service{</pre></code></td></tr><tr><td>217</td><td><code><pre> Name: "Santa Monica",</pre></code></td></tr><tr><td>218</td><td><code><pre> Domain: "https://www.santamonica.com",</pre></code></td></tr><tr><td>219</td><td><code><pre>
|
||
|
|
||
|
<div class="funcname" id="fn_InsertSampleData">func InsertSampleData</div><div class="info"><a href="#s_fn_InsertSampleData">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>27</td><td><code><pre>func InsertSampleData() error {</pre></code></td></tr><tr><td>28</td><td><code><pre> utils.Log(1, "Inserting Sample Data...")</pre></code></td></tr><tr><td>29</td><td><code><pre> s1 := ReturnService(&types.Service{</pre></code></td></tr><tr><td>30</td><td><code><pre> Name: "Google",</pre></code></td></tr><tr><td>31</td><td><code><pre> Domain: "https://google.com",</pre></code></td></tr><tr><td>32</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>33</td><td><code><pre> Interval: 10,</pre></code></td></tr><tr><td>34</td><td><code><pre> Type: "http",</pre></code></td></tr><tr><td>35</td><td><code><pre> Method: "GET",</pre></code></td></tr><tr><td>36</td><td><code><pre> Timeout: 10,</pre></code></td></tr><tr><td>37</td><td><code><pre> Order: 1,</pre></code></td></tr><tr><td>38</td><td><code><pre> })</pre></code></td></tr><tr><td>39</td><td><code><pre> s2 := ReturnService(&types.Service{</pre></code></td></tr><tr><td>40</td><td><code><pre> Name: "Statup Github",</pre></code></td></tr><tr><td>41</td><td><code><pre> Domain: "https://github.com/hunterlong/statup",</pre></code></td></tr><tr><td>42</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>43</td><td><code><pre> Interval: 30,</pre></code></td></tr><tr><td>44</td><td><code><pre> Type: "http",</pre></code></td></tr><tr><td>45</td><td><code><pre> Method: "GET",</pre></code></td></tr><tr><td>46</td><td><code><pre> Timeout: 20,</pre></code></td></tr><tr><td>47</td><td><code><pre> Order: 2,</pre></code></td></tr><tr><td>48</td><td><code><pre> })</pre></code></td></tr><tr><td>49</td><td><code><pre> s3 := ReturnService(&types.Service{</pre></code></td></tr><tr><td>50</td><td><code><pre> Name: "JSON Users Test",</pre></code></td></tr><tr><td>51</td><td><code><pre> Domain: "https://jsonplaceholder.typicode.com/users",</pre></code></td></tr><tr><td>52</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>53</td><td><code><pre> Interval: 60,</pre></code></td></tr><tr><td>54</td><td><code><pre> Type: "http",</pre></code></td></tr><tr><td>55</td><td><code><pre> Method: "GET",</pre></code></td></tr><tr><td>56</td><td><code><pre> Timeout: 30,</pre></code></td></tr><tr><td>57</td><td><code><pre> Order: 3,</pre></code></td></tr><tr><td>58</td><td><code><pre> })</pre></code></td></tr><tr><td>59</td><td><code><pre> s4 := ReturnService(&types.Service{</pre></code></td></tr><tr><td>60</td><td><code><pre> Name: "JSON API Tester",</pre></code></td></tr><tr><td>61</td><td><code><pre> Domain: "https://jsonplaceholder.typicode.com/posts",</pre></code></td></tr><tr><td>62</td><td><code><pre> ExpectedStatus: 201,</pre></code></td></tr><tr><td>63</td><td><code><pre> Expected: `(title)": "((\\"|[statup])*)"`,</pre></code></td></tr><tr><td>64</td><td><code><pre> Interval: 30,</pre></code></td></tr><tr><td>65</td><td><code><pre> Type: "http",</pre></code></td></tr><tr><td>66</td><td><code><pre> Method: "POST",</pre></code></td></tr><tr><td>67</td><td><code><pre> PostData: `{ "title": "statup", "body": "bar", "userId": 19999 }`,</pre></code></td></tr><tr><td>68</td
|
||
|
|
||
|
<div class="funcname" id="fn_Service.CheckQueue">func Service.CheckQueue</div><div class="info"><a href="#s_fn_Service.CheckQueue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>43</td><td><code><pre>func (s *Service) CheckQueue(record bool) {</pre></code></td></tr><tr><td>44</td><td><code><pre> s.Checkpoint = time.Now()</pre></code></td></tr><tr><td>45</td><td><code><pre> s.SleepDuration = time.Duration((time.Duration(s.Id) * 100) * time.Millisecond)</pre></code></td></tr><tr><td>46</td><td><code><pre>CheckLoop:</pre></code></td></tr><tr><td>47</td><td><code><pre> for {</pre></code></td></tr><tr><td>48</td><td><code><pre> select {</pre></code></td></tr><tr><td>49</td><td><code><pre> case <-s.Running:</pre></code></td></tr><tr><td>50</td><td><code><pre> utils.Log(1, fmt.Sprintf("Stopping service: %v", s.Name))</pre></code></td></tr><tr><td>51</td><td><code><pre> break CheckLoop</pre></code></td></tr><tr><td>52</td><td><code><pre> case <-time.After(s.SleepDuration):</pre></code></td></tr><tr><td>53</td><td><code><pre> s.Check(record)</pre></code></td></tr><tr><td>54</td><td><code><pre> s.Checkpoint = s.Checkpoint.Add(s.duration())</pre></code></td></tr><tr><td>55</td><td><code><pre> sleep := s.Checkpoint.Sub(time.Now())</pre></code></td></tr><tr><td>56</td><td><code><pre> if !s.Online {</pre></code></td></tr><tr><td>57</td><td><code><pre> s.SleepDuration = s.duration()</pre></code></td></tr><tr><td>58</td><td><code><pre> } else {</pre></code></td></tr><tr><td>59</td><td><code><pre> s.SleepDuration = sleep</pre></code></td></tr><tr><td>60</td><td><code><pre> }</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr><td>62</td><td><code><pre> continue</pre></code></td></tr><tr><td>63</td><td><code><pre> }</pre></code></td></tr><tr><td>64</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.CreateDatabase">func DbConfig.CreateDatabase</div><div class="info"><a href="#s_fn_DbConfig.CreateDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>315</td><td><code><pre>il {</pre></code></td></tr><tr><td>316</td><td><code><pre> CoreApp = &Core{Core: newCore}</pre></code></td></tr><tr><td>317</td><td><code><pre> }</pre></code></td></tr><tr><td>318</td><td><code><pre> CoreApp, err := SelectCore()</pre></code></td></tr><tr><td>319</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>320</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>321</td><td><code><pre> }</pre></code></td></tr><tr><td>322</td><td><code><pre> return CoreApp</pre></code></td></tr><tr><td>323</td><td><code><pre>}</pre></code></td></tr><tr><td>324</td><td><code><pre></pre></code></td></tr><tr><td>325</td><td><code><pre>// DropDatabase will DROP each table Statup created</pre></code></td></tr><tr><td>326</td><td><code><pre>func (db *DbConfig) DropDatabase() error {</pre></code></td></tr><tr><td>327</td><td><code><pre> utils.Log(1, "Dropping Database Tables...")</pre></code></td></tr><tr><td>328</td><td><code><pre> err := DbSession.DropTableIfExists("checkins")</pre></code></td></tr><tr><td>329</td><td><code><pre> err = DbSession.DropTableIfExists("checkins_hits")</pre></code></td></tr><tr><td>330</td><td><code><pre> err = DbSession.DropTableIfExists("notifications")</pre></code></td></tr><tr><td>331</td><td><code><pre> err = DbSession.DropTableIfExists("core")</pre></code></td></tr><tr><td>332</td><td><code><pre> err = DbSession.DropTableIfExists("failures")</pre></code></td></tr><tr><td>333</td><td><code><pre> err = DbSession.DropTableIfEx</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.dnsCheck">func Service.dnsCheck</div><div class="info"><a href="#s_fn_Service.dnsCheck">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>96</td><td><code><pre>func (s *Service) dnsCheck() (float64, error) {</pre></code></td></tr><tr><td>97</td><td><code><pre> var err error</pre></code></td></tr><tr><td>98</td><td><code><pre> t1 := time.Now()</pre></code></td></tr><tr><td>99</td><td><code><pre> host := s.parseHost()</pre></code></td></tr><tr><td>100</td><td><code><pre> if s.Type == "tcp" {</pre></code></td></tr><tr><td>101</td><td><code><pre> _, err = net.LookupHost(host)</pre></code></td></tr><tr><td>102</td><td><code><pre> } else {</pre></code></td></tr><tr><td>103</td><td><code><pre> _, err = net.LookupIP(host)</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr><tr><td>105</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>106</td><td><code><pre> return 0, err</pre></code></td></tr><tr><td>107</td><td><code><pre> }</pre></code></td></tr><tr><td>108</td><td><code><pre> t2 := time.Now()</pre></code></td></tr><tr><td>109</td><td><code><pre> subTime := t2.Sub(t1).Seconds()</pre></code></td></tr><tr><td>110</td><td><code><pre> return subTime, err</pre></code></td></tr><tr><td>111</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_insertHitRecords">func insertHitRecords</div><div class="info"><a href="#s_fn_insertHitRecords">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>321</td><td><code><pre>t.Add(2 * time.Minute)</pre></code></td></tr><tr><td>322</td><td><code><pre></pre></code></td></tr><tr><td>323</td><td><code><pre> failure := &types.Failure{</pre></code></td></tr><tr><td>324</td><td><code><pre> Service: service.Id,</pre></code></td></tr><tr><td>325</td><td><code><pre> Issue: "testing right here",</pre></code></td></tr><tr><td>326</td><td><code><pre> CreatedAt: createdAt,</pre></code></td></tr><tr><td>327</td><td><code><pre> }</pre></code></td></tr><tr><td>328</td><td><code><pre></pre></code></td></tr><tr><td>329</td><td><code><pre> service.CreateFailure(failure)</pre></code></td></tr><tr><td>330</td><td><code><pre> }</pre></code></td></tr><tr><td>331</td><td><code><pre> }</pre></code></td></tr><tr><td>332</td><td><code><pre>}</pre></code></td></tr><tr><td>333</td><td><code><pre></pre></code></td></tr><tr><td>334</td><td><code><pre>// insertHitRecords will create successful Hit records for 15 services</pre></code></td></tr><tr><td>335</td><td><code><pre>func insertHitRecords(since time.Time, amount int64) {</pre></code></td></tr><tr><td>336</td><td><code><pre> for i := int64(1); i <= 15; i++ {</pre></code></td></tr><tr><td>337</td><td><code><pre> service := SelectService(i)</pre></code></td></tr><tr><td>338</td><td><code><pre> utils.Log(1, fmt.Sprintf("Adding %v hit records to service %v", amount, service.Name))</pre></code></td></tr><tr><td>339</td><td><code><pre> createdAt := since</pre></code></td></tr><tr><td>340</td><td><code><pre></pre></code></td></tr><tr><td>341</td><td><code><pre> for hi := int64(1); hi <= a</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.DropDatabase">func DbConfig.DropDatabase</div><div class="info"><a href="#s_fn_DbConfig.DropDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>294</td><td><code><pre>err != nil {</pre></code></td></tr><tr><td>295</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>296</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>297</td><td><code><pre> }</pre></code></td></tr><tr><td>298</td><td><code><pre> config.WriteString(string(data))</pre></code></td></tr><tr><td>299</td><td><code><pre> defer config.Close()</pre></code></td></tr><tr><td>300</td><td><code><pre> return c, err</pre></code></td></tr><tr><td>301</td><td><code><pre>}</pre></code></td></tr><tr><td>302</td><td><code><pre></pre></code></td></tr><tr><td>303</td><td><code><pre>// CreateCore will initialize the global variable 'CoreApp". This global variable contains most of Statup app.</pre></code></td></tr><tr><td>304</td><td><code><pre>func (c *DbConfig) CreateCore() *Core {</pre></code></td></tr><tr><td>305</td><td><code><pre> newCore := &types.Core{</pre></code></td></tr><tr><td>306</td><td><code><pre> Name: c.Project,</pre></code></td></tr><tr><td>307</td><td><code><pre> Description: c.Description,</pre></code></td></tr><tr><td>308</td><td><code><pre> Config: "config.yml",</pre></code></td></tr><tr><td>309</td><td><code><pre> ApiKey: c.ApiKey,</pre></code></td></tr><tr><td>310</td><td><code><pre> ApiSecret: c.ApiSecret,</pre></code></td></tr><tr><td>311</td><td><code><pre> Domain: c.Domain,</pre></code></td></tr><tr><td>312</td><td><code><pre> MigrationId: t</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_insertFailureRecords">func insertFailureRecords</div><div class="info"><a href="#s_fn_insertFailureRecords">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>304</td><td><code><pre>4 * time.Hour).Add(-10 * time.Minute)</pre></code></td></tr><tr><td>305</td><td><code><pre></pre></code></td></tr><tr><td>306</td><td><code><pre> insertHitRecords(dayAgo, 1450)</pre></code></td></tr><tr><td>307</td><td><code><pre></pre></code></td></tr><tr><td>308</td><td><code><pre> insertFailureRecords(dayAgo, 730)</pre></code></td></tr><tr><td>309</td><td><code><pre></pre></code></td></tr><tr><td>310</td><td><code><pre> return nil</pre></code></td></tr><tr><td>311</td><td><code><pre>}</pre></code></td></tr><tr><td>312</td><td><code><pre></pre></code></td></tr><tr><td>313</td><td><code><pre>// insertFailureRecords will create failures for 15 services from seed</pre></code></td></tr><tr><td>314</td><td><code><pre>func insertFailureRecords(since time.Time, amount int64) {</pre></code></td></tr><tr><td>315</td><td><code><pre> for i := int64(14); i <= 15; i++ {</pre></code></td></tr><tr><td>316</td><td><code><pre> service := SelectService(i)</pre></code></td></tr><tr><td>317</td><td><code><pre> utils.Log(1, fmt.Sprintf("Adding %v failure records to service %v", amount, service.Name))</pre></code></td></tr><tr><td>318</td><td><code><pre> createdAt := since</pre></code></td></tr><tr><td>319</td><td><code><pre></pre></code></td></tr><tr><td>320</td><td><code><pre> for fi := int64(1); fi <= amount; fi++ {</pre></code></td></tr><tr><td>321</td><td><code><pre> createdAt = create</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_recordSuccess">func recordSuccess</div><div class="info"><a href="#s_fn_recordSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>232</td><td><code><pre>func recordSuccess(s *Service) {</pre></code></td></tr><tr><td>233</td><td><code><pre> s.Online = true</pre></code></td></tr><tr><td>234</td><td><code><pre> s.LastOnline = time.Now()</pre></code></td></tr><tr><td>235</td><td><code><pre> hit := &types.Hit{</pre></code></td></tr><tr><td>236</td><td><code><pre> Service: s.Id,</pre></code></td></tr><tr><td>237</td><td><code><pre> Latency: s.Latency,</pre></code></td></tr><tr><td>238</td><td><code><pre> PingTime: s.PingTime,</pre></code></td></tr><tr><td>239</td><td><code><pre> CreatedAt: time.Now(),</pre></code></td></tr><tr><td>240</td><td><code><pre> }</pre></code></td></tr><tr><td>241</td><td><code><pre> utils.Log(1, fmt.Sprintf("Service %v Successful Response: %0.2f ms | Lookup in: %0.2f ms", s.Name, hit.Latency*1000, hit.PingTime*1000))</pre></code></td></tr><tr><td>242</td><td><code><pre> s.CreateHit(hit)</pre></code></td></tr><tr><td>243</td><td><code><pre> notifier.OnSuccess(s.Service)</pre></code></td></tr><tr><td>244</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.CountOnline">func Core.CountOnline</div><div class="info"><a href="#s_fn_Core.CountOnline">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>363</td><td><code><pre>b := servicesDB().Create(u)</pre></code></td></tr><tr><td>364</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr><td>365</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to create service %v #%v: %v", u.Name, u.Id, db.Error))</pre></code></td></tr><tr><td>366</td><td><code><pre> ret</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_recordFailure">func recordFailure</div><div class="info"><a href="#s_fn_recordFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>247</td><td><code><pre>func recordFailure(s *Service, issue string) {</pre></code></td></tr><tr><td>248</td><td><code><pre> s.Online = false</pre></code></td></tr><tr><td>249</td><td><code><pre> fail := &types.Failure{</pre></code></td></tr><tr><td>250</td><td><code><pre> Service: s.Id,</pre></code></td></tr><tr><td>251</td><td><code><pre> Issue: issue,</pre></code></td></tr><tr><td>252</td><td><code><pre> PingTime: s.PingTime,</pre></code></td></tr><tr><td>253</td><td><code><pre> CreatedAt: time.Now(),</pre></code></td></tr><tr><td>254</td><td><code><pre> }</pre></code></td></tr><tr><td>255</td><td><code><pre> utils.Log(2, fmt.Sprintf("Service %v Failing: %v | Lookup in: %0.2f ms", s.Name, issue, fail.PingTime*1000))</pre></code></td></tr><tr><td>256</td><td><code><pre> s.CreateFailure(fail)</pre></code></td></tr><tr><td>257</td><td><code><pre> notifier.OnFailure(s.Service, fail)</pre></code></td></tr><tr><td>258</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.LimitedFailures">func Service.LimitedFailures</div><div class="info"><a href="#s_fn_Service.LimitedFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>68</td><td><code><pre>func (s *Service) LimitedFailures() []*Failure {</pre></code></td></tr><tr><td>69</td><td><code><pre> var failArr []*Failure</pre></code></td></tr><tr><td>70</td><td><code><pre> col := failuresDB().Where("service = ?", s.Id).Order("id desc").Limit(10)</pre></code></td></tr><tr><td>71</td><td><code><pre> col.Find(&failArr)</pre></code></td></tr><tr><td>72</td><td><code><pre> return failArr</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.LimitedHits">func Service.LimitedHits</div><div class="info"><a href="#s_fn_Service.LimitedHits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>47</td><td><code><pre>func (s *Service) LimitedHits() ([]*types.Hit, error) {</pre></code></td></tr><tr><td>48</td><td><code><pre> var hits []*types.Hit</pre></code></td></tr><tr><td>49</td><td><code><pre> col := hitsDB().Where("service = ?", s.Id).Order("id desc").Limit(1024)</pre></code></td></tr><tr><td>50</td><td><code><pre> err := col.Find(&hits)</pre></code></td></tr><tr><td>51</td><td><code><pre> return reverseHits(hits), err.Error</pre></code></td></tr><tr><td>52</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Hits">func Service.Hits</div><div class="info"><a href="#s_fn_Service.Hits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>39</td><td><code><pre>func (s *Service) Hits() ([]*types.Hit, error) {</pre></code></td></tr><tr><td>40</td><td><code><pre> var hits []*types.Hit</pre></code></td></tr><tr><td>41</td><td><code><pre> col := hitsDB().Where("service = ?", s.Id).Order("id desc")</pre></code></td></tr><tr><td>42</td><td><code><pre> err := col.Find(&hits)</pre></code></td></tr><tr><td>43</td><td><code><pre> return hits, err.Error</pre></code></td></tr><tr><td>44</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SelectUsername">func SelectUsername</div><div class="info"><a href="#s_fn_SelectUsername">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>43</td><td><code><pre>func SelectUsername(username string) (*User, error) {</pre></code></td></tr><tr><td>44</td><td><code><pre> var user User</pre></code></td></tr><tr><td>45</td><td><code><pre> res := usersDB().Where("username = ?", username)</pre></code></td></tr><tr><td>46</td><td><code><pre> err := res.First(&user)</pre></code></td></tr><tr><td>47</td><td><code><pre> return &user, err.Error</pre></code></td></tr><tr><td>48</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_NewCore">func NewCore</div><div class="info"><a href="#s_fn_NewCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>46</td><td><code><pre>// NewCore return a new *core.Core struct</pre></code></td></tr><tr><td>47</td><td><code><pre>func NewCore() *Core {</pre></code></td></tr><tr><td>48</td><td><code><pre> CoreApp = new(Core)</pre></code></td></tr><tr><td>49</td><td><code><pre> CoreApp.Core = new(types.Core)</pre></code></td></tr><tr><td>50</td><td><code><pre> Core</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_User.Update">func User.Update</div><div class="info"><a href="#s_fn_User.Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>56</td><td><code><pre>func (u *User) Update() error {</pre></code></td></tr><tr><td>57</td><td><code><pre> u.Password = utils.HashPassword(u.Password)</pre></code></td></tr><tr><td>58</td><td><code><pre> u.ApiKey = utils.NewSHA1Hash(5)</pre></code></td></tr><tr><td>59</td><td><code><pre> u.ApiSecret = utils.NewSHA1Hash(10)</pre></code></td></tr><tr><td>60</td><td><code><pre> return usersDB().Update(u).Error</pre></code></td></tr><tr><td>61</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.TotalHits">func Service.TotalHits</div><div class="info"><a href="#s_fn_Service.TotalHits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>63</td><td><code><pre>func (s *Service) TotalHits() (uint64, error) {</pre></code></td></tr><tr><td>64</td><td><code><pre> var count uint64</pre></code></td></tr><tr><td>65</td><td><code><pre> col := hitsDB().Where("service = ?", s.Id)</pre></code></td></tr><tr><td>66</td><td><code><pre> err := col.Count(&count)</pre></code></td></tr><tr><td>67</td><td><code><pre> return count, err.Error</pre></code></td></tr><tr><td>68</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.TotalHitsSince">func Service.TotalHitsSince</div><div class="info"><a href="#s_fn_Service.TotalHitsSince">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>71</td><td><code><pre>func (s *Service) TotalHitsSince(ago time.Time) (uint64, error) {</pre></code></td></tr><tr><td>72</td><td><code><pre> var count uint64</pre></code></td></tr><tr><td>73</td><td><code><pre> rows := hitsDB().Where("service = ? AND created_at > ?", s.Id, ago.UTC().Format("2006-01-02 15:04:05"))</pre></code></td></tr><tr><td>74</td><td><code><pre> err := rows.Count(&count)</pre></code></td></tr><tr><td>75</td><td><code><pre> return count, err.Error</pre></code></td></tr><tr><td>76</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_insertSampleUsers">func insertSampleUsers</div><div class="info"><a href="#s_fn_insertSampleUsers">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>153</td><td><code><pre></pre></code></td></tr><tr><td>154</td><td><code><pre> query := coreDB().Create(core)</pre></code></td></tr><tr><td>155</td><td><code><pre> return query.Error</pre></code></td></tr><tr><td>156</td><td><code><pre>}</pre></code></td></tr><tr><td>157</td><td><code><pre></pre></code></td></tr><tr><td>158</td><td><code><pre>// insertSampleUsers will create 2 admin users for a seed database</pre></code></td></tr><tr><td>159</td><td><code><pre>func insertSampleUsers() {</pre></code></td></tr><tr><td>160</td><td><code><pre> u2 := ReturnUser(&types.User{</pre></code></td></tr><tr><td>161</td><td><code><pre> Username: "testadmin",</pre></code></td></tr><tr><td>162</td><td><code><pre> Password: "password123",</pre></code></td></tr><tr><td>163</td><td><code><pre> Email: "info@betatude.com",</pre></code></td></tr><tr><td>164</td><td><code><pre> Admin: true,</pre></code></td></tr><tr><td>165</td><td><code><pre> })</pre></code></td></tr><tr><td>166</td><td><code><pre></pre></code></td></tr><tr><td>167</td><td><code><pre> u3 := ReturnUser(&types.User{</pre></code></td></tr><tr><td>168</td><td><code><pre> Username: "t</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.TotalFailuresSince">func Service.TotalFailuresSince</div><div class="info"><a href="#s_fn_Service.TotalFailuresSince">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>124</td><td><code><pre>func (s *Service) TotalFailuresSince(ago time.Time) (uint64, error) {</pre></code></td></tr><tr><td>125</td><td><code><pre> var count uint64</pre></code></td></tr><tr><td>126</td><td><code><pre> rows := failuresDB().Where("service = ? AND created_at > ?", s.Id, ago.UTC().Format("2006-01-02 15:04:05"))</pre></code></td></tr><tr><td>127</td><td><code><pre> err := rows.Count(&count)</pre></code></td></tr><tr><td>128</td><td><code><pre> return count, err.Error</pre></code></td></tr><tr><td>129</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_insertSampleCore">func insertSampleCore</div><div class="info"><a href="#s_fn_insertSampleCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>142</td><td><code><pre>// insertSampleCore will create a new Core for the seed</pre></code></td></tr><tr><td>143</td><td><code><pre>func insertSampleCore() error {</pre></code></td></tr><tr><td>144</td><td><code><pre> core := &types.Core{</pre></code></td></tr><tr><td>145</td><td><code><pre> Name: "Statup Sample Data",</pre></code></td></tr><tr><td>146</td><td><code><pre> Description: "This data is only used to testing",</pre></code></td></tr><tr><td>147</td><td><code><pre> ApiKey: "sample",</pre></code></td></tr><tr><td>148</td><td><code><pre> ApiSecret: "samplesecret",</pre></code></td></tr><tr><td>149</td><td><code><pre> Domain: "http://localhost:8080",</pre></code></td></tr><tr><td>150</td><td><code><pre> Version: "test",</pre></code></td></tr><tr><td>151</td><td><code><pre> CreatedAt: time.Now(),</pre></code></td></tr><tr><td>152</td><td><code><pre> UseCdn: false,</pre></code></td></tr><tr><td>153</td><td><code><pre></pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.Hits">func Checkin.Hits</div><div class="info"><a href="#s_fn_Checkin.Hits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>63</td><td><code><pre>_ := time.ParseDuration(fmt.Sprintf("%vs", u.GracePeriod))</pre></code></td></tr><tr><td>64</td><td><code><pre> return duration</pre></code></td></tr><tr><td>65</td><td><code><pre>}</pre></code></td></tr><tr><td>66</td><td><code><pre></pre></code></td></tr><tr><td>67</td><td><code><pre>// Expected returns the duration of when the serviec should receive a checkin</pre></code></td></tr><tr><td>68</td><td><code><pre>func </pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.Last">func Checkin.Last</div><div class="info"><a href="#s_fn_Checkin.Last">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>61</td><td><code><pre>n Grace Period (after service hasn't responded, wait a bit for a response)</pre></code></td></tr><tr><td>62</td><td><code><pre>func (u *Checkin) Grace() time.Duration {</pre></code></td></tr><tr><td>63</td><td><code><pre> duration</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_reverseHits">func reverseHits</div><div class="info"><a href="#s_fn_reverseHits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>55</td><td><code><pre>func reverseHits(input []*types.Hit) []*types.Hit {</pre></code></td></tr><tr><td>56</td><td><code><pre> if len(input) == 0 {</pre></code></td></tr><tr><td>57</td><td><code><pre> return input</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr><tr><td>59</td><td><code><pre> return append(reverseHits(input[1:]), input[0])</pre></code></td></tr><tr><td>60</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Checkins">func Service.Checkins</div><div class="info"><a href="#s_fn_Service.Checkins">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>45</td><td><code><pre> *Service {</pre></code></td></tr><tr><td>46</td><td><code><pre> for _, s := range CoreApp.Services {</pre></code></td></tr><tr><td>47</td><td><code><pre> if s.Select().Id == id {</pre></code></td></tr><tr><td>48</td><td><code><pre> return s.(*Service)</pre></code></td></tr><tr><td>49</td><td><code><pre> }</pre></code></td></tr><tr><td>50</td><td><code><pre> }</pre></code></td></tr><tr><td>51</td><td><code><pre> return nil</pre></code></td></tr><tr><td>52</td><td><code><pre>}</pre></code></td></tr><tr><td>53</td><td><code><pre></pre></code></td></tr><tr><td>54</td><td><code><pre>// Checkins will</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Check">func Service.Check</div><div class="info"><a href="#s_fn_Service.Check">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>222</td><td><code><pre>func (s *Service) Check(record bool) {</pre></code></td></tr><tr><td>223</td><td><code><pre> switch s.Type {</pre></code></td></tr><tr><td>224</td><td><code><pre> case "http":</pre></code></td></tr><tr><td>225</td><td><code><pre> s.checkHttp(record)</pre></code></td></tr><tr><td>226</td><td><code><pre> case "tcp":</pre></code></td></tr><tr><td>227</td><td><code><pre> s.checkTcp(record)</pre></code></td></tr><tr><td>228</td><td><code><pre> }</pre></code></td></tr><tr><td>229</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SelectUser">func SelectUser</div><div class="info"><a href="#s_fn_SelectUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>36</td><td><code><pre>func SelectUser(id int64) (*User, error) {</pre></code></td></tr><tr><td>37</td><td><code><pre> var user User</pre></code></td></tr><tr><td>38</td><td><code><pre> err := usersDB().First(&user, id)</pre></code></td></tr><tr><td>39</td><td><code><pre> return &user, err.Error</pre></code></td></tr><tr><td>40</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.BeforeCreate">func Checkin.BeforeCreate</div><div class="info"><a href="#s_fn_Checkin.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>131</td><td><code><pre>.Now().UTC()</pre></code></td></tr><tr><td>132</td><td><code><pre> }</pre></code></td></tr><tr><td>133</td><td><code><pre> return</pre></code></td></tr><tr><td>134</td><td><code><pre>}</pre></code></td></tr><tr><td>135</td><td><code><pre></pre></code></td></tr><tr><td>136</td><td><code><pre>// BeforeCreate for Failure will set CreatedAt to UTC</pre></code></td></tr><tr><td>137</td><td><code><pre>func (u *Failure) BeforeCreate() (err </pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.AfterFind">func Service.AfterFind</div><div class="info"><a href="#s_fn_Service.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>88</td><td><code><pre>bConfig) Close() error {</pre></code></td></tr><tr><td>89</td><td><code><pre> return DbSession.DB().Close()</pre></code></td></tr><tr><td>90</td><td><code><pre>}</pre></code></td></tr><tr><td>91</td><td><code><pre></pre></code></td></tr><tr><td>92</td><td><code><pre>// AfterFind for Service will set the timezone</pre></code></td></tr><tr><td>93</td><td><code><pre>func (s *</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_User.AfterFind">func User.AfterFind</div><div class="info"><a href="#s_fn_User.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>100</td><td><code><pre>t, CoreApp.Timezone)</pre></code></td></tr><tr><td>101</td><td><code><pre> return</pre></code></td></tr><tr><td>102</td><td><code><pre>}</pre></code></td></tr><tr><td>103</td><td><code><pre></pre></code></td></tr><tr><td>104</td><td><code><pre>// AfterFind for Failure will set the timezone</pre></code></td></tr><tr><td>105</td><td><code><pre>func (f *Failure) AfterFind() (er</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CheckinHit.Ago">func CheckinHit.Ago</div><div class="info"><a href="#s_fn_CheckinHit.Ago">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>126</td><td><code><pre>time.Now().Sub(time.Now()).Seconds()</pre></code></td></tr><tr><td>127</td><td><code><pre> if between > float64(c.Interval) {</pre></code></td></tr><tr><td>128</td><td><code><pre> fmt.Println("rechecking every 15 </pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.Grace">func Checkin.Grace</div><div class="info"><a href="#s_fn_Checkin.Grace">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>51</td><td><code><pre>heckinDB().Where("api_key = ?", api).First(&checkin)</pre></code></td></tr><tr><td>52</td><td><code><pre> return &checkin</pre></code></td></tr><tr><td>53</td><td><code><pre>}</pre></code></td></tr><tr><td>54</td><td><code><pre></pre></code></td></tr><tr><td>55</td><td><code><pre>// Period will return the duration of the Checkin interva</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.Period">func Checkin.Period</div><div class="info"><a href="#s_fn_Checkin.Period">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>46</td><td><code><pre></pre></code></td></tr><tr><td>47</td><td><code><pre></pre></code></td></tr><tr><td>48</td><td><code><pre>// SelectCheckin will find a Checkin based on the API supplied</pre></code></td></tr><tr><td>49</td><td><code><pre>func SelectCheckin(api string) *Checkin {</pre></code></td></tr><tr><td>50</td><td><code><pre> var checkin Checkin</pre></code></td></tr><tr><td>51</td><td><code><pre></pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CheckinHit.AfterFind">func CheckinHit.AfterFind</div><div class="info"><a href="#s_fn_CheckinHit.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>110</td><td><code><pre>timezone</pre></code></td></tr><tr><td>111</td><td><code><pre>func (u *User) AfterFind() (err error) {</pre></code></td></tr><tr><td>112</td><td><code><pre> u.CreatedAt = utils.Timezoner(u.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>113</td><td><code><pre> retur</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.AfterFind">func Checkin.AfterFind</div><div class="info"><a href="#s_fn_Checkin.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>105</td><td><code><pre>error) {</pre></code></td></tr><tr><td>106</td><td><code><pre> f.CreatedAt = utils.Timezoner(f.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>107</td><td><code><pre> return</pre></code></td></tr><tr><td>108</td><td><code><pre>}</pre></code></td></tr><tr><td>109</td><td><code><pre></pre></code></td></tr><tr><td>110</td><td><code><pre>// AfterFind for USer will set th</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_updateService">func updateService</div><div class="info"><a href="#s_fn_updateService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>292</td><td><code><pre>res) / float64(hits) * 100</pre></code></td></tr><tr><td>293</td><td><code><pre> percent = 100 - percent</pre></code></td></tr><tr><td>294</td><td><code><pre> if percent < 0 {</pre></code></td></tr><tr><td>295</td><td><code><pre> percent = 0</pre></code></td></tr><tr><td>296</td><td><code><pre> }</pre></code></td></tr><tr><td>297</td><td><code><pre> amount := fmt</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Failure.AfterFind">func Failure.AfterFind</div><div class="info"><a href="#s_fn_Failure.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>98</td><td><code><pre>rFind for Hit will set the timezone</pre></code></td></tr><tr><td>99</td><td><code><pre>func (s *Hit) AfterFind() (err error) {</pre></code></td></tr><tr><td>100</td><td><code><pre> s.CreatedAt = utils.Timezoner(s.Create</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CheckHash">func CheckHash</div><div class="info"><a href="#s_fn_CheckHash">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>105</td><td><code><pre>func CheckHash(password, hash string) bool {</pre></code></td></tr><tr><td>106</td><td><code><pre> err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))</pre></code></td></tr><tr><td>107</td><td><code><pre> return err == nil</pre></code></td></tr><tr><td>108</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_User.Delete">func User.Delete</div><div class="info"><a href="#s_fn_User.Delete">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>51</td><td><code><pre>func (u *User) Delete() error {</pre></code></td></tr><tr><td>52</td><td><code><pre> return usersDB().Delete(u).Error</pre></code></td></tr><tr><td>53</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_reorderServices">func reorderServices</div><div class="info"><a href="#s_fn_reorderServices">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>74</td><td><code><pre>vices = append(CoreApp.Services, service)</pre></code></td></tr><tr><td>75</td><td><code><pre> }</pre></code></td></tr><tr><td>76</td><td><code><pre> sort.Sort(ServiceOrder(</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>42</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>43</td><td><code><pre> CoreApp = NewCore()</pre></code></td></tr><tr><td>44</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ReturnCheckinHit">func ReturnCheckinHit</div><div class="info"><a href="#s_fn_ReturnCheckinHit">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>39</td><td><code><pre>turnCheckin(s *types.Checkin) *Checkin {</pre></code></td></tr><tr><td>40</td><td><code><pre> return &Checkin{Checkin: s}</pre></code></td></tr><tr><td>41</td><td><code><pre>}</pre></code></td></tr><tr><td>42</td><td><code><pre></pre></code></td></tr><tr><td>43</td><td><code><pre>// ReturnCheckinHit </pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_servicesDB">func servicesDB</div><div class="info"><a href="#s_fn_servicesDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>50</td><td><code><pre>func servicesDB() *gorm.DB {</pre></code></td></tr><tr><td>51</td><td><code><pre> return DbSession.Model(&types.Service{})</pre></code></td></tr><tr><td>52</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ServiceOrder.Len">func ServiceOrder.Len</div><div class="info"><a href="#s_fn_ServiceOrder.Len">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>153</td><td><code><pre>ore([]byte(core.ApiSecret))</pre></code></td></tr><tr><td>154</td><td><code><pre> return CoreApp, db.Error</pre></code></td></tr><tr><td>155</td><td><code><pre>}</pre></code></td></tr><tr><td>156</td><td><code><pre></pre></code></td></tr><tr><td>157</td><td><code><pre>//</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ServiceOrder.Swap">func ServiceOrder.Swap</div><div class="info"><a href="#s_fn_ServiceOrder.Swap">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>157</td><td><code><pre>ServiceOrder will reorder the services based on 'order_id' (Order)</pre></code></td></tr><tr><td>158</td><td><code><pre>ty</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ServiceOrder.Less">func ServiceOrder.Less</div><div class="info"><a href="#s_fn_ServiceOrder.Less">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>158</td><td><code><pre>e ServiceOrder []types.ServiceInterface</pre></code></td></tr><tr><td>159</td><td><code><pre></pre></code></td></tr><tr><td>160</td><td><code><pre>func (c ServiceOrder) Len() int { return len(c)</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_failuresDB">func failuresDB</div><div class="info"><a href="#s_fn_failuresDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>40</td><td><code><pre>func failuresDB() *gorm.DB {</pre></code></td></tr><tr><td>41</td><td><code><pre> return DbSession.Model(&types.Failure{})</pre></code></td></tr><tr><td>42</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_hitsDB">func hitsDB</div><div class="info"><a href="#s_fn_hitsDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>45</td><td><code><pre>func hitsDB() *gorm.DB {</pre></code></td></tr><tr><td>46</td><td><code><pre> return DbSession.Model(&types.Hit{})</pre></code></td></tr><tr><td>47</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Select">func Service.Select</div><div class="info"><a href="#s_fn_Service.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>34</td><td><code><pre>// Select will return the *types.Service struct for Service</pre></code></td></tr><tr><td>35</td><td><code><pre>fun</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_coreDB">func coreDB</div><div class="info"><a href="#s_fn_coreDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>55</td><td><code><pre>func coreDB() *gorm.DB {</pre></code></td></tr><tr><td>56</td><td><code><pre> return DbSession.Table("core").Model(&CoreApp)</pre></code></td></tr><tr><td>57</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_usersDB">func usersDB</div><div class="info"><a href="#s_fn_usersDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>60</td><td><code><pre>func usersDB() *gorm.DB {</pre></code></td></tr><tr><td>61</td><td><code><pre> return DbSession.Model(&types.User{})</pre></code></td></tr><tr><td>62</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_checkinDB">func checkinDB</div><div class="info"><a href="#s_fn_checkinDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>65</td><td><code><pre>func checkinDB() *gorm.DB {</pre></code></td></tr><tr><td>66</td><td><code><pre> return DbSession.Model(&types.Checkin{})</pre></code></td></tr><tr><td>67</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_checkinHitsDB">func checkinHitsDB</div><div class="info"><a href="#s_fn_checkinHitsDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>70</td><td><code><pre>func checkinHitsDB() *gorm.DB {</pre></code></td></tr><tr><td>71</td><td><code><pre> return DbSession.Model(&types.CheckinHit{})</pre></code></td></tr><tr><td>72</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ReturnService">func ReturnService</div><div class="info"><a href="#s_fn_ReturnService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>35</td><td><code><pre>(s *Service) Select() *types.Service {</pre></code></td></tr><tr><td>36</td><td><code><pre> return s.Service</pre></code></td></tr><tr><td>37</td><td><code><pre>}</pre></code></td></tr><tr><td>38</td><td><code><pre></pre></code></td></tr><tr><td>39</td><td><code><pre>// Return</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ReturnUser">func ReturnUser</div><div class="info"><a href="#s_fn_ReturnUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>31</td><td><code><pre>func ReturnUser(u *types.User) *User {</pre></code></td></tr><tr><td>32</td><td><code><pre> return &User{u}</pre></code></td></tr><tr><td>33</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.Close">func DbConfig.Close</div><div class="info"><a href="#s_fn_DbConfig.Close">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>83</td><td><code><pre>).Close()</pre></code></td></tr><tr><td>84</td><td><code><pre> }</pre></code></td></tr><tr><td>85</td><td><code><pre>}</pre></code></td></tr><tr><td>86</td><td><code><pre></pre></code></td></tr><tr><td>87</td><td><code><pre>// Close shutsdown the database connection</pre></code></td></tr><tr><td>88</td><td><code><pre>func (db </pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ReturnCheckin">func ReturnCheckin</div><div class="info"><a href="#s_fn_ReturnCheckin">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>35</td><td><code><pre>n c.ApiKey</pre></code></td></tr><tr><td>36</td><td><code><pre>}</pre></code></td></tr><tr><td>37</td><td><code><pre></pre></code></td></tr><tr><td>38</td><td><code><pre>// ReturnCheckin converts *types.Checking to *core.Checkin</pre></code></td></tr><tr><td>39</td><td><code><pre>func </pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.parseHost">func Service.parseHost</div><div class="info"><a href="#s_fn_Service.parseHost">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>77</td><td><code><pre>func (s *Service) parseHost() string {</pre></code></td></tr><tr><td>78</td><td><code><pre> if s.Type == "tcp" {</pre></code></td></tr><tr><td>79</td><td><code><pre> return s.Domain</pre></code></td></tr><tr><td>80</td><td><code><pre> } else {</pre></code></td></tr><tr><td>81</td><td><code><pre> domain := s.Domain</pre></code></td></tr><tr><td>82</td><td><code><pre> hasPort, _ := regexp.MatchString(`\:([0-9]+)`, domain)</pre></code></td></tr><tr><td>83</td><td><code><pre> if hasPort {</pre></code></td></tr><tr><td>84</td><td><code><pre> splitDomain := strings.Split(s.Domain, ":")</pre></code></td></tr><tr><td>85</td><td><code><pre> domain = splitDomain[len(splitDomain)-2]</pre></code></td></tr><tr><td>86</td><td><code><pre> }</pre></code></td></tr><tr><td>87</td><td><code><pre> host, err := url.Parse(domain)</pre></code></td></tr><tr><td>88</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> return s.Domain</pre></code></td></tr><tr><td>90</td><td><code><pre> }</pre></code></td></tr><tr><td>91</td><td><code><pre> return host.Host</pre></code></td></tr><tr><td>92</td><td><code><pre> }</pre></code></td></tr><tr><td>93</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Sum">func Service.Sum</div><div class="info"><a href="#s_fn_Service.Sum">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>79</td><td><code><pre>func (s *Service) Sum() (float64, error) {</pre></code></td></tr><tr><td>80</td><td><code><pre> var amount float64</pre></code></td></tr><tr><td>81</td><td><code><pre> hits, err := s.Hits()</pre></code></td></tr><tr><td>82</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr><td>84</td><td><code><pre> }</pre></code></td></tr><tr><td>85</td><td><code><pre> for _, h := range hits {</pre></code></td></tr><tr><td>86</td><td><code><pre> amount += h.Latency</pre></code></td></tr><tr><td>87</td><td><code><pre> }</pre></code></td></tr><tr><td>88</td><td><code><pre> return amount, err</pre></code></td></tr><tr><td>89</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Update">func Service.Update</div><div class="info"><a href="#s_fn_Service.Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>325</td><td><code><pre>Error))</pre></code></td></tr><tr><td>326</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>327</td><td><code><pre> }</pre></code></td></tr><tr><td>328</td><td><code><pre> u.Close()</pre></code></td></tr><tr><td>329</td><td><code><pre> slice := CoreApp.Services</pre></code></td></tr><tr><td>330</td><td><code><pre> CoreApp.Services = append(slice[:i], slice[i+1:]...)</pre></code></td></tr><tr><td>331</td><td><code><pre> reorderServices()</pre></code></td></tr><tr><td>332</td><td><code><pre> notifier.OnDeletedService(u.Service)</pre></code></td></tr><tr class="miss"><td>333</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>334</td><td><code><pre>}</pre></code></td></tr><tr><td>335</td><td><code><pre></pre></code></td></tr><tr><td>336</td><td><code><pre>// UpdateSingle will update a single column for a service</pre></code></td></tr><tr><td>337</td><td><code><pre>func (u *Service) UpdateSingle(attr ...interface{}) error {</pre></code></td></tr><tr><td>338</td><td><code><pre> return servicesDB().Model(u).Update(attr).Error</pre></code></td></tr><tr><td>339</td><td><code><pre>}</pre></code></td></tr><tr><td>340</td><td><code><pre></pre></code></td></tr><tr><td>341</td><td><code><pre>// Update will update a service in the database,</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.SelectAllServices">func Core.SelectAllServices</div><div class="info"><a href="#s_fn_Core.SelectAllServices">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>57</td><td><code><pre>service = ?", s.Id).Find(&checkin)</pre></code></td></tr><tr><td>58</td><td><code><pre> return checkin</pre></code></td></tr><tr><td>59</td><td><code><pre>}</pre></code></td></tr><tr><td>60</td><td><code><pre></pre></code></td></tr><tr><td>61</td><td><code><pre>// SelectAllServices returns a slice of *core.Service to be store on []*core.Services, should only be called once on startup.</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre>func (c *Core) SelectAllServices() ([]*Service, error) {</pre></code></td></tr><tr><td>63</td><td><code><pre> var services []*Service</pre></code></td></tr><tr><td>64</td><td><code><pre> db := servicesDB().Find(&services).Order("order_id desc")</pre></code></td></tr><tr><td>65</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr><td>66</td><td><code><pre> utils.Log(3, fmt.Sprintf("service error: %v", db.Error))</pre></code></td></tr><tr><td>67</td><td><code><pre> return nil, db.Error</pre></code></td></tr><tr><td>68</td><td><code><pre> }</pre></code></td></tr><tr><td>69</td><td><code><pre> CoreApp.Services = nil</pre></code></td></tr><tr><td>70</td><td><code><pre> for _, service := range services {</pre></code></td></tr><tr><td>71</td><td><code><pre> service.St</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Create">func Service.Create</div><div class="info"><a href="#s_fn_Service.Create">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>342</td><td><code><pre>unc (u *Service) Update(restart bool) error {</pre></code></td></tr><tr><td>343</td><td><code><pre> err := servicesDB().Update(u)</pre></code></td></tr><tr><td>344</td><td><code><pre> if err.Error != nil {</pre></code></td></tr><tr><td>345</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to update service %v. %v", u.Name, err))</pre></code></td></tr><tr><td>346</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>347</td><td><code><pre> }</pre></code></td></tr><tr><td>348</td><td><code><pre> if restart {</pre></code></td></tr><tr><td>349</td><td><code><pre> u.Close()</pre></code></td></tr><tr class="miss"><td>350</td><td><code><pre> u.Start()</pre></code></td></tr><tr><td>351</td><td><code><pre> u.SleepDuration = time.Duration(u.Interval) * time.Second</pre></code></td></tr><tr><td>352</td><td><code><pre> go u.CheckQueue(true)</pre></code></td></tr><tr><td>353</td><td><code><pre> }</pre></code></td></tr><tr><td>354</td><td><code><pre> reorderServices()</pre></code></td></tr><tr><td>355</td><td><code><pre> updateService(u)</pre></code></td></tr><tr><td>356</td><td><code><pre> notifier.OnUpdatedService(u.Service)</pre></code></td></tr><tr><td>357</td><td><code><pre> ret</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Delete">func Service.Delete</div><div class="info"><a href="#s_fn_Service.Delete">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>304</td><td><code><pre>urns a services index int for updating the []*core.Services slice</pre></code></td></tr><tr><td>305</td><td><code><pre>func (s *Service) index() int {</pre></code></td></tr><tr class="miss"><td>306</td><td><code><pre> for k, service := range CoreApp.Services {</pre></code></td></tr><tr><td>307</td><td><code><pre> if s.Id == service.(*Service).Id {</pre></code></td></tr><tr class="miss"><td>308</td><td><code><pre> return k</pre></code></td></tr><tr><td>309</td><td><code><pre> }</pre></code></td></tr><tr><td>310</td><td><code><pre> }</pre></code></td></tr><tr><td>311</td><td><code><pre> return 0</pre></code></td></tr><tr><td>312</td><td><code><pre>}</pre></code></td></tr><tr><td>313</td><td><code><pre></pre></code></td></tr><tr><td>314</td><td><code><pre>// updateService will update a service in the []*core.Services slice</pre></code></td></tr><tr><td>315</td><td><code><pre>func updateService(service *Service) {</pre></code></td></tr><tr><td>316</td><td><code><pre> index := service.index()</pre></code></td></tr><tr><td>317</td><td><code><pre> CoreApp.Services[index] = servi</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.OnlineSince">func Service.OnlineSince</div><div class="info"><a href="#s_fn_Service.OnlineSince">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>105</td><td><code><pre>line24() float32 {</pre></code></td></tr><tr><td>106</td><td><code><pre> ago := time.Now().Add(-24 * time.Hour)</pre></code></td></tr><tr><td>107</td><td><code><pre> return s.OnlineSince(ago)</pre></code></td></tr><tr><td>108</td><td><code><pre>}</pre></code></td></tr><tr><td>109</td><td><code><pre></pre></code></td></tr><tr><td>110</td><td><code><pre>// OnlineSince accepts a time since parameter to return the percent of a service's uptime.</pre></code></td></tr><tr><td>111</td><td><code><pre>func (s *Service) OnlineSince(ago time.Time) float32 {</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> failed, _ := s.TotalFailuresSince(ago)</pre></code></td></tr><tr><td>113</td><td><code><pre> if failed == 0 {</pre></code></td></tr><tr><td>114</td><td><code><pre> s.Online24Hours = 100.00</pre></code></td></tr><tr><td>115</td><td><code><pre> return s.Online24Hours</pre></code></td></tr><tr><td>116</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> total, _ := s.TotalHitsSince(ago)</pre></code></td></tr><tr><td>118</td><td><code><pre> if total == 0 {</pre></code></td></tr><tr><td>119</td><td><code><pre> s.Online24Hours = 0</pre></code></td></tr><tr><td>120</td><td><code><pre> return s.Online24Hours</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr><td>122</td><td><code><pre> avg := float64(failed) / float64(t</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.duration">func Service.duration</div><div class="info"><a href="#s_fn_Service.duration">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>67</td><td><code><pre>func (s *Service) duration() time.Duration {</pre></code></td></tr><tr><td>68</td><td><code><pre> var amount time.Duration</pre></code></td></tr><tr><td>69</td><td><code><pre> if s.Interval >= 10000 {</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> amount = time.Duration(s.Interval) * time.Microsecond</pre></code></td></tr><tr><td>71</td><td><code><pre> } else {</pre></code></td></tr><tr><td>72</td><td><code><pre> amount = time.Duration(s.Interval) * time.Second</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> return amount</pre></code></td></tr><tr><td>75</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SelectAllUsers">func SelectAllUsers</div><div class="info"><a href="#s_fn_SelectAllUsers">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>81</td><td><code><pre>func SelectAllUsers() ([]*User, error) {</pre></code></td></tr><tr><td>82</td><td><code><pre> var users []*User</pre></code></td></tr><tr><td>83</td><td><code><pre> db := usersDB().Find(&users)</pre></code></td></tr><tr><td>84</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to load all users. %v", db.Error))</pre></code></td></tr><tr><td>86</td><td><code><pre> }</pre></code></td></tr><tr><td>87</td><td><code><pre> return users, db.Error</pre></code></td></tr><tr><td>88</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.AvgUptime">func Service.AvgUptime</div><div class="info"><a href="#s_fn_Service.AvgUptime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>248</td><td><code><pre>tring {</pre></code></td></tr><tr><td>249</td><td><code><pre> start := time.Now().Add((-24 * 7) * time.Hour)</pre></code></td></tr><tr><td>250</td><td><code><pre> end := time.Now()</pre></code></td></tr><tr><td>251</td><td><code><pre> obj := GraphDataRaw(s, start, end, "hour", "latency")</pre></code></td></tr><tr><td>252</td><td><code><pre> data, err := json.Marshal(obj)</pre></code></td></tr><tr><td>253</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>254</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr><td>255</td><td><code><pre> return ""</pre></code></td></tr><tr><td>256</td><td><code><pre> }</pre></code></td></tr><tr><td>257</td><td><code><pre> return string(data)</pre></code></td></tr><tr><td>258</td><td><code><pre>}</pre></code></td></tr><tr><td>259</td><td><code><pre></pre></code></td></tr><tr><td>260</td><td><code><pre>// AvgUptime24 returns a service's average online status for last 24 hours</pre></code></td></tr><tr><td>261</td><td><code><pre>func (s *Service) AvgUptime24() string {</pre></code></td></tr><tr class="miss"><td>262</td><td><code><pre> ago := time.Now().Add(-24 * time.Hour)</pre></code></td></tr><tr><td>263</td><td><code><pre> return s.AvgUptim</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.AllFailures">func Service.AllFailures</div><div class="info"><a href="#s_fn_Service.AllFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>44</td><td><code><pre>func (s *Service) AllFailures() []*Failure {</pre></code></td></tr><tr><td>45</td><td><code><pre> var fails []*Failure</pre></code></td></tr><tr><td>46</td><td><code><pre> col := failuresDB().Where("service = ?", s.Id).Order("id desc")</pre></code></td></tr><tr><td>47</td><td><code><pre> err := col.Find(&fails)</pre></code></td></tr><tr><td>48</td><td><code><pre> if err.Error != nil {</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> utils.Log(3, fmt.Sprintf("Issue getting failures for service %v, %v", s.Name, err))</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> return nil</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr><td>52</td><td><code><pre> for _, f := range fails {</pre></code></td></tr><tr><td>53</td><td><code><pre> s.Failures = append(s.Failures, f)</pre></code></td></tr><tr><td>54</td><td><code><pre> }</pre></code></td></tr><tr><td>55</td><td><code><pre> return fails</pre></code></td></tr><tr><td>56</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Downtime">func Service.Downtime</div><div class="info"><a href="#s_fn_Service.Downtime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>193</td><td><code><pre>datetime((strftime('%%s', created_at) / %v) * %v, 'unixepoch') AS timeframe, AVG(%v) as value", seconds, seconds, column)</pre></code></td></tr><tr><td>194</td><td><code><pre> case "postgres":</pre></code></td></tr><tr><td>195</td><td><code><pre> return fmt.Sprintf("date_trunc('%v', created_at) AS timeframe, AVG(%v) AS value", group, column)</pre></code></td></tr><tr><td>196</td><td><code><pre> default:</pre></code></td></tr><tr><td>197</td><td><code><pre> return ""</pre></code></td></tr><tr><td>198</td><td><code><pre> }</pre></code></td></tr><tr><td>199</td><td><code><pre>}</pre></code></td></tr><tr><td>200</td><td><code><pre></pre></code></td></tr><tr><td>201</td><td><code><pre>// Downtime returns the amount of time of a offlin</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SelectService">func SelectService</div><div class="info"><a href="#s_fn_SelectService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>40</td><td><code><pre>ReturnService(s *types.Service) *Service {</pre></code></td></tr><tr><td>41</td><td><code><pre> return &Service{s}</pre></code></td></tr><tr><td>42</td><td><code><pre>}</pre></code></td></tr><tr><td>43</td><td><code><pre></pre></code></td></tr><tr><td>44</td><td><code><pre>// SelectService returns a *core.Service from in memory</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre>func SelectService(id int6</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.index">func Service.index</div><div class="info"><a href="#s_fn_Service.index">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>283</td><td><code><pre>"100"</pre></code></td></tr><tr><td>284</td><td><code><pre> }</pre></code></td></tr><tr><td>285</td><td><code><pre> return amount</pre></code></td></tr><tr><td>286</td><td><code><pre>}</pre></code></td></tr><tr><td>287</td><td><code><pre></pre></code></td></tr><tr><td>288</td><td><code><pre>// TotalUptime returns the total uptime percent of a service</pre></code></td></tr><tr><td>289</td><td><code><pre>func (s *Service) TotalUptime() string {</pre></code></td></tr><tr class="miss"><td>290</td><td><code><pre> hits, _ := s.</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.checkHttp">func Service.checkHttp</div><div class="info"><a href="#s_fn_Service.checkHttp">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>151</td><td><code><pre>func (s *Service) checkHttp(record bool) *Service {</pre></code></td></tr><tr><td>152</td><td><code><pre> dnsLookup, err := s.dnsCheck()</pre></code></td></tr><tr><td>153</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>154</td><td><code><pre> if record {</pre></code></td></tr><tr><td>155</td><td><code><pre> recordFailure(s, fmt.Sprintf("Could not get IP address for domain %v, %v", s.Domain, err))</pre></code></td></tr><tr><td>156</td><td><code><pre> }</pre></code></td></tr><tr><td>157</td><td><code><pre> return s</pre></code></td></tr><tr><td>158</td><td><code><pre> }</pre></code></td></tr><tr><td>159</td><td><code><pre> s.PingTime = dnsLookup</pre></code></td></tr><tr><td>160</td><td><code><pre> t1 := time.Now()</pre></code></td></tr><tr><td>161</td><td><code><pre> timeout := time.Duration(s.Timeout)</pre></code></td></tr><tr><td>162</td><td><code><pre> client := http.Client{</pre></code></td></tr><tr><td>163</td><td><code><pre> Timeout: timeout * time.Second,</pre></code></td></tr><tr><td>164</td><td><code><pre> }</pre></code></td></tr><tr><td>165</td><td><code><pre></pre></code></td></tr><tr><td>166</td><td><code><pre> var response *http.Response</pre></code></td></tr><tr><td>167</td><td><code><pre> if s.Method == "POST" {</pre></code></td></tr><tr><td>168</td><td><code><pre> response, err = client.Post(s.Domain, "application/json", bytes.NewBuffer([]byte(s.PostData)))</pre></code></td></tr><tr><td>169</td><td><code><pre> } else {</pre></code></td></tr><tr><td>170</td><td><code><pre> response, err = client.Get(s.Domain)</pre></code></td></tr><tr><td>171</td><td><code><pre> }</pre></code></td></tr><tr><td>172</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>173</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>174</td><td><code><pre> recordFailure(s, fmt.Sprintf("HTTP Error %v", err))</pre></code></td></tr><tr><td>175</td><td><code><pre> }</pre></code></td></tr><tr><td>176</td><td><code><pre> return s</pre></code></td></tr><tr><td>177</td><td><code><pre> }</pre></code></td></tr><tr><td>178</td><td><code><pre> response.Header.Set("Connection", "close")</pre></code></td></tr><tr><td>179</td><td><code><pre> response.Header.Set("User-Agent", "StatupMonitor")</pre></code></td></tr><tr><td>180</td><td><code><pre> t2 := time.Now()</pre></code></td></tr><tr><td>181</td><td><code><pre> s.Latency = t2.Sub(t1).Seconds()</pre></code></td></tr><tr><td>182</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>184</td><td><code><pre> recordFailure(s, fmt.Sprintf("HTTP Error %v", err))</pre></code></td></tr><tr><td>185</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>186</td><td><code><pre> return s</pre></code></td></tr><tr><td>187</td><td><code><pre> }</pre></code></td></tr><tr><td>188</td><td><code><pre> defer response.Body.Close()</pre></code></td></tr><tr><td>189</td><td><code><pre> contents, err := ioutil.ReadAll(response.Body)</pre></code></td></tr><tr><td>190</td><td><code><pre> s.LastResponse = string(contents)</pre></code></td></tr><tr><td>191</td><td><code><pre> s.LastStatusCode = response.StatusCode</pre></code></td></tr><tr><td>192</td><td><code><pre></pre></code></td></tr><tr><td>193</td><td><code><pre> if s.Expected != "" {</pre></code></td></tr><tr><td>194</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>195</td><td><code><pre> utils.Log(2, err)</pre
|
||
|
|
||
|
<div class="funcname" id="fn_User.Create">func User.Create</div><div class="info"><a href="#s_fn_User.Create">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>64</td><td><code><pre>func (u *User) Create() (int64, error) {</pre></code></td></tr><tr><td>65</td><td><code><pre> u.CreatedAt = time.Now()</pre></code></td></tr><tr><td>66</td><td><code><pre> u.Password = utils.HashPassword(u.Password)</pre></code></td></tr><tr><td>67</td><td><code><pre> u.ApiKey = utils.NewSHA1Hash(5)</pre></code></td></tr><tr><td>68</td><td><code><pre> u.ApiSecret = utils.NewSHA1Hash(10)</pre></code></td></tr><tr><td>69</td><td><code><pre> db := usersDB().Create(u)</pre></code></td></tr><tr><td>70</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> return 0, db.Error</pre></code></td></tr><tr><td>72</td><td><code><pre> }</pre></code></td></tr><tr><td>73</td><td><code><pre> if u.Id == 0 {</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to create user %v. %v", u.Username, db.Error))</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> return 0, db.Error</pre></code></td></tr><tr><td>76</td><td><code><pre> }</pre></code></td></tr><tr><td>77</td><td><code><pre> return u.Id, db.Error</pre></code></td></tr><tr><td>78</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.checkTcp">func Service.checkTcp</div><div class="info"><a href="#s_fn_Service.checkTcp">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>114</td><td><code><pre>func (s *Service) checkTcp(record bool) *Service {</pre></code></td></tr><tr><td>115</td><td><code><pre> dnsLookup, err := s.dnsCheck()</pre></code></td></tr><tr><td>116</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> recordFailure(s, fmt.Sprintf("Could not get IP address for TCP service %v, %v", s.Domain, err))</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return s</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr><td>122</td><td><code><pre> s.PingTime = dnsLookup</pre></code></td></tr><tr><td>123</td><td><code><pre> t1 := time.Now()</pre></code></td></tr><tr><td>124</td><td><code><pre> domain := fmt.Sprintf("%v", s.Domain)</pre></code></td></tr><tr><td>125</td><td><code><pre> if s.Port != 0 {</pre></code></td></tr><tr><td>126</td><td><code><pre> domain = fmt.Sprintf("%v:%v", s.Domain, s.Port)</pre></code></td></tr><tr><td>127</td><td><code><pre> }</pre></code></td></tr><tr><td>128</td><td><code><pre> conn, err := net.DialTimeout("tcp", domain, time.Duration(s.Timeout)*time.Second)</pre></code></td></tr><tr><td>129</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>130</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>131</td><td><code><pre> recordFailure(s, fmt.Sprintf("TCP Dial Error %v", err))</pre></code></td></tr><tr><td>132</td><td><code><pre> }</pre></code></td></tr><tr><td>133</td><td><code><pre> return s</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr><tr><td>135</td><td><code><pre> if err := conn.Close(); err != nil {</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> recordFailure(s, fmt.Sprintf("TCP Socket Close Error %v", err))</pre></code></td></tr><tr><td>138</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre> return s</pre></code></td></tr><tr><td>140</td><td><code><pre> }</pre></code></td></tr><tr><td>141</td><td><code><pre> t2 := time.Now()</pre></code></td></tr><tr><td>142</td><td><code><pre> s.Latency = t2.Sub(t1).Seconds()</pre></code></td></tr><tr><td>143</td><td><code><pre> s.LastResponse = ""</pre></code></td></tr><tr><td>144</td><td><code><pre> if record {</pre></code></td></tr><tr><td>145</td><td><code><pre> recordSuccess(s)</pre></code></td></tr><tr><td>146</td><td><code><pre> }</pre></code></td></tr><tr><td>147</td><td><code><pre> return s</pre></code></td></tr><tr><td>148</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.Save">func DbConfig.Save</div><div class="info"><a href="#s_fn_DbConfig.Save">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>252</td><td><code><pre>eteAllSince("hits", since)</pre></code></td></tr><tr><td>253</td><td><code><pre> }</pre></code></td></tr><tr><td>254</td><td><code><pre>}</pre></code></td></tr><tr><td>255</td><td><code><pre></pre></code></td></tr><tr><td>256</td><td><code><pre>// DeleteAllSince will delete a specific table's records based on a time.</pre></code></td></tr><tr><td>257</td><td><code><pre>func DeleteAllSince(table string, date time.Time) {</pre></code></td></tr><tr><td>258</td><td><code><pre> sql := fmt.Sprintf("DELETE FROM %v WHERE created_at < '%v';", table, date.Format("2006-01-02"))</pre></code></td></tr><tr><td>259</td><td><code><pre> db := DbSession.Raw(sql)</pre></code></td></tr><tr class="miss"><td>260</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>261</td><td><code><pre> utils.Log(2, db.Error)</pre></code></td></tr><tr><td>262</td><td><code><pre> }</pre></code></td></tr><tr><td>263</td><td><code><pre>}</pre></code></td></tr><tr><td>264</td><td><code><pre></pre></code></td></tr><tr><td>265</td><td><code><pre>// Update will save the config.yml file</pre></code></td></tr><tr><td>266</td><td><code><pre>func (c *DbConfig) Update() error {</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_AuthUser">func AuthUser</div><div class="info"><a href="#s_fn_AuthUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>92</td><td><code><pre>func AuthUser(username, password string) (*User, bool) {</pre></code></td></tr><tr><td>93</td><td><code><pre> user, err := SelectUsername(username)</pre></code></td></tr><tr><td>94</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre> return nil, false</pre></code></td></tr><tr><td>97</td><td><code><pre> }</pre></code></td></tr><tr><td>98</td><td><code><pre> if CheckHash(password, user.Password) {</pre></code></td></tr><tr><td>99</td><td><code><pre> return user, true</pre></code></td></tr><tr><td>100</td><td><code><pre> }</pre></code></td></tr><tr><td>101</td><td><code><pre> return nil, false</pre></code></td></tr><tr><td>102</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.CreateFailure">func Service.CreateFailure</div><div class="info"><a href="#s_fn_Service.CreateFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>32</td><td><code><pre>func (s *Service) CreateFailure(f *types.Failure) (int64, error) {</pre></code></td></tr><tr><td>33</td><td><code><pre> f.Service = s.Id</pre></code></td></tr><tr><td>34</td><td><code><pre> s.Failures = append(s.Failures, f)</pre></code></td></tr><tr><td>35</td><td><code><pre> row := failuresDB().Create(f)</pre></code></td></tr><tr><td>36</td><td><code><pre> if row.Error != nil {</pre></code></td></tr><tr class="miss"><td>37</td><td><code><pre> utils.Log(3, row.Error)</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> return 0, row.Error</pre></code></td></tr><tr><td>39</td><td><code><pre> }</pre></code></td></tr><tr><td>40</td><td><code><pre> return f.Id, row.Error</pre></code></td></tr><tr><td>41</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SelectCore">func SelectCore</div><div class="info"><a href="#s_fn_SelectCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>127</td><td><code><pre>eApp.Services {</pre></code></td></tr><tr><td>128</td><td><code><pre> if !s.Select().Online {</pre></code></td></tr><tr><td>129</td><td><code><pre> return false</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> }</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr><tr><td>132</td><td><code><pre> return true</pre></code></td></tr><tr><td>133</td><td><code><pre>}</pre></code></td></tr><tr><td>134</td><td><code><pre></pre></code></td></tr><tr><td>135</td><td><code><pre>// SelectCore will return the CoreApp global variable and the settings/configs for Statup</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre>func SelectCore() (*Core, error) {</pre></code></td></tr><tr><td>137</td><td><code><pre> if DbSession == nil {</pre></code></td></tr><tr><td>138</td><td><code><pre> return nil, errors.New("database has not been initiated yet.")</pre></code></td></tr><tr><td>139</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> exists := DbSession.HasTable("core")</pre></code></td></tr><tr><td>141</td><td><code><pre> if !exists {</pre></code></td></tr><tr><td>142</td><td><code><pre> return nil, errors.New("core database has not been setup yet.")</pre></code></td></tr><tr><td>143</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>144</td><td><code><pre> db := coreDB().First(&CoreApp)</pre></code></td></tr><tr><td>145</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr><td>146</td><td><code><pre> return nil, db.Error</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr><tr><td>148</td><td><code><pre> CoreApp.DbConnection = Configs.DbConn</pre></code></td></tr><tr><td>149</td><td><code><pre> CoreA</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_LoadConfig">func LoadConfig</div><div class="info"><a href="#s_fn_LoadConfig">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/configs.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>33</td><td><code><pre>pt to load the 'config.yml' file in a specific directory</pre></code></td></tr><tr><td>34</td><td><code><pre>func LoadConfig(directory string) (*DbConfig, error) {</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> var configs *DbConfig</pre></code></td></tr><tr><td>36</td><td><code><pre> if os.Getenv("DB_CONN") != "" {</pre></code></td></tr><tr class="miss"><td>37</td><td><code><pre> utils.Log(1, "DB_CONN environment variable was found, waiting for database...")</pre></code></td></tr><tr><td>38</td><td><code><pre> return LoadUsingEnv()</pre></code></td></tr><tr><td>39</td><td><code><pre> }</pre></code></td></tr><tr><td>40</td><td><code><pre> file, err := ioutil.ReadFile(directory + "/config.yml")</pre></code></td></tr><tr><td>41</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>42</td><td><code><pre> return nil, errors.New("config.yml file not found at " + directory + "/config.yml - starting in setup mode")</pre></code></td></tr><tr><td>43</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> err = yaml.Unmarshal(file, &configs)</pre></code></td></tr><tr><td>45</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>46</td><td><code><pre> ret</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.MigrateDatabase">func DbConfig.MigrateDatabase</div><div class="info"><a href="#s_fn_DbConfig.MigrateDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>341</td><td><code><pre> utils.Log(1, "Creating Database Tables...")</pre></code></td></tr><tr><td>342</td><td><code><pre> err := DbSession.CreateTable(&types.Checkin{})</pre></code></td></tr><tr><td>343</td><td><code><pre> err = DbSession.CreateTable(&types.CheckinHit{})</pre></code></td></tr><tr><td>344</td><td><code><pre> err = DbSession.CreateTable(&notifier.Notification{})</pre></code></td></tr><tr class="miss"><td>345</td><td><code><pre> err = DbSession.Table("core").CreateTable(&types.Core{})</pre></code></td></tr><tr><td>346</td><td><code><pre> err = DbSession.CreateTable(&types.Failure{})</pre></code></td></tr><tr><td>347</td><td><code><pre> err = DbSession.CreateTable(&types.Hit{})</pre></code></td></tr><tr><td>348</td><td><code><pre> err = DbSession.CreateTable(&types.Service{})</pre></code></td></tr><tr><td>349</td><td><code><pre> err = DbSession.CreateTable(&types.User{})</pre></code></td></tr><tr class="miss"><td>350</td><td><code><pre> utils.Log(1, "Statup Database Created")</pre></code></td></tr><tr><td>351</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>352</td><td><code><pre>}</pre></code></td></tr><tr><td>353</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>354</td><td><code><pre>// MigrateDatabase will migrate the database structure to current version.</pre></code></td></tr><tr><td>355</td><td><code><pre>// This function will NOT remove previous records, tables or col</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.Create">func Checkin.Create</div><div class="info"><a href="#s_fn_Checkin.Create">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>68</td><td><code><pre> *Checkin) Expected() time.Duration {</pre></code></td></tr><tr><td>69</td><td><code><pre> last := u.Last().CreatedAt</pre></code></td></tr><tr><td>70</td><td><code><pre> now := time.Now()</pre></code></td></tr><tr><td>71</td><td><code><pre> lastDir := now.Sub(last)</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> sub := time.Duration(u.Period() - lastDir)</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> return sub</pre></code></td></tr><tr><td>74</td><td><code><pre>}</pre></code></td></tr><tr><td>75</td><td><code><pre></pre></code></td></tr><tr><td>76</td><td><code><pre>// Last returns the last CheckinHit fo</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.BeforeCreate">func Service.BeforeCreate</div><div class="info"><a href="#s_fn_Service.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>128</td><td><code><pre> Hit will set CreatedAt to UTC</pre></code></td></tr><tr><td>129</td><td><code><pre>func (u *Hit) BeforeCreate() (err error) {</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> if u.CreatedAt.IsZero() {</pre></code></td></tr><tr><td>131</td><td><code><pre> u.CreatedAt = ti</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CheckinHit.BeforeCreate">func CheckinHit.BeforeCreate</div><div class="info"><a href="#s_fn_CheckinHit.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>137</td><td><code><pre>ror) {</pre></code></td></tr><tr><td>138</td><td><code><pre> if u.CreatedAt.IsZero() {</pre></code></td></tr><tr><td>139</td><td><code><pre> u.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>140</td><td><code><pre> }</pre></code></td></tr><tr><td>141</td><td><code><pre> return</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre>}</pre></code></td></tr><tr><td>143</td><td><code><pre></pre></code></td></tr><tr><td>144</td><td><code><pre>// BeforeCreate for User will set Created</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_User.BeforeCreate">func User.BeforeCreate</div><div class="info"><a href="#s_fn_User.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>123</td><td><code><pre>AfterFind() (err error) {</pre></code></td></tr><tr><td>124</td><td><code><pre> s.CreatedAt = utils.Timezoner(s.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>125</td><td><code><pre> return</pre></code></td></tr><tr><td>126</td><td><code><pre>}</pre></code></td></tr><tr><td>127</td><td><code><pre></pre></code></td></tr><tr><td>128</td><td><code><pre>// BeforeCreate f</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.CreateHit">func Service.CreateHit</div><div class="info"><a href="#s_fn_Service.CreateHit">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>29</td><td><code><pre>func (s *Service) CreateHit(h *types.Hit) (int64, error) {</pre></code></td></tr><tr><td>30</td><td><code><pre> db := hitsDB().Create(h)</pre></code></td></tr><tr><td>31</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>32</td><td><code><pre> utils.Log(2, db.Error)</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> return 0, db.Error</pre></code></td></tr><tr><td>34</td><td><code><pre> }</pre></code></td></tr><tr><td>35</td><td><code><pre> return h.Id, db.Error</pre></code></td></tr><tr><td>36</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.Update">func Checkin.Update</div><div class="info"><a href="#s_fn_Checkin.Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>76</td><td><code><pre>a Checkin</pre></code></td></tr><tr><td>77</td><td><code><pre>func (u *Checkin) Last() CheckinHit {</pre></code></td></tr><tr><td>78</td><td><code><pre> var hit CheckinHit</pre></code></td></tr><tr><td>79</td><td><code><pre> checkinHitsDB().Where("checkin = ?", u.Id).Last(&hit)</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> return hit</pre></code></td></tr><tr><td>81</td><td><code><pre>}</pre></code></td></tr><tr><td>82</td><td><code><pre></pre></code></td></tr><tr><td>83</td><td><code><pre>// Hits returns all of the CheckinHi</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CheckinHit.Create">func CheckinHit.Create</div><div class="info"><a href="#s_fn_CheckinHit.Create">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>83</td><td><code><pre> for a given Checkin</pre></code></td></tr><tr><td>84</td><td><code><pre>func (u *Checkin) Hits() []CheckinHit {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> var checkins []CheckinHit</pre></code></td></tr><tr><td>86</td><td><code><pre> checkinHitsDB().Where("checkin = ?", u.Id).Order("id DESC").Find(&checkins)</pre></code></td></tr><tr><td>87</td><td><code><pre> return checkins</pre></code></td></tr><tr><td>88</td><td><code><pre>}</pre></code></td></tr><tr><td>89</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre>// Create will create a new Checkin</pre></code></td></tr><tr><td>91</td><td><code><pre>func (u *Checkin</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.SmallText">func Service.SmallText</div><div class="info"><a href="#s_fn_Service.SmallText">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>145</td><td><code><pre>ed := s.LimitedFailures()</pre></code></td></tr><tr><td>146</td><td><code><pre> if len(limited) == 0 {</pre></code></td></tr><tr><td>147</td><td><code><pre> return nil</pre></code></td></tr><tr><td>148</td><td><code><pre> }</pre></code></td></tr><tr><td>149</td><td><code><pre> last := limited[len(limited)-1]</pre></code></td></tr><tr><td>150</td><td><code><pre> return last</pre></code></td></tr><tr><td>151</td><td><code><pre>}</pre></code></td></tr><tr><td>152</td><td><code><pre></pre></code></td></tr><tr><td>153</td><td><code><pre>// SmallText returns a short description about a services status</pre></code></td></tr><tr><td>154</td><td><code><pre>func (s *Service) SmallText() string {</pre></code></td></tr><tr><td>155</td><td><code><pre> last := s.LimitedFailures()</pre></code></td></tr><tr><td>156</td><td><code><pre> hits, _ := s.LimitedHits()</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> zone := CoreApp.Timezone</pre></code></td></tr><tr><td>158</td><td><code><pre> if s.Online {</pre></code></td></tr><tr><td>159</td><td><code><pre> if len(last) == 0 {</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> return fmt.Sprintf("Online since %v", utils.Timezoner(s.CreatedAt, zone).Format("Monday 3:04:05PM, Jan _2 2006"))</pre></code></td></tr><tr><td>161</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> return fmt.Sprintf("Online, last failure was %v", utils.Timezoner(hits[0].CreatedAt, zone).Format("Monday 3:04:05PM, Jan _2 2006"))</pre></code></td></tr><tr><td>163</td><td><code><pre> }</pre></code></td></tr><tr><td>164</td><td><code><pre> }</pre></code></td></tr><tr><td>165</td><td><code><pre> if len(last) > 0 {</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> lastFailure := s.lastFailure()</pre></code></td></tr><tr><td>167</td><td><code><pre> got, _ := timeago.TimeAgoWithTime(time.Now().</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_insertNotifierDB">func insertNotifierDB</div><div class="info"><a href="#s_fn_insertNotifierDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>63</td><td><code><pre>ces()</pre></code></td></tr><tr><td>64</td><td><code><pre> checkServices()</pre></code></td></tr><tr><td>65</td><td><code><pre> CoreApp.Notifications = notifier.Load()</pre></code></td></tr><tr><td>66</td><td><code><pre> go DatabaseMaintence()</pre></code></td></tr><tr><td>67</td><td><code><pre>}</pre></code></td></tr><tr><td>68</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre>// insertNotifierDB inject the Statup database instance to the Notifier package</pre></code></td></tr><tr><td>70</td><td><code><pre>func insertNotifierDB() error {</pre></code></td></tr><tr><td>71</td><td><code><pre> if DbSession == nil {</pre></code></td></tr><tr><td>72</td><td><code><pre> err :=</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@347:8">func @347:8</div><div class="info"><a href="#s_fn_@347:8">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>343</td><td><code><pre>pes.CheckinHit{})</pre></code></td></tr><tr class="miss"><td>344</td><td><code><pre> err = DbSession.CreateTable(&notifier.Notific</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.Connect">func DbConfig.Connect</div><div class="info"><a href="#s_fn_DbConfig.Connect">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>169</td><td><code><pre>Create() (err error) {</pre></code></td></tr><tr><td>170</td><td><code><pre> if u.CreatedAt.IsZero() {</pre></code></td></tr><tr><td>171</td><td><code><pre> u.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>172</td><td><code><pre> }</pre></code></td></tr><tr><td>173</td><td><code><pre> return</pre></code></td></tr><tr><td>174</td><td><code><pre>}</pre></code></td></tr><tr><td>175</td><td><code><pre></pre></code></td></tr><tr><td>176</td><td><code><pre>// InsertCore create the single row for the Core settings in Statup</pre></code></td></tr><tr><td>177</td><td><code><pre>func (db *DbConfig) InsertCore() (*Core, error) {</pre></code></td></tr><tr><td>178</td><td><code><pre> CoreApp = &Core{Core: &types.Core{</pre></code></td></tr><tr><td>179</td><td><code><pre> Name: db.Project,</pre></code></td></tr><tr class="miss"><td>180</td><td><code><pre> Description: db.Description,</pre></code></td></tr><tr class="miss"><td>181</td><td><code><pre> Config: "config.yml",</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> ApiKey: utils.NewSHA1Hash(9),</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> ApiSecret: utils.NewSHA1Hash(16),</pre></code></td></tr><tr><td>184</td><td><code><pre> Domain: db.Domain,</pre></code></td></tr><tr><td>185</td><td><code><pre> MigrationId: time.Now().Unix(),</pre></code></td></tr><tr><td>186</td><td><code><pre> }}</pre></code></td></tr><tr><td>187</td><td><code><pre> CoreApp.DbConnection = db.DbConn</pre></code></td></tr><tr><td>188</td><td><code><pre> query := coreDB().Create(&CoreApp)</pre></code></td></tr><tr class="miss"><td>189</td><td><code><pre> return CoreApp, query.Error</pre></code></td></tr><tr><td>190</td><td><code><pre>}</pre></code></td></tr><tr><td>191</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>192</td><td><code><pre>// Connect will attempt to connect to the sqlite, postgres, or mysql database</pre></code></td></tr><tr><td>193</td><td><code><pre>func (db *DbConfig) Connect(retry bool, location string) error {</pre></code></td></tr><tr><td>194</td><td><code><pre> var err error</pre></code></td></tr><tr><td>195</td><td><code><pre> if DbSession != nil {</pre></code></td></tr><tr><td>196</td><td><code><pre> DbSession = nil</pre></code></td></tr><tr><td>197</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>198</td><td><code><pre> var conn, dbType string</pre></code></td></tr><tr class="miss"><td>199</td><td><code><pre> dbType = Configs.DbConn</pre></code></td></tr><tr class="miss"><td>200</td><td><code><pre> switch dbType {</pre></code></td></tr><tr><td>201</td><td><code><pre> case "sqlite":</pre></code></td></tr><tr><td>202</td><td><code><pre> conn = utils.Directory + "/statup.db"</pre></code></td></tr><tr class="miss"><td>203</td><td><code><pre> dbType = "sqlite3"</pre></code></td></tr><tr><td>204</td><td><code><pre> case "mysql":</pre></code></td></tr><tr><td>205</td><td><code><pre> if Configs.DbPort == 0 {</pre></code></td></tr><tr><td>206</td><td><code><pre> Configs.DbPort = 3306</pre></code></td></tr><tr><td>207</td><td><code><pre> }</pre></code></td></tr><tr><td>208</td><td><code><pre> host := fmt.Sprintf("%v:%v", Configs.DbHost, Configs.DbPort)</pre></code></td></tr><tr><td>209</td><td><code><pre> conn = fmt.Sprintf("%v:%v@tcp(%v)/%v?charset=utf8&parseTime=True&loc=UTC", Configs.DbUser, Configs.DbPass, host, Configs.DbData)</pre></code></td></tr><tr><td>210</td><td><code><pre> case "postgres":</pre></code></td></tr><tr class="miss"><td>211</td><td><code><pre> if Configs.DbPort == 0 {</pre></code>
|
||
|
|
||
|
<div class="funcname" id="fn_LoadUsingEnv">func LoadUsingEnv</div><div class="info"><a href="#s_fn_LoadUsingEnv">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/configs.go</code>:</p></div><table class="listing">
|
||
|
<tr class="miss"><td>52</td><td><code><pre>ariables. If DB_CONN is set if will force this function.</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre>func LoadUsingEnv() (*DbConfig, error) {</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> Configs = new(DbConfig)</pre></code></td></tr><tr><td>55</td><td><code><pre> if os.Getenv("DB_CONN") == "" {</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> return nil, errors.New("Missing DB_CONN environment variable")</pre></code></td></tr><tr><td>57</td><td><code><pre> }</pre></code></td></tr><tr><td>58</td><td><code><pre> if os.Getenv("DB_HOST") == "" {</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> return nil, errors.New("Missing DB_HOST environment variable")</pre></code></td></tr><tr><td>60</td><td><code><pre> }</pre></code></td></tr><tr><td>61</td><td><code><pre> if os.Getenv("DB_USER") == "" {</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> return nil, errors.New("Missing DB_USER environment variable")</pre></code></td></tr><tr><td>63</td><td><code><pre> }</pre></code></td></tr><tr><td>64</td><td><code><pre> if os.Getenv("DB_PASS") == "" {</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> return nil, errors.New("Missing DB_PASS environment variable")</pre></code></td></tr><tr><td>66</td><td><code><pre> }</pre></code></td></tr><tr><td>67</td><td><code><pre> if os.Getenv("DB_DATABASE") == "" {</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> return nil, errors.New("Missing DB_DATABASE environment variable")</pre></code></td></tr><tr><td>69</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> Configs.DbConn = os.Getenv("DB_CONN")</pre></code></td></tr><tr><td>71</td><td><code><pre> Configs.DbHost = os.Getenv("DB_HOST")</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> Configs.DbPort = int(utils.StringInt(os.Getenv("DB_PORT")))</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> Configs.DbUser = os.Getenv("DB_USER")</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> Configs.DbPass = os.Getenv("DB_PASS")</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> Configs.DbData = os.Getenv("DB_DATABASE")</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> CoreApp.DbConnection = os.Getenv("DB_CONN")</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> CoreApp.Name = os.Getenv("NAME")</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> CoreApp.Domain = os.Getenv("DOMAIN")</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> if os.Getenv("USE_CDN") == "true" {</pre></code></td></tr><tr><td>80</td><td><code><pre> CoreApp.UseCdn = true</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr><tr><td>82</td><td><code><pre></pre></code></td></tr><tr><td>83</td><td><code><pre> dbConfig := &DbConfig{</pre></code></td></tr><tr><td>84</td><td><code><pre> DbConn: os.Getenv("DB_CONN"),</pre></code></td></tr><tr><td>85</td><td><code><pre> DbHost: os.Getenv("DB_HOST"),</pre></code></td></tr><tr><td>86</td><td><code><pre> DbUser: os.Getenv("DB_USER"),</pre></code></td></tr><tr><td>87</td><td><code><pre> DbPass: os.Getenv("DB_PASS"),</pre></code></td></tr><tr><td>88</td><td><code><pre> DbData: os.Getenv("DB_DATABASE"),</pre></code></td></tr><tr><td>89</td><td><code><pre> DbPort: 5432,</pre></code></td></tr><tr><
|
||
|
|
||
|
<div class="funcname" id="fn_Failure.ParseError">func Failure.ParseError</div><div class="info"><a href="#s_fn_Failure.ParseError">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>132</td><td><code><pre>func (f *Failure) ParseError() string {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> err := strings.Contains(f.Issue, "connection reset by peer")</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>135</td><td><code><pre> return fmt.Sprintf("Connection Reset")</pre></code></td></tr><tr><td>136</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> err = strings.Contains(f.Issue, "operation timed out")</pre></code></td></tr><tr class="miss"><td>138</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre> return fmt.Sprintf("HTTP Request Timed Out")</pre></code></td></tr><tr><td>140</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> err = strings.Contains(f.Issue, "x509: certificate is valid")</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>143</td><td><code><pre> return fmt.Sprintf("SSL Certificate invalid")</pre></code></td></tr><tr><td>144</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> err = strings.Contains(f.Issue, "Client.Timeout exceeded while awaiting headers")</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> return fmt.Sprintf("Connection Timed Out")</pre></code></td></tr><tr><td>148</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> err = strings.Contains(f.Issue, "no such host")</pre></code></td></tr><tr class="miss"><td>150</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>151</td><td><code><pre> return fmt.Sprintf("Domain is offline or not found")</pre></code></td></tr><tr><td>152</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>153</td><td><code><pre> err = strings.Contains(f.Issue, "HTTP Status Code")</pre></code></td></tr><tr class="miss"><td>154</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>155</td><td><code><pre> return fmt.Sprintf("Incorrect HTTP Status Code")</pre></code></td></tr><tr><td>156</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> err = strings.Contains(f.Issue, "connection refused")</pre></code></td></tr><tr class="miss"><td>158</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> return fmt.Sprintf("Connection Failed")</pre></code></td></tr><tr><td>160</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> err = strings.Contains(f.Issue, "can't assign requested address")</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>163</td><td><code><pre> return fmt.Sprintf("Unable to Request Address")</pre></code></td></tr><tr><td>164</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> err = strings.Contains(f.Issue, "no route to host")</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>167</td><td><code><pre> return fmt.Sprintf("Domain is offline or not found")</pre></code></td></tr><tr><td>168</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>169</td><td><code><pre> return f.Issue</pre></code></td></tr><tr><td>170</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ExportIndexHTML">func ExportIndexHTML</div><div class="info"><a href="#s_fn_ExportIndexHTML">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>31</td><td><code><pre>func ExportIndexHTML() string {</pre></code></td></tr><tr class="miss"><td>32</td><td><code><pre> source.Assets()</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> injectDatabase()</pre></code></td></tr><tr class="miss"><td>34</td><td><code><pre> CoreApp.SelectAllServices()</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> CoreApp.UseCdn = true</pre></code></td></tr><tr class="miss"><td>36</td><td><code><pre> for _, srv := range CoreApp.Services {</pre></code></td></tr><tr class="miss"><td>37</td><td><code><pre> service := srv.(*Service)</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> service.Check(true)</pre></code></td></tr><tr class="miss"><td>39</td><td><code><pre> fmt.Println(service.Name, service.Online, service.Latency)</pre></code></td></tr><tr><td>40</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>41</td><td><code><pre> nav, _ := source.TmplBox.String("nav.html")</pre></code></td></tr><tr class="miss"><td>42</td><td><code><pre> footer, _ := source.TmplBox.String("footer.html")</pre></code></td></tr><tr class="miss"><td>43</td><td><code><pre> render, err := source.TmplBox.String("index.html")</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>46</td><td><code><pre> }</pre></code></td></tr><tr><td>47</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> t := template.New("message")</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> t.Funcs(template.FuncMap{</pre></code></td></tr><tr><td>50</td><td><code><pre> "js": func(html string) template.JS {</pre></code></td></tr><tr><td>51</td><td><code><pre> return template.JS(html)</pre></code></td></tr><tr><td>52</td><td><code><pre> },</pre></code></td></tr><tr><td>53</td><td><code><pre> "safe": func(html string) template.HTML {</pre></code></td></tr><tr><td>54</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>55</td><td><code><pre> },</pre></code></td></tr><tr><td>56</td><td><code><pre> "VERSION": func() string {</pre></code></td></tr><tr><td>57</td><td><code><pre> return VERSION</pre></code></td></tr><tr><td>58</td><td><code><pre> },</pre></code></td></tr><tr><td>59</td><td><code><pre> "CoreApp": func() *Core {</pre></code></td></tr><tr><td>60</td><td><code><pre> return CoreApp</pre></code></td></tr><tr><td>61</td><td><code><pre> },</pre></code></td></tr><tr><td>62</td><td><code><pre> "USE_CDN": func() bool {</pre></code></td></tr><tr><td>63</td><td><code><pre> return CoreApp.UseCdn</pre></code></td></tr><tr><td>64</td><td><code><pre> },</pre></code></td></tr><tr><td>65</td><td><code><pre> "underscore": func(html string) string {</pre></code></td></tr><tr><td>66</td><td><code><pre> return utils.UnderScoreString(html)</pre></code></td></tr><tr><td>67</td><td><code><pre> },</pre></code></td></tr><tr><td>68</td><td><code><pre> "URL": func() string {</pre></code></td></tr><tr><td>69</td><td><code><pre> return "/"</pre></code></td></tr><tr><td>70</td><td><code><pre> },</pre></code></td></tr><tr><td>71</td><td><code><pre> "CHART_DATA": func() string {</pre></code></td></tr><tr><td>72</td><td><code><pre> return ExportChartsJs()</pre></code></td></tr><tr><td>73</td><td><code><pre> },</pre></code></td>
|
||
|
|
||
|
<div class="funcname" id="fn_GraphDataRaw">func GraphDataRaw</div><div class="info"><a href="#s_fn_GraphDataRaw">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>201</td><td><code><pre>service</pre></code></td></tr><tr><td>202</td><td><code><pre>func (s *Service) Downtime() time.Duration {</pre></code></td></tr><tr><td>203</td><td><code><pre> hits, _ := s.Hits()</pre></code></td></tr><tr><td>204</td><td><code><pre> fails := s.LimitedFailures()</pre></code></td></tr><tr class="miss"><td>205</td><td><code><pre> if len(fails) == 0 {</pre></code></td></tr><tr class="miss"><td>206</td><td><code><pre> return time.Duration(0)</pre></code></td></tr><tr><td>207</td><td><code><pre> }</pre></code></td></tr><tr><td>208</td><td><code><pre> if len(hits) == 0 {</pre></code></td></tr><tr class="miss"><td>209</td><td><code><pre> return time.Now().UTC().Sub(fails[len(fails)-1].CreatedAt.UTC())</pre></code></td></tr><tr><td>210</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>211</td><td><code><pre> since := fails[0].CreatedAt.UTC().Sub(hits[0].CreatedAt.UTC())</pre></code></td></tr><tr><td>212</td><td><code><pre> return since</pre></code></td></tr><tr><td>213</td><td><code><pre>}</pre></code></td></tr><tr><td>214</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>215</td><td><code><pre>// GraphDataRaw will return all the hits between 2 times for a Service</pre></code></td></tr><tr class="miss"><td>216</td><td><code><pre>func GraphDataRaw(service types.ServiceInterface, start, end time.Time, group string, column string) *DateScanObj {</pre></code></td></tr><tr class="miss"><td>217</td><td><code><pre> var d []DateScan</pre></code></td></tr><tr><td>218</td><td><code><pre> model := service.(*Service).HitsBetween(start, end, group, column)</pre></code></td></tr><tr class="miss"><td>219</td><td><code><pre> rows, _ := model.Rows()</pre></code></td></tr><tr class="miss"><td>220</td><td><code><pre> for rows.Next() {</pre></code></td></tr><tr><td>221</td><td><code><pre> var gd DateScan</pre></code></td></tr><tr class="miss"><td>222</td><td><code><pre> var createdAt string</pre></code></td></tr><tr><td>223</td><td><code><pre> va</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_InsertSampleHits">func InsertSampleHits</div><div class="info"><a href="#s_fn_InsertSampleHits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>118</td><td><code><pre>func InsertSampleHits() error {</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> since := time.Now().Add((-24 * 7) * time.Hour).UTC()</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> for i := int64(1); i <= 5; i++ {</pre></code></td></tr><tr class="miss"><td>121</td><td><code><pre> service := SelectService(i)</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> utils.Log(1, fmt.Sprintf("Adding %v sample hit records to service %v", 360, service.Name))</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> createdAt := since</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> alpha := float64(1.05)</pre></code></td></tr><tr><td>125</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> for hi := int64(1); hi <= 168; hi++ {</pre></code></td></tr><tr class="miss"><td>127</td><td><code><pre> alpha += 0.01</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> rand.Seed(time.Now().UnixNano())</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> latency := rand.Float64() * alpha</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> createdAt = createdAt.Add(1 * time.Hour)</pre></code></td></tr><tr class="miss"><td>131</td><td><code><pre> hit := &types.Hit{</pre></code></td></tr><tr><td>132</td><td><code><pre> Service: service.Id,</pre></code></td></tr><tr><td>133</td><td><code><pre> CreatedAt: createdAt,</pre></code></td></tr><tr><td>134</td><td><code><pre> Latency: latency,</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> service.CreateHit(hit)</pre></code></td></tr><tr><td>137</td><td><code><pre> }</pre></code></td></tr><tr><td>138</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre> return nil</pre></code></td></tr><tr><td>140</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.Update">func DbConfig.Update</div><div class="info"><a href="#s_fn_DbConfig.Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr class="miss"><td>245</td><td><code><pre>tically delete old records from 'failures' and 'hits'</pre></code></td></tr><tr class="miss"><td>246</td><td><code><pre>// this function is currently set to delete records 7+ days old every 60 minutes</pre></code></td></tr><tr class="miss"><td>247</td><td><code><pre>func DatabaseMaintence() {</pre></code></td></tr><tr class="miss"><td>248</td><td><code><pre> for range time.Tick(60 * time.Minute) {</pre></code></td></tr><tr class="miss"><td>249</td><td><code><pre> utils.Log(1, "Checking for database records older than 3 months...")</pre></code></td></tr><tr class="miss"><td>250</td><td><code><pre> since := time.Now().AddDate(0, -3</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Dbtimestamp">func Dbtimestamp</div><div class="info"><a href="#s_fn_Dbtimestamp">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>170</td><td><code><pre>v is currently offline", s.Name)</pre></code></td></tr><tr><td>171</td><td><code><pre> }</pre></code></td></tr><tr><td>172</td><td><code><pre>}</pre></code></td></tr><tr><td>173</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>174</td><td><code><pre>// DowntimeText will return the amount of downtime for a service based on the duration</pre></code></td></tr><tr class="miss"><td>175</td><td><code><pre>func (s *Service) DowntimeText() string {</pre></code></td></tr><tr class="miss"><td>176</td><td><code><pre> return fmt.Sprintf("%v has been offline for %v", s.Name, utils.DurationReadable(s.Downtime()))</pre></code></td></tr><tr><td>177</td><td><code><pre>}</pre></code></td></tr><tr><td>178</td><td><code><pre></pre></code></td></tr><tr><td>179</td><td><code><pre>// Dbtimestamp will return a SQL query for grouping by date</pre></code></td></tr><tr><td>180</td><td><code><pre>func Dbtimestamp(group string, column string) string {</pre></code></td></tr><tr class="miss"><td>181</td><td><code><pre> seconds := 60</pre></code></td></tr><tr><td>182</td><td><code><pre> if group == "second" {</pre></code></td></tr><tr><td>183</td><td><code><pre> seconds = 60</pre></code></td></tr><tr><td>184</td><td><code><pre> } else if group == "hour" {</pre></code></td></tr><tr><td>185</td><td><code><pre> seconds = 3600</pre></code></td></tr><tr><td>186</td><td><code><pre> } else if group == "day" {</pre></code></td></tr><tr><td>187</td><td><code><pre> seconds = 86400</pre></code></td></tr><tr><td>188</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>189</td><td><code><pre> switch CoreApp.DbConnection {</pre></code></td></tr><tr><td>190</td><td><code><pre> case "mysql":</pre></code></td></tr><tr class="miss"><td>191</td><td><code><pre> return fmt.Sprintf("CONCAT(date_format(created_at, '%%Y-%%m-%%d %%H:00:00')) AS timeframe, AVG</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_ExportChartsJs">func ExportChartsJs</div><div class="info"><a href="#s_fn_ExportChartsJs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>86</td><td><code><pre>func ExportChartsJs() string {</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> render, err := source.JsBox.String("charts.js")</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>90</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> t := template.New("charts")</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> t.Funcs(template.FuncMap{</pre></code></td></tr><tr><td>93</td><td><code><pre> "safe": func(html string) template.HTML {</pre></code></td></tr><tr><td>94</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>95</td><td><code><pre> },</pre></code></td></tr><tr><td>96</td><td><code><pre> })</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> t.Parse(render)</pre></code></td></tr><tr class="miss"><td>98</td><td><code><pre> var tpl bytes.Buffer</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> if err := t.Execute(&tpl, CoreApp.Services); err != nil {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> result := tpl.String()</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> return result</pre></code></td></tr><tr><td>104</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.TotalUptime">func Service.TotalUptime</div><div class="info"><a href="#s_fn_Service.TotalUptime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>266</td><td><code><pre>4 hours</pre></code></td></tr><tr class="miss"><td>267</td><td><code><pre>func (s *Service) AvgUptime(ago time.Time) string {</pre></code></td></tr><tr class="miss"><td>268</td><td><code><pre> failed, _ := s.TotalFailuresSince(ago)</pre></code></td></tr><tr class="miss"><td>269</td><td><code><pre> if failed == 0 {</pre></code></td></tr><tr><td>270</td><td><code><pre> return "100"</pre></code></td></tr><tr><td>271</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>272</td><td><code><pre> total, _ := s.TotalHitsSince(ago)</pre></code></td></tr><tr class="miss"><td>273</td><td><code><pre> if total == 0 {</pre></code></td></tr><tr class="miss"><td>274</td><td><code><pre> return "0.00"</pre></code></td></tr><tr><td>275</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>276</td><td><code><pre> percent := float64(failed) / float64(total) * 100</pre></code></td></tr><tr class="miss"><td>277</td><td><code><pre> percent = 100 - percent</pre></code></td></tr><tr class="miss"><td>278</td><td><code><pre> if percent < 0 {</pre></code></td></tr><tr><td>279</td><td><code><pre> percent = 0</pre></code></td></tr><tr><td>280</td><td><code><pre></pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.RecheckCheckinFailure">func Checkin.RecheckCheckinFailure</div><div class="info"><a href="#s_fn_Checkin.RecheckCheckinFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>105</td><td><code><pre>.Error)</pre></code></td></tr><tr><td>106</td><td><code><pre> return 0, row.Error</pre></code></td></tr><tr><td>107</td><td><code><pre> }</pre></code></td></tr><tr><td>108</td><td><code><pre> return u.Id, row.Error</pre></code></td></tr><tr><td>109</td><td><code><pre>}</pre></code></td></tr><tr><td>110</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre>// Create will create a new successful CheckinHit</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre>func (u *CheckinHit) Create() (int64, error) {</pre></code></td></tr><tr><td>113</td><td><code><pre> if u.CreatedAt.IsZero() {</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> u.CreatedAt = time.Now()</pre></code></td></tr><tr><td>115</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> row := checkinHitsDB().Create(u)</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> if row.Error != nil {</pre></code></td></tr><tr><td>118</td><td><code><pre> utils.Log(2, row.Error)</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> return 0, row.Error</pre></code></td></tr><tr><td>120</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>121</td><td><code><pre> return u.Id, row.Error</pre></code></td></tr><tr><td>122</td><td><code><pre>}</pre></code></td></tr><tr><td>123</td><td><code><pre></pre></code></td></tr><tr><td>124</td><td><code><pre>// Re</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.CreateCore">func DbConfig.CreateCore</div><div class="info"><a href="#s_fn_DbConfig.CreateCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>271</td><td><code><pre> return err</pre></code></td></tr><tr><td>272</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>273</td><td><code><pre> data, err := yaml.Marshal(c)</pre></code></td></tr><tr><td>274</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>275</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>276</td><td><code><pre> return err</pre></code></td></tr><tr><td>277</td><td><code><pre> }</pre></code></td></tr><tr><td>278</td><td><code><pre> config.WriteString(string(data))</pre></code></td></tr><tr><td>279</td><td><code><pre> config.Close()</pre></code></td></tr><tr><td>280</td><td><code><pre> return err</pre></code></td></tr><tr><td>281</td><td><code><pre>}</pre></code></td></tr><tr><td>282</td><td><code><pre></pre></code></td></tr><tr><td>283</td><td><code><pre>// Save will initially create the config.yml file</pre></code></td></tr><tr><td>284</td><td><code><pre>func (c *DbConfig) Save() (*DbConfig, error) {</pre></code></td></tr><tr class="miss"><td>285</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>286</td><td><code><pre> config, err := os.Create(utils.Directory + "/config.yml")</pre></code></td></tr><tr><td>287</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>288</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>289</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>290</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>291</td><td><code><pre> c.ApiKey = utils.NewSHA1Hash(16)</pre></code></td></tr><tr class="miss"><td>292</td><td><code><pre> c.ApiSecret = ut</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.GraphData">func Service.GraphData</div><div class="info"><a href="#s_fn_Service.GraphData">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>229</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> gd.CreatedAt = utils.Timezoner(createdTime, CoreApp.Timezone).Format(types.TIME)</pre></code></td></tr><tr class="miss"><td>231</td><td><code><pre> gd.Value = int64(value * 1000)</pre></code></td></tr><tr><td>232</td><td><code><pre> d = append(d, gd)</pre></code></td></tr><tr><td>233</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>234</td><td><code><pre> return &DateScanObj{d}</pre></code></td></tr><tr><td>235</td><td><code><pre>}</pre></code></td></tr><tr><td>236</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>237</td><td><code><pre>// ToString will convert the DateScanObj into a JSON string for the charts to render</pre></code></td></tr><tr><td>238</td><td><code><pre>func (d *DateSc</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.AvgTime">func Service.AvgTime</div><div class="info"><a href="#s_fn_Service.AvgTime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>86</td><td><code><pre>nc (s *Service) ToJSON() string {</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> data, _ := json.Marshal(s)</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> return string(data)</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre>}</pre></code></td></tr><tr><td>90</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre>// AvgTime will return the average amount of time for a service to response back successfully</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre>func (s *Service) AvgTime() float64 {</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> total, _ := s.TotalHits()</pre></code></td></tr><tr><td>94</td><td><code><pre> if total</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CountFailures">func CountFailures</div><div class="info"><a href="#s_fn_CountFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>99</td><td><code><pre>func CountFailures() uint64 {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> var count uint64</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> err := failuresDB().Count(&count)</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> if err.Error != nil {</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> utils.Log(2, err.Error)</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> return 0</pre></code></td></tr><tr><td>105</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> return count</pre></code></td></tr><tr><td>107</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.CreateHit">func Checkin.CreateHit</div><div class="info"><a href="#s_fn_Checkin.CreateHit">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>95</td><td><code><pre>or)</pre></code></td></tr><tr><td>96</td><td><code><pre> return 0, row.Error</pre></code></td></tr><tr><td>97</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>98</td><td><code><pre> return u.Id, row.Error</pre></code></td></tr><tr><td>99</td><td><code><pre>}</pre></code></td></tr><tr><td>100</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre>// Update will update a Checkin</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre>func (u *Checkin) Update() (int64, error) {</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> row := checkinDB().Update(&u)</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> if row.Error != nil {</pre></code></td></tr><tr><td>105</td><td><code><pre> utils.Log(2, r</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.Count24HFailures">func Core.Count24HFailures</div><div class="info"><a href="#s_fn_Core.Count24HFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>88</td><td><code><pre>func (c *Core) Count24HFailures() uint64 {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> var count uint64</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> for _, s := range CoreApp.Services {</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> service := s.(*Service)</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> fails, _ := service.TotalFailures24()</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> count += fails</pre></code></td></tr><tr><td>94</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> return count</pre></code></td></tr><tr><td>96</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_InitApp">func InitApp</div><div class="info"><a href="#s_fn_InitApp">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>54</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>55</td><td><code><pre>func (c *Core) ToCore() *types.Core {</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> return c.Core</pre></code></td></tr><tr><td>57</td><td><code><pre>}</pre></code></td></tr><tr><td>58</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre>// InitApp will initialize Statup</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre>func InitApp() {</pre></code></td></tr><tr><td>61</td><td><code><pre> SelectCore()</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> insertNotifierDB()</pre></code></td></tr><tr><td>63</td><td><code><pre> CoreApp.SelectAllSer</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.Expected">func Checkin.Expected</div><div class="info"><a href="#s_fn_Checkin.Expected">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>56</td><td><code><pre>func (u *Checkin) Period() time.Duration {</pre></code></td></tr><tr class="miss"><td>57</td><td><code><pre> duration, _ := time.ParseDuration(fmt.Sprintf("%vs", u.Interval))</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> return duration</pre></code></td></tr><tr><td>59</td><td><code><pre>}</pre></code></td></tr><tr><td>60</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre>// Grace will return the duration of the Chec</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DatabaseMaintence">func DatabaseMaintence</div><div class="info"><a href="#s_fn_DatabaseMaintence">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>223</td><td><code><pre>= nil {</pre></code></td></tr><tr><td>224</td><td><code><pre> if retry {</pre></code></td></tr><tr class="miss"><td>225</td><td><code><pre> utils.Log(1, fmt.Sprintf("Database connection to '%v' is not available, trying again in 5 seconds...", conn))</pre></code></td></tr><tr class="miss"><td>226</td><td><code><pre> return db.waitForDb()</pre></code></td></tr><tr><td>227</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>228</td><td><code><pre> fmt.Println("ERROR:", err)</pre></code></td></tr><tr><td>229</td><td><code><pre> return err</pre></code></td></tr><tr><td>230</td><td><code><pre> }</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>232</td><td><code><pre> err = DbSession.DB().Ping()</pre></code></td></tr><tr><td>233</td><td><code><pre> if err</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DateScanObj.ToString">func DateScanObj.ToString</div><div class="info"><a href="#s_fn_DateScanObj.ToString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>223</td><td><code><pre>value float64</pre></code></td></tr><tr><td>224</td><td><code><pre> var createdTime time.Time</pre></code></td></tr><tr class="miss"><td>225</td><td><code><pre> rows.Scan(&createdAt, &value)</pre></code></td></tr><tr class="miss"><td>226</td><td><code><pre> createdTime, _ = time.Parse(types.TIME, createdAt)</pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> if CoreApp.DbConnection =</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.lastFailure">func Service.lastFailure</div><div class="info"><a href="#s_fn_Service.lastFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr class="miss"><td>138</td><td><code><pre>ateScanObj struct is for creating the charts.js graph JSON array</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre>type DateScanObj struct {</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> Array []DateScan `json:"data"`</pre></code></td></tr><tr><td>141</td><td><code><pre>}</pre></code></td></tr><tr><td>142</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>143</td><td><code><pre>// lastFailure returns the last fail</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DeleteAllSince">func DeleteAllSince</div><div class="info"><a href="#s_fn_DeleteAllSince">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>234</td><td><code><pre>sful.", Configs.DbData))</pre></code></td></tr><tr><td>235</td><td><code><pre> }</pre></code></td></tr><tr><td>236</td><td><code><pre> return err</pre></code></td></tr><tr><td>237</td><td><code><pre>}</pre></code></td></tr><tr><td>238</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>239</td><td><code><pre>// waitForDb will sleep for 5 seconds and try to connect to the database again</pre></code></td></tr><tr class="miss"><td>240</td><td><code><pre>func (db *DbConfig) waitForDb() error {</pre></code></td></tr><tr class="miss"><td>241</td><td><code><pre> time.Sleep(5 * time.Second)</pre></code></td></tr><tr class="miss"><td>242</td><td><code><pre> return db.Connect(true, utils.Dire</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.AllOnline">func Core.AllOnline</div><div class="info"><a href="#s_fn_Core.AllOnline">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr class="miss"><td>119</td><td><code><pre>source.UsingAssets(utils.Directory) {</pre></code></td></tr><tr><td>120</td><td><code><pre> return ""</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> return source.OpenAsset(utils.Directory, "scss/mobile.scss")</pre></code></td></tr><tr><td>123</td><td><code><pre>}</pre></code></td></tr><tr><td>124</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>125</td><td><code><pre>// AllOnline wil</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.DeleteFailures">func Service.DeleteFailures</div><div class="info"><a href="#s_fn_Service.DeleteFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>59</td><td><code><pre>func (u *Service) DeleteFailures() {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> err := DbSession.Exec(`DELETE FROM failures WHERE service = ?`, u.Id)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> if err.Error != nil {</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> utils.Log(3, fmt.Sprintf("failed to delete all failures: %v", err))</pre></code></td></tr><tr><td>63</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> u.Failures = nil</pre></code></td></tr><tr><td>65</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.InsertCore">func DbConfig.InsertCore</div><div class="info"><a href="#s_fn_DbConfig.InsertCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>146</td><td><code><pre>IsZero() {</pre></code></td></tr><tr><td>147</td><td><code><pre> u.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>148</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> return</pre></code></td></tr><tr><td>150</td><td><code><pre>}</pre></code></td></tr><tr><td>151</td><td><code><pre></pre></code></td></tr><tr><td>152</td><td><code><pre>// BeforeCreate for Service will set CreatedAt to UTC</pre></code></td></tr><tr><td>153</td><td><code><pre>func (u *Service) BeforeCreate() (err error) {</pre></code></td></tr><tr><td>154</td><td><code><pre> if u.CreatedAt.IsZero() {</pre></code></td></tr><tr><td>155</td><td><code><pre> u.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>156</td><td><code><pre> }</pre></code></td></tr><tr><td>157</td><td><code><pre> return</pre></code></td></tr><tr><td>158</td><td><code><pre>}</pre></code></td></tr><tr><td>159</td><td><code><pre></pre></code></td></tr><tr><td>160</td><td><code><pre>// BeforeCreate for Checkin will set CreatedAt to UTC</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre>func (u *Checkin) BeforeCreate() (err error) {</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> if u.CreatedAt.IsZero() {</pre></code></td></tr><tr class="miss"><td>163</td><td><code><pre> u.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>164</td><td><code><pre> }</pre></code></td></tr><tr><td>165</td><td><code><pre> return</pre></code></td></tr><tr><td>166</td><td><code><pre>}</pre></code></td></tr><tr><td>167</td><td><code><pre></pre></code></td></tr><tr><td>168</td><td><code><pre>// B</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.CurrentTime">func Core.CurrentTime</div><div class="info"><a href="#s_fn_Core.CurrentTime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>81</td><td><code><pre>table in database</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre>func UpdateCore(c *Core) (*Core, error) {</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> db := coreDB().Update(&c)</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> return c, db.Error</pre></code></td></tr><tr><td>85</td><td><code><pre>}</pre></code></td></tr><tr><td>86</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre>// UsingAssets will return true if /assets folder is pr</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.Clean">func DbConfig.Clean</div><div class="info"><a href="#s_fn_DbConfig.Clean">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>355</td><td><code><pre>ns from the database.</pre></code></td></tr><tr class="miss"><td>356</td><td><code><pre>// If this function has an issue, it will ROLLBACK to the previous state.</pre></code></td></tr><tr class="miss"><td>357</td><td><code><pre>func (db *DbConfig) MigrateDatabase() error {</pre></code></td></tr><tr class="miss"><td>358</td><td><code><pre> utils.Log(1, "Migrating Datab</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.TotalFailures">func Service.TotalFailures</div><div class="info"><a href="#s_fn_Service.TotalFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>116</td><td><code><pre>func (s *Service) TotalFailures() (uint64, error) {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> var count uint64</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> rows := failuresDB().Where("service = ?", s.Id)</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> err := rows.Count(&count)</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return count, err.Error</pre></code></td></tr><tr><td>121</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DeleteConfig">func DeleteConfig</div><div class="info"><a href="#s_fn_DeleteConfig">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/configs.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>129</td><td><code><pre>nil</pre></code></td></tr><tr><td>130</td><td><code><pre>}</pre></code></td></tr><tr><td>131</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre>// DeleteConfig will delete the 'config.yml' file</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre>func DeleteConfig() {</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> err := os.Remove(utils.Directory +</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SelectCheckin">func SelectCheckin</div><div class="info"><a href="#s_fn_SelectCheckin">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr class="miss"><td>43</td><td><code><pre>nverts *types.CheckinHit to *core.CheckinHit</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre>func ReturnCheckinHit(h *types.CheckinHit) *CheckinHit {</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> return &CheckinHit{CheckinHit: h}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SelectCheckinApi">func SelectCheckinApi</div><div class="info"><a href="#s_fn_SelectCheckinApi">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>91</td><td><code><pre>Create() (int64, error) {</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> u.ApiKey = utils.RandomString(7)</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> row := checkinDB().Create(&u)</pre></code></td></tr><tr><td>94</td><td><code><pre> if row.Error != nil {</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> utils.Log(2, row.E</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Hit.BeforeCreate">func Hit.BeforeCreate</div><div class="info"><a href="#s_fn_Hit.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>114</td><td><code><pre>}</pre></code></td></tr><tr><td>115</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre>// AfterFind for Checkin will set the timezone</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre>func (s *Checkin) AfterFind() (err error) {</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> s.CreatedAt = utils.</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.SassVars">func Core.SassVars</div><div class="info"><a href="#s_fn_Core.SassVars">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>95</td><td><code><pre> is present</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre>func (c Core) UsingAssets() bool {</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> return source.UsingAssets(utils.Directory)</pre></code></td></tr><tr><td>98</td><td><code><pre>}</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre></pre></code></td></tr><tr><td>100</td><td><code><pre>// SassVars opens the file /assets/scss/variables.scss to be edi</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.MobileSASS">func Core.MobileSASS</div><div class="info"><a href="#s_fn_Core.MobileSASS">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr class="miss"><td>113</td><td><code><pre>et(utils.Directory, "scss/base.scss")</pre></code></td></tr><tr><td>114</td><td><code><pre>}</pre></code></td></tr><tr><td>115</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre>// MobileSASS is the -webkit responsive custom css designs. This opens the</pre></code></td></tr><tr><td>117</td><td><code><pre>// file /assets/scss/mobile.scss to be ed</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.BaseSASS">func Core.BaseSASS</div><div class="info"><a href="#s_fn_Core.BaseSASS">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>103</td><td><code><pre>"</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> return source.OpenAsset(utils.Directory, "scss/variables.scss")</pre></code></td></tr><tr><td>106</td><td><code><pre>}</pre></code></td></tr><tr><td>107</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre>// BaseSASS is the base design , this opens the file /assets/scss/base.scss to b</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Failure.BeforeCreate">func Failure.BeforeCreate</div><div class="info"><a href="#s_fn_Failure.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>118</td><td><code><pre>mezoner(s.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>119</td><td><code><pre> return</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre>}</pre></code></td></tr><tr><td>121</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre>// AfterFind for CheckinHit will set the timezone</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre>func (s *CheckinHit</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_checkServices">func checkServices</div><div class="info"><a href="#s_fn_checkServices">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>34</td><td><code><pre>func checkServices() {</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> utils.Log(1, fmt.Sprintf("Starting monitoring process for %v Services", len(CoreApp.Services)))</pre></code></td></tr><tr class="miss"><td>36</td><td><code><pre> for _, ser := range CoreApp.Services {</pre></code></td></tr><tr><td>37</td><td><code><pre> //go obj.StartCheckins()</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> go ser.CheckQueue(true)</pre></code></td></tr><tr><td>39</td><td><code><pre> }</pre></code></td></tr><tr><td>40</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.Online24">func Service.Online24</div><div class="info"><a href="#s_fn_Service.Online24">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>98</td><td><code><pre>total) * 100</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> amount := fmt.Sprintf("%0.0f", avg*10)</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> val, _ := strconv.ParseFloat(amount, 10)</pre></code></td></tr><tr><td>101</td><td><code><pre> return val</pre></code></td></tr><tr><td>102</td><td><code><pre></pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CloseDB">func CloseDB</div><div class="info"><a href="#s_fn_CloseDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr class="miss"><td>80</td><td><code><pre>// CloseDB will close the database connection if available</pre></code></td></tr><tr><td>81</td><td><code><pre>func Close</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.ToJSON">func Service.ToJSON</div><div class="info"><a href="#s_fn_Service.ToJSON">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr class="miss"><td>80</td><td><code><pre>reorderServices will sort the services based on 'order_id'</pre></code></td></tr><tr class="miss"><td>81</td><td><code><pre>func reorderServices() {</pre></code></td></tr><tr><td>82</td><td><code><pre> s</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.AvgUptime24">func Service.AvgUptime24</div><div class="info"><a href="#s_fn_Service.AvgUptime24">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>240</td><td><code><pre> {</pre></code></td></tr><tr><td>241</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr><td>242</td><td><code><pre> return "{}"</pre></code></td></tr><tr><td>243</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>244</td><td><code><pre> return string(data)</pre></code></td></tr><tr><td>245</td><td><code><pre>}</pre></code></td></tr><tr><td>246</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>247</td><td><code><pre>// GraphData returns the JSON object used b</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Hit.AfterFind">func Hit.AfterFind</div><div class="info"><a href="#s_fn_Hit.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>93</td><td><code><pre>rvice) AfterFind() (err error) {</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> s.CreatedAt = utils.Timezoner(s.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>95</td><td><code><pre> return</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre>}</pre></code></td></tr><tr><td>97</td><td><code><pre></pre></code></td></tr><tr><td>98</td><td><code><pre>// Af</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_UpdateCore">func UpdateCore</div><div class="info"><a href="#s_fn_UpdateCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>74</td><td><code><pre>e connection has not been created")</pre></code></td></tr><tr><td>75</td><td><code><pre> }</pre></code></td></tr><tr><td>76</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> notifier.SetDB(DbSession)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> return nil</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr><tr><td>80</td><td><code><pre></pre></code></td></tr><tr><td>81</td><td><code><pre>// Up</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.HitsBetween">func Service.HitsBetween</div><div class="info"><a href="#s_fn_Service.HitsBetween">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>75</td><td><code><pre>func (s *Service) HitsBetween(t1, t2 time.Time, group string, column string) *gorm.DB {</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> selector := Dbtimestamp(group, column)</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> return DbSession.Model(&types.Hit{}).Select(selector).Where("service = ? AND created_at BETWEEN ? AND ?", s.Id, t1.Format(types.TIME_DAY), t2.Format(types.TIME_DAY)).Order("timeframe asc", false).Group("timeframe")</pre></code></td></tr><tr><td>78</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.Ago">func Checkin.Ago</div><div class="info"><a href="#s_fn_Checkin.Ago">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>124</td><td><code><pre>e Checkin has been reported yet</pre></code></td></tr><tr class="miss"><td>125</td><td><code><pre>func (c *Checkin) RecheckCheckinFailure(guard chan struct{}) {</pre></code></td></tr><tr><td>126</td><td><code><pre> between :</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.TotalFailures24">func Service.TotalFailures24</div><div class="info"><a href="#s_fn_Service.TotalFailures24">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>110</td><td><code><pre>func (s *Service) TotalFailures24() (uint64, error) {</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> ago := time.Now().Add(-24 * time.Hour)</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return s.TotalFailuresSince(ago)</pre></code></td></tr><tr><td>113</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Failure.Delete">func Failure.Delete</div><div class="info"><a href="#s_fn_Failure.Delete">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>82</td><td><code><pre>func (f *Failure) Delete() error {</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> db := failuresDB().Delete(f)</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> return db.Error</pre></code></td></tr><tr><td>85</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SaveFile">func SaveFile</div><div class="info"><a href="#s_fn_SaveFile">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>106</td><td><code><pre>func SaveFile(filename string, data []byte) error {</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> err := ioutil.WriteFile(filename, data, 0644)</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> return err</pre></code></td></tr><tr><td>109</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DbConfig.waitForDb">func DbConfig.waitForDb</div><div class="info"><a href="#s_fn_DbConfig.waitForDb">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>216</td><td><code><pre>f Configs.DbPort == 0 {</pre></code></td></tr><tr class="miss"><td>217</td><td><code><pre> Configs.DbPort = 1433</pre></code></td></tr><tr><td>218</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>219</td><td><code><pre> host := fmt.Sprintf("%v:%v", Configs.DbHost, Configs.DbPo</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Failure.Ago">func Failure.Ago</div><div class="info"><a href="#s_fn_Failure.Ago">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>76</td><td><code><pre>func (f *Failure) Ago() string {</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> got, _ := timeago.TimeAgoWithTime(time.Now(), f.CreatedAt)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> return got</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@68:10">func @68:10</div><div class="info"><a href="#s_fn_@68:10">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>68</td><td><code><pre>func() string {</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> return "/"</pre></code></td></tr><tr><td>70</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@65:17">func @65:17</div><div class="info"><a href="#s_fn_@65:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>65</td><td><code><pre>func(html string) string {</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> return utils.UnderScoreString(html)</pre></code></td></tr><tr><td>67</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@71:17">func @71:17</div><div class="info"><a href="#s_fn_@71:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>71</td><td><code><pre>func() string {</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> return ExportChartsJs()</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.UpdateSingle">func Service.UpdateSingle</div><div class="info"><a href="#s_fn_Service.UpdateSingle">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>320</td><td><code><pre>will also end the service checking go routine</pre></code></td></tr><tr class="miss"><td>321</td><td><code><pre>func (u *Service) Delete() error {</pre></code></td></tr><tr><td>322</td><td><code><pre> i := u.index()</pre></code></td></tr><tr><td>323</td><td><code><pre> err := servi</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@59:14">func @59:14</div><div class="info"><a href="#s_fn_@59:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>59</td><td><code><pre>func() *Core {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> return CoreApp</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@56:14">func @56:14</div><div class="info"><a href="#s_fn_@56:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>56</td><td><code><pre>func() string {</pre></code></td></tr><tr class="miss"><td>57</td><td><code><pre> return VERSION</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.ServicesCount">func Core.ServicesCount</div><div class="info"><a href="#s_fn_Core.ServicesCount">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr class="miss"><td>361</td><td><code><pre>c (u *Service) Create(check bool) (int64, error) {</pre></code></td></tr><tr><td>362</td><td><code><pre> u.CreatedA</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@53:11">func @53:11</div><div class="info"><a href="#s_fn_@53:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>53</td><td><code><pre>func(html string) template.HTML {</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_injectDatabase">func injectDatabase</div><div class="info"><a href="#s_fn_injectDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>27</td><td><code><pre>func injectDatabase() {</pre></code></td></tr><tr class="miss"><td>28</td><td><code><pre> Configs.Connect(false, utils.Directory)</pre></code></td></tr><tr><td>29</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@93:11">func @93:11</div><div class="info"><a href="#s_fn_@93:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>93</td><td><code><pre>func(html string) template.HTML {</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.String">func Checkin.String</div><div class="info"><a href="#s_fn_Checkin.String">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>33</td><td><code><pre>in API string</pre></code></td></tr><tr class="miss"><td>34</td><td><code><pre>func (c *Checkin) String() string {</pre></code></td></tr><tr><td>35</td><td><code><pre> ret</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.ToCore">func Core.ToCore</div><div class="info"><a href="#s_fn_Core.ToCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>50</td><td><code><pre>p.Started = time.Now()</pre></code></td></tr><tr><td>51</td><td><code><pre> return CoreApp</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre>}</pre></code></td></tr><tr><td>53</td><td><code><pre></pre></code></td></tr><tr><td>54</td><td><code><pre>// ToCore wi</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@50:9">func @50:9</div><div class="info"><a href="#s_fn_@50:9">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>50</td><td><code><pre>func(html string) template.JS {</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> return template.JS(html)</pre></code></td></tr><tr><td>52</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Service.DowntimeText">func Service.DowntimeText</div><div class="info"><a href="#s_fn_Service.DowntimeText">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>167</td><td><code><pre>d(s.Downtime()), time.Now())</pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> return fmt.Sprintf("Reported offline %v, %v", got, lastFailure.ParseError())</pre></code></td></tr><tr><td>169</td><td><code><pre> } else {</pre></code></td></tr><tr><td>170</td><td><code><pre> return fmt.Sprintf(</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Core.UsingAssets">func Core.UsingAssets</div><div class="info"><a href="#s_fn_Core.UsingAssets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>89</td><td><code><pre>()</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> current := utils.Timezoner(t, c.Timezone)</pre></code></td></tr><tr><td>91</td><td><code><pre> ansic := "Monday 03:04:05 PM"</pre></code></td></tr><tr><td>92</td><td><code><pre> re</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@62:14">func @62:14</div><div class="info"><a href="#s_fn_@62:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>62</td><td><code><pre>func() bool {</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> return CoreApp.UseCdn</pre></code></td></tr><tr><td>64</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Checkin.CreateFailure">func Checkin.CreateFailure</div><div class="info"><a href="#s_fn_Checkin.CreateFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>124</td><td><code><pre>eckCheckinFailure will check if a Serv</pre></code></td></tr></table>
|
||
|
|
||
|
<!-- Can be parsed by external script
|
||
|
PACKAGE:github.com/hunterlong/statup/core DONE:52.31
|
||
|
-->
|
||
|
|
||
|
<div id="pkg_github.com/hunterlong/statup/core/notifier" class="funcname">Package Overview: github.com/hunterlong/statup/core/notifier <span class="packageTotal">72.73%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/core/notifier</code> package. It
|
||
|
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/core/notifier | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
|
||
|
<tr id="s_fn_Init"><td><code><a href="#fn_Init">Init(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
|
||
|
<tr id="s_fn_Load"><td><code><a href="#fn_Load">Load(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
|
||
|
<tr id="s_fn_Notification.SentLast"><td><code><a href="#fn_Notification.SentLast">Notification.SentLast(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
|
||
|
<tr id="s_fn_Update"><td><code><a href="#fn_Update">Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
|
||
|
<tr id="s_fn_Notification.IsRunning"><td><code><a href="#fn_Notification.IsRunning">Notification.IsRunning(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
|
||
|
<tr id="s_fn_Notification.LastSent"><td><code><a href="#fn_Notification.LastSent">Notification.LastSent(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
|
||
|
<tr id="s_fn_SelectNotification"><td><code><a href="#fn_SelectNotification">SelectNotification(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnDeletedService"><td><code><a href="#fn_OnDeletedService">OnDeletedService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnNewUser"><td><code><a href="#fn_OnNewUser">OnNewUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnUpdatedUser"><td><code><a href="#fn_OnUpdatedUser">OnUpdatedUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnDeletedUser"><td><code><a href="#fn_OnDeletedUser">OnDeletedUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnUpdatedCore"><td><code><a href="#fn_OnUpdatedCore">OnUpdatedCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_inLimits"><td><code><a href="#fn_inLimits">inLimits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnUpdatedService"><td><code><a href="#fn_OnUpdatedService">OnUpdatedService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnUpdatedNotifier"><td><code><a href="#fn_OnUpdatedNotifier">OnUpdatedNotifier(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnNewService"><td><code><a href="#fn_OnNewService">OnNewService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnSuccess"><td><code><a href="#fn_OnSuccess">OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_OnFailure"><td><code><a href="#fn_OnFailure">OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_isType"><td><code><a href="#fn_isType">isType(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_reverseLogs"><td><code><a href="#fn_reverseLogs">reverseLogs(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_Notification.makeLog"><td><code><a href="#fn_Notification.makeLog">Notification.makeLog(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_Notification.SentLastHour"><td><code><a href="#fn_Notification.SentLastHour">Notification.SentLastHour(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_isEnabled"><td><code><a href="#fn_isEnabled">isEnabled(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_Notification.SentLastMinute"><td><code><a href="#fn_Notification.SentLastMinute">Notification.SentLastMinute(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_Notification.close"><td><code><a href="#fn_Notification.close">Notification.close(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_isInDatabase"><td><code><a href="#fn_isInDatabase">isInDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_Notification.CanTest"><td><code><a href="#fn_Notification.CanTest">Notification.CanTest(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_Notification.Logs"><td><code><a href="#fn_Notification.Logs">Notification.Logs(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_asNotification"><td><code><a href="#fn_asNotification">asNotification(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_modelDb"><td><code><a href="#fn_modelDb">modelDb(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_Notification.AddQueue"><td><code><a href="#fn_Notification.AddQueue">Notification.AddQueue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_Notification.start"><td><code><a href="#fn_Notification.start">Notification.start(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_Queue"><td><code><a href="#fn_Queue">Queue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>94.12%</code></td><td class="linecount"><code>16/17</code></td></tr>
|
||
|
<tr id="s_fn_checkNotifierForm"><td><code><a href="#fn_checkNotifierForm">checkNotifierForm(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/audit.go</code></td><td class="percent"><code>83.33%</code></td><td class="linecount"><code>5/6</code></td></tr>
|
||
|
<tr id="s_fn_insertDatabase"><td><code><a href="#fn_insertDatabase">insertDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
|
||
|
<tr id="s_fn_contains"><td><code><a href="#fn_contains">contains(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/audit.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>3/4</code></td></tr>
|
||
|
<tr id="s_fn_Notification.WithinLimits"><td><code><a href="#fn_Notification.WithinLimits">Notification.WithinLimits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>8/11</code></td></tr>
|
||
|
<tr id="s_fn_install"><td><code><a href="#fn_install">install(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
|
||
|
<tr id="s_fn_AddNotifier"><td><code><a href="#fn_AddNotifier">AddNotifier(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
|
||
|
<tr id="s_fn_startAllNotifiers"><td><code><a href="#fn_startAllNotifiers">startAllNotifiers(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>57.14%</code></td><td class="linecount"><code>4/7</code></td></tr>
|
||
|
<tr id="s_fn_Notification.GetValue"><td><code><a href="#fn_Notification.GetValue">Notification.GetValue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>30.77%</code></td><td class="linecount"><code>4/13</code></td></tr>
|
||
|
<tr id="s_fn_normalizeType"><td><code><a href="#fn_normalizeType">normalizeType(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>22.22%</code></td><td class="linecount"><code>2/9</code></td></tr>
|
||
|
<tr id="s_fn_SelectNotifier"><td><code><a href="#fn_SelectNotifier">SelectNotifier(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
|
||
|
<tr id="s_fn_Notification.removeQueue"><td><code><a href="#fn_Notification.removeQueue">Notification.removeQueue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
|
||
|
<tr id="s_fn_OnSave"><td><code><a href="#fn_OnSave">OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_OnStart"><td><code><a href="#fn_OnStart">OnStart(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_OnNewNotifier"><td><code><a href="#fn_OnNewNotifier">OnNewNotifier(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_SetDB"><td><code><a href="#fn_SetDB">SetDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_Notification.ResetQueue"><td><code><a href="#fn_Notification.ResetQueue">Notification.ResetQueue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr><td colspan="2"><code>github.com/hunterlong/statup/core/notifier</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>152/209</code></td></tr>
|
||
|
</table>
|
||
|
|
||
|
<div class="funcname" id="fn_Init">func Init</div><div class="info"><a href="#s_fn_Init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>239</td><td><code><pre>func Init(n Notifier) (*Notification, error) {</pre></code></td></tr><tr><td>240</td><td><code><pre> err := install(n)</pre></code></td></tr><tr><td>241</td><td><code><pre> var notify *Notification</pre></code></td></tr><tr><td>242</td><td><code><pre> if err == nil {</pre></code></td></tr><tr><td>243</td><td><code><pre> notify, _ = SelectNotification(n)</pre></code></td></tr><tr><td>244</td><td><code><pre> notify.testable = isType(n, new(Tester))</pre></code></td></tr><tr><td>245</td><td><code><pre> notify.Form = n.Select().Form</pre></code></td></tr><tr><td>246</td><td><code><pre> }</pre></code></td></tr><tr><td>247</td><td><code><pre> return notify, err</pre></code></td></tr><tr><td>248</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Load">func Load</div><div class="info"><a href="#s_fn_Load">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>122</td><td><code><pre>func Load() []types.AllNotifiers {</pre></code></td></tr><tr><td>123</td><td><code><pre> var notifiers []types.AllNotifiers</pre></code></td></tr><tr><td>124</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>125</td><td><code><pre> n := comm.(Notifier)</pre></code></td></tr><tr><td>126</td><td><code><pre> Init(n)</pre></code></td></tr><tr><td>127</td><td><code><pre> notifiers = append(notifiers, n)</pre></code></td></tr><tr><td>128</td><td><code><pre> }</pre></code></td></tr><tr><td>129</td><td><code><pre> startAllNotifiers()</pre></code></td></tr><tr><td>130</td><td><code><pre> return notifiers</pre></code></td></tr><tr><td>131</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.SentLast">func Notification.SentLast</div><div class="info"><a href="#s_fn_Notification.SentLast">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>330</td><td><code><pre>func (f *Notification) SentLast(since time.Time) int {</pre></code></td></tr><tr><td>331</td><td><code><pre> sent := 0</pre></code></td></tr><tr><td>332</td><td><code><pre> for _, v := range f.Logs() {</pre></code></td></tr><tr><td>333</td><td><code><pre> lastTime := time.Time(v.Time)</pre></code></td></tr><tr><td>334</td><td><code><pre> if lastTime.After(since) {</pre></code></td></tr><tr><td>335</td><td><code><pre> sent++</pre></code></td></tr><tr><td>336</td><td><code><pre> }</pre></code></td></tr><tr><td>337</td><td><code><pre> }</pre></code></td></tr><tr><td>338</td><td><code><pre> return sent</pre></code></td></tr><tr><td>339</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Update">func Update</div><div class="info"><a href="#s_fn_Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>203</td><td><code><pre>func Update(n Notifier, notif *Notification) (*Notification, error) {</pre></code></td></tr><tr><td>204</td><td><code><pre> err := db.Model(&Notification{}).Update(notif)</pre></code></td></tr><tr><td>205</td><td><code><pre> if notif.Enabled {</pre></code></td></tr><tr><td>206</td><td><code><pre> notif.close()</pre></code></td></tr><tr><td>207</td><td><code><pre> notif.start()</pre></code></td></tr><tr><td>208</td><td><code><pre> go Queue(n)</pre></code></td></tr><tr><td>209</td><td><code><pre> }</pre></code></td></tr><tr><td>210</td><td><code><pre> return notif, err.Error</pre></code></td></tr><tr><td>211</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.IsRunning">func Notification.IsRunning</div><div class="info"><a href="#s_fn_Notification.IsRunning">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>427</td><td><code><pre>func (n *Notification) IsRunning() bool {</pre></code></td></tr><tr><td>428</td><td><code><pre> if n.Running == nil {</pre></code></td></tr><tr><td>429</td><td><code><pre> return false</pre></code></td></tr><tr><td>430</td><td><code><pre> }</pre></code></td></tr><tr><td>431</td><td><code><pre> select {</pre></code></td></tr><tr><td>432</td><td><code><pre> case <-n.Running:</pre></code></td></tr><tr><td>433</td><td><code><pre> return false</pre></code></td></tr><tr><td>434</td><td><code><pre> default:</pre></code></td></tr><tr><td>435</td><td><code><pre> return true</pre></code></td></tr><tr><td>436</td><td><code><pre> }</pre></code></td></tr><tr><td>437</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.LastSent">func Notification.LastSent</div><div class="info"><a href="#s_fn_Notification.LastSent">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>308</td><td><code><pre>func (f *Notification) LastSent() time.Duration {</pre></code></td></tr><tr><td>309</td><td><code><pre> if len(f.logs) == 0 {</pre></code></td></tr><tr><td>310</td><td><code><pre> return time.Duration(0)</pre></code></td></tr><tr><td>311</td><td><code><pre> }</pre></code></td></tr><tr><td>312</td><td><code><pre> last := f.Logs()[0]</pre></code></td></tr><tr><td>313</td><td><code><pre> since := time.Since(last.Timestamp)</pre></code></td></tr><tr><td>314</td><td><code><pre> return since</pre></code></td></tr><tr><td>315</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SelectNotification">func SelectNotification</div><div class="info"><a href="#s_fn_SelectNotification">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>196</td><td><code><pre>func SelectNotification(n Notifier) (*Notification, error) {</pre></code></td></tr><tr><td>197</td><td><code><pre> notifier := n.Select()</pre></code></td></tr><tr><td>198</td><td><code><pre> err := db.Model(&Notification{}).Where("method = ?", notifier.Method).Scan(&notifier)</pre></code></td></tr><tr><td>199</td><td><code><pre> return notifier, err.Error</pre></code></td></tr><tr><td>200</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnDeletedService">func OnDeletedService</div><div class="info"><a href="#s_fn_OnDeletedService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>69</td><td><code><pre>func OnDeletedService(s *types.Service) {</pre></code></td></tr><tr><td>70</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>71</td><td><code><pre> if isType(comm, new(ServiceEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>72</td><td><code><pre> comm.(ServiceEvents).OnDeletedService(s)</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> }</pre></code></td></tr><tr><td>75</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnNewUser">func OnNewUser</div><div class="info"><a href="#s_fn_OnNewUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>78</td><td><code><pre>func OnNewUser(u *types.User) {</pre></code></td></tr><tr><td>79</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>80</td><td><code><pre> if isType(comm, new(UserEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>81</td><td><code><pre> comm.(UserEvents).OnNewUser(u)</pre></code></td></tr><tr><td>82</td><td><code><pre> }</pre></code></td></tr><tr><td>83</td><td><code><pre> }</pre></code></td></tr><tr><td>84</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnUpdatedUser">func OnUpdatedUser</div><div class="info"><a href="#s_fn_OnUpdatedUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>87</td><td><code><pre>func OnUpdatedUser(u *types.User) {</pre></code></td></tr><tr><td>88</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>89</td><td><code><pre> if isType(comm, new(UserEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>90</td><td><code><pre> comm.(UserEvents).OnUpdatedUser(u)</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr><td>92</td><td><code><pre> }</pre></code></td></tr><tr><td>93</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnDeletedUser">func OnDeletedUser</div><div class="info"><a href="#s_fn_OnDeletedUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>96</td><td><code><pre>func OnDeletedUser(u *types.User) {</pre></code></td></tr><tr><td>97</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>98</td><td><code><pre> if isType(comm, new(UserEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>99</td><td><code><pre> comm.(UserEvents).OnDeletedUser(u)</pre></code></td></tr><tr><td>100</td><td><code><pre> }</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr><tr><td>102</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnUpdatedCore">func OnUpdatedCore</div><div class="info"><a href="#s_fn_OnUpdatedCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>105</td><td><code><pre>func OnUpdatedCore(c *types.Core) {</pre></code></td></tr><tr><td>106</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>107</td><td><code><pre> if isType(comm, new(CoreEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>108</td><td><code><pre> comm.(CoreEvents).OnUpdatedCore(c)</pre></code></td></tr><tr><td>109</td><td><code><pre> }</pre></code></td></tr><tr><td>110</td><td><code><pre> }</pre></code></td></tr><tr><td>111</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_inLimits">func inLimits</div><div class="info"><a href="#s_fn_inLimits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>383</td><td><code><pre>func inLimits(n interface{}) bool {</pre></code></td></tr><tr><td>384</td><td><code><pre> notifier := n.(Notifier).Select()</pre></code></td></tr><tr><td>385</td><td><code><pre> ok, _ := notifier.WithinLimits()</pre></code></td></tr><tr><td>386</td><td><code><pre> return ok</pre></code></td></tr><tr><td>387</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnUpdatedService">func OnUpdatedService</div><div class="info"><a href="#s_fn_OnUpdatedService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>60</td><td><code><pre>func OnUpdatedService(s *types.Service) {</pre></code></td></tr><tr><td>61</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>62</td><td><code><pre> if isType(comm, new(ServiceEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>63</td><td><code><pre> comm.(ServiceEvents).OnUpdatedService(s)</pre></code></td></tr><tr><td>64</td><td><code><pre> }</pre></code></td></tr><tr><td>65</td><td><code><pre> }</pre></code></td></tr><tr><td>66</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnUpdatedNotifier">func OnUpdatedNotifier</div><div class="info"><a href="#s_fn_OnUpdatedNotifier">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>132</td><td><code><pre>func OnUpdatedNotifier(n *Notification) {</pre></code></td></tr><tr><td>133</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>134</td><td><code><pre> if isType(comm, new(NotifierEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>135</td><td><code><pre> comm.(NotifierEvents).OnUpdatedNotifier(n)</pre></code></td></tr><tr><td>136</td><td><code><pre> }</pre></code></td></tr><tr><td>137</td><td><code><pre> }</pre></code></td></tr><tr><td>138</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnNewService">func OnNewService</div><div class="info"><a href="#s_fn_OnNewService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>51</td><td><code><pre>func OnNewService(s *types.Service) {</pre></code></td></tr><tr><td>52</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>53</td><td><code><pre> if isType(comm, new(ServiceEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>54</td><td><code><pre> comm.(ServiceEvents).OnNewService(s)</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr><tr><td>56</td><td><code><pre> }</pre></code></td></tr><tr><td>57</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnSuccess">func OnSuccess</div><div class="info"><a href="#s_fn_OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>42</td><td><code><pre>func OnSuccess(s *types.Service) {</pre></code></td></tr><tr><td>43</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>44</td><td><code><pre> if isType(comm, new(BasicEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>45</td><td><code><pre> comm.(BasicEvents).OnSuccess(s)</pre></code></td></tr><tr><td>46</td><td><code><pre> }</pre></code></td></tr><tr><td>47</td><td><code><pre> }</pre></code></td></tr><tr><td>48</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnFailure">func OnFailure</div><div class="info"><a href="#s_fn_OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>33</td><td><code><pre>func OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr><td>34</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>35</td><td><code><pre> if isType(comm, new(BasicEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr><td>36</td><td><code><pre> comm.(BasicEvents).OnFailure(s, f)</pre></code></td></tr><tr><td>37</td><td><code><pre> }</pre></code></td></tr><tr><td>38</td><td><code><pre> }</pre></code></td></tr><tr><td>39</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_isType">func isType</div><div class="info"><a href="#s_fn_isType">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>370</td><td><code><pre>func isType(n interface{}, obj interface{}) bool {</pre></code></td></tr><tr><td>371</td><td><code><pre> one := reflect.TypeOf(n)</pre></code></td></tr><tr><td>372</td><td><code><pre> two := reflect.ValueOf(obj).Elem()</pre></code></td></tr><tr><td>373</td><td><code><pre> return one.Implements(two.Type())</pre></code></td></tr><tr><td>374</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_reverseLogs">func reverseLogs</div><div class="info"><a href="#s_fn_reverseLogs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>182</td><td><code><pre>func reverseLogs(input []*NotificationLog) []*NotificationLog {</pre></code></td></tr><tr><td>183</td><td><code><pre> if len(input) == 0 {</pre></code></td></tr><tr><td>184</td><td><code><pre> return input</pre></code></td></tr><tr><td>185</td><td><code><pre> }</pre></code></td></tr><tr><td>186</td><td><code><pre> return append(reverseLogs(input[1:]), input[0])</pre></code></td></tr><tr><td>187</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.makeLog">func Notification.makeLog</div><div class="info"><a href="#s_fn_Notification.makeLog">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>167</td><td><code><pre>func (n *Notification) makeLog(msg interface{}) {</pre></code></td></tr><tr><td>168</td><td><code><pre> log := &NotificationLog{</pre></code></td></tr><tr><td>169</td><td><code><pre> Message: normalizeType(msg),</pre></code></td></tr><tr><td>170</td><td><code><pre> Time: utils.Timestamp(time.Now()),</pre></code></td></tr><tr><td>171</td><td><code><pre> Timestamp: time.Now(),</pre></code></td></tr><tr><td>172</td><td><code><pre> }</pre></code></td></tr><tr><td>173</td><td><code><pre> n.logs = append(n.logs, log)</pre></code></td></tr><tr><td>174</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.SentLastHour">func Notification.SentLastHour</div><div class="info"><a href="#s_fn_Notification.SentLastHour">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>318</td><td><code><pre>func (f *Notification) SentLastHour() int {</pre></code></td></tr><tr><td>319</td><td><code><pre> since := time.Now().Add(-1 * time.Hour)</pre></code></td></tr><tr><td>320</td><td><code><pre> return f.SentLast(since)</pre></code></td></tr><tr><td>321</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_isEnabled">func isEnabled</div><div class="info"><a href="#s_fn_isEnabled">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>377</td><td><code><pre>func isEnabled(n interface{}) bool {</pre></code></td></tr><tr><td>378</td><td><code><pre> notifier, _ := SelectNotification(n.(Notifier))</pre></code></td></tr><tr><td>379</td><td><code><pre> return notifier.Enabled</pre></code></td></tr><tr><td>380</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.SentLastMinute">func Notification.SentLastMinute</div><div class="info"><a href="#s_fn_Notification.SentLastMinute">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>324</td><td><code><pre>func (f *Notification) SentLastMinute() int {</pre></code></td></tr><tr><td>325</td><td><code><pre> since := time.Now().Add(-1 * time.Minute)</pre></code></td></tr><tr><td>326</td><td><code><pre> return f.SentLast(since)</pre></code></td></tr><tr><td>327</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.close">func Notification.close</div><div class="info"><a href="#s_fn_Notification.close">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>420</td><td><code><pre>func (n *Notification) close() {</pre></code></td></tr><tr><td>421</td><td><code><pre> if n.IsRunning() {</pre></code></td></tr><tr><td>422</td><td><code><pre> close(n.Running)</pre></code></td></tr><tr><td>423</td><td><code><pre> }</pre></code></td></tr><tr><td>424</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_isInDatabase">func isInDatabase</div><div class="info"><a href="#s_fn_isInDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>190</td><td><code><pre>func isInDatabase(n *Notification) bool {</pre></code></td></tr><tr><td>191</td><td><code><pre> inDb := modelDb(n).RecordNotFound()</pre></code></td></tr><tr><td>192</td><td><code><pre> return !inDb</pre></code></td></tr><tr><td>193</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.CanTest">func Notification.CanTest</div><div class="info"><a href="#s_fn_Notification.CanTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>88</td><td><code><pre>func (n *Notification) CanTest() bool {</pre></code></td></tr><tr><td>89</td><td><code><pre> return n.testable</pre></code></td></tr><tr><td>90</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.Logs">func Notification.Logs</div><div class="info"><a href="#s_fn_Notification.Logs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>177</td><td><code><pre>func (n *Notification) Logs() []*NotificationLog {</pre></code></td></tr><tr><td>178</td><td><code><pre> return reverseLogs(n.logs)</pre></code></td></tr><tr><td>179</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_asNotification">func asNotification</div><div class="info"><a href="#s_fn_asNotification">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>103</td><td><code><pre>func asNotification(n Notifier) *Notification {</pre></code></td></tr><tr><td>104</td><td><code><pre> return n.Select()</pre></code></td></tr><tr><td>105</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_modelDb">func modelDb</div><div class="info"><a href="#s_fn_modelDb">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>93</td><td><code><pre>func modelDb(n *Notification) *gorm.DB {</pre></code></td></tr><tr><td>94</td><td><code><pre> return db.Model(&Notification{}).Where("method = ?", n.Method).Find(n)</pre></code></td></tr><tr><td>95</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.AddQueue">func Notification.AddQueue</div><div class="info"><a href="#s_fn_Notification.AddQueue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>83</td><td><code><pre>func (n *Notification) AddQueue(msg interface{}) {</pre></code></td></tr><tr><td>84</td><td><code><pre> n.Queue = append(n.Queue, msg)</pre></code></td></tr><tr><td>85</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.start">func Notification.start</div><div class="info"><a href="#s_fn_Notification.start">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>415</td><td><code><pre>func (n *Notification) start() {</pre></code></td></tr><tr><td>416</td><td><code><pre> n.Running = make(chan bool)</pre></code></td></tr><tr><td>417</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Queue">func Queue</div><div class="info"><a href="#s_fn_Queue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>265</td><td><code><pre>func Queue(n Notifier) {</pre></code></td></tr><tr><td>266</td><td><code><pre> notification := n.Select()</pre></code></td></tr><tr><td>267</td><td><code><pre> rateLimit := notification.Delay</pre></code></td></tr><tr><td>268</td><td><code><pre></pre></code></td></tr><tr><td>269</td><td><code><pre>CheckNotifier:</pre></code></td></tr><tr><td>270</td><td><code><pre> for {</pre></code></td></tr><tr><td>271</td><td><code><pre> select {</pre></code></td></tr><tr><td>272</td><td><code><pre> case <-notification.Running:</pre></code></td></tr><tr><td>273</td><td><code><pre> break CheckNotifier</pre></code></td></tr><tr><td>274</td><td><code><pre> case <-time.After(rateLimit):</pre></code></td></tr><tr><td>275</td><td><code><pre> notification = n.Select()</pre></code></td></tr><tr><td>276</td><td><code><pre> if len(notification.Queue) > 0 {</pre></code></td></tr><tr><td>277</td><td><code><pre> ok, _ := notification.WithinLimits()</pre></code></td></tr><tr><td>278</td><td><code><pre> if ok {</pre></code></td></tr><tr><td>279</td><td><code><pre> msg := notification.Queue[0]</pre></code></td></tr><tr><td>280</td><td><code><pre> err := n.Send(msg)</pre></code></td></tr><tr><td>281</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>282</td><td><code><pre> utils.Log(2, fmt.Sprintf("notifier %v had an error: %v", notification.Method, err))</pre></code></td></tr><tr><td>283</td><td><code><pre> }</pre></code></td></tr><tr><td>284</td><td><code><pre> notification.makeLog(msg)</pre></code></td></tr><tr><td>285</td><td><code><pre> notification.Queue = notification.Queue[1:]</pre></code></td></tr><tr><td>286</td><td><code><pre> rateLimit = notification.Delay</pre></code></td></tr><tr><td>287</td><td><code><pre> }</pre></code></td></tr><tr><td>288</td><td><code><pre> }</pre></code></td></tr><tr><td>289</td><td><code><pre> }</pre></code></td></tr><tr><td>290</td><td><code><pre> continue</pre></code></td></tr><tr><td>291</td><td><code><pre> }</pre></code></td></tr><tr><td>292</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_checkNotifierForm">func checkNotifierForm</div><div class="info"><a href="#s_fn_checkNotifierForm">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/audit.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>28</td><td><code><pre>func checkNotifierForm(n Notifier) error {</pre></code></td></tr><tr><td>29</td><td><code><pre> notifier := asNotification(n)</pre></code></td></tr><tr><td>30</td><td><code><pre> for _, f := range notifier.Form {</pre></code></td></tr><tr><td>31</td><td><code><pre> contains := contains(f.DbField, allowed_vars)</pre></code></td></tr><tr><td>32</td><td><code><pre> if !contains {</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> return errors.New(fmt.Sprintf("the DbField '%v' is not allowed, allowed vars: %v", f.DbField, allowed_vars))</pre></code></td></tr><tr><td>34</td><td><code><pre> }</pre></code></td></tr><tr><td>35</td><td><code><pre> }</pre></code></td></tr><tr><td>36</td><td><code><pre> return nil</pre></code></td></tr><tr><td>37</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_insertDatabase">func insertDatabase</div><div class="info"><a href="#s_fn_insertDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>214</td><td><code><pre>func insertDatabase(n *Notification) (int64, error) {</pre></code></td></tr><tr><td>215</td><td><code><pre> n.Limits = 3</pre></code></td></tr><tr><td>216</td><td><code><pre> query := db.Create(n)</pre></code></td></tr><tr><td>217</td><td><code><pre> if query.Error != nil {</pre></code></td></tr><tr class="miss"><td>218</td><td><code><pre> return 0, query.Error</pre></code></td></tr><tr><td>219</td><td><code><pre> }</pre></code></td></tr><tr><td>220</td><td><code><pre> return n.Id, query.Error</pre></code></td></tr><tr><td>221</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_contains">func contains</div><div class="info"><a href="#s_fn_contains">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/audit.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>39</td><td><code><pre>func contains(s string, arr []string) bool {</pre></code></td></tr><tr><td>40</td><td><code><pre> for _, v := range arr {</pre></code></td></tr><tr><td>41</td><td><code><pre> if strings.ToLower(s) == v {</pre></code></td></tr><tr><td>42</td><td><code><pre> return true</pre></code></td></tr><tr><td>43</td><td><code><pre> }</pre></code></td></tr><tr><td>44</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> return false</pre></code></td></tr><tr><td>46</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.WithinLimits">func Notification.WithinLimits</div><div class="info"><a href="#s_fn_Notification.WithinLimits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>390</td><td><code><pre>func (notify *Notification) WithinLimits() (bool, error) {</pre></code></td></tr><tr><td>391</td><td><code><pre> if notify.SentLastMinute() == 0 {</pre></code></td></tr><tr><td>392</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>393</td><td><code><pre> }</pre></code></td></tr><tr><td>394</td><td><code><pre> if notify.SentLastMinute() >= notify.Limits {</pre></code></td></tr><tr class="miss"><td>395</td><td><code><pre> return false, errors.New(fmt.Sprintf("notifier sent %v out of %v in last minute", notify.SentLastMinute(), notify.Limits))</pre></code></td></tr><tr><td>396</td><td><code><pre> }</pre></code></td></tr><tr><td>397</td><td><code><pre> if notify.Delay.Seconds() == 0 {</pre></code></td></tr><tr class="miss"><td>398</td><td><code><pre> notify.Delay = time.Duration(500 * time.Millisecond)</pre></code></td></tr><tr><td>399</td><td><code><pre> }</pre></code></td></tr><tr><td>400</td><td><code><pre> if notify.LastSent().Seconds() == 0 {</pre></code></td></tr><tr class="miss"><td>401</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>402</td><td><code><pre> }</pre></code></td></tr><tr><td>403</td><td><code><pre> if notify.Delay.Seconds() >= notify.LastSent().Seconds() {</pre></code></td></tr><tr><td>404</td><td><code><pre> return false, errors.New(fmt.Sprintf("notifiers delay (%v) is greater than last message sent (%v)", notify.Delay.Seconds(), notify.LastSent().Seconds()))</pre></code></td></tr><tr><td>405</td><td><code><pre> }</pre></code></td></tr><tr><td>406</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>407</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_install">func install</div><div class="info"><a href="#s_fn_install">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>295</td><td><code><pre>func install(n Notifier) error {</pre></code></td></tr><tr><td>296</td><td><code><pre> inDb := isInDatabase(n.Select())</pre></code></td></tr><tr><td>297</td><td><code><pre> if !inDb {</pre></code></td></tr><tr><td>298</td><td><code><pre> _, err := insertDatabase(n.Select())</pre></code></td></tr><tr><td>299</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>300</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>301</td><td><code><pre> return err</pre></code></td></tr><tr><td>302</td><td><code><pre> }</pre></code></td></tr><tr><td>303</td><td><code><pre> }</pre></code></td></tr><tr><td>304</td><td><code><pre> return nil</pre></code></td></tr><tr><td>305</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_AddNotifier">func AddNotifier</div><div class="info"><a href="#s_fn_AddNotifier">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>108</td><td><code><pre>func AddNotifier(n Notifier) error {</pre></code></td></tr><tr><td>109</td><td><code><pre> if isType(n, new(Notifier)) {</pre></code></td></tr><tr><td>110</td><td><code><pre> err := checkNotifierForm(n)</pre></code></td></tr><tr><td>111</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return err</pre></code></td></tr><tr><td>113</td><td><code><pre> }</pre></code></td></tr><tr><td>114</td><td><code><pre> AllCommunications = append(AllCommunications, n)</pre></code></td></tr><tr><td>115</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> return errors.New("notifier does not have the required methods")</pre></code></td></tr><tr><td>117</td><td><code><pre> }</pre></code></td></tr><tr><td>118</td><td><code><pre> return nil</pre></code></td></tr><tr><td>119</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_startAllNotifiers">func startAllNotifiers</div><div class="info"><a href="#s_fn_startAllNotifiers">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>251</td><td><code><pre>func startAllNotifiers() {</pre></code></td></tr><tr><td>252</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>253</td><td><code><pre> if isType(comm, new(Notifier)) {</pre></code></td></tr><tr><td>254</td><td><code><pre> notify := comm.(Notifier)</pre></code></td></tr><tr><td>255</td><td><code><pre> if notify.Select().Enabled {</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> notify.Select().close()</pre></code></td></tr><tr class="miss"><td>257</td><td><code><pre> notify.Select().start()</pre></code></td></tr><tr class="miss"><td>258</td><td><code><pre> go Queue(notify)</pre></code></td></tr><tr><td>259</td><td><code><pre> }</pre></code></td></tr><tr><td>260</td><td><code><pre> }</pre></code></td></tr><tr><td>261</td><td><code><pre> }</pre></code></td></tr><tr><td>262</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.GetValue">func Notification.GetValue</div><div class="info"><a href="#s_fn_Notification.GetValue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>342</td><td><code><pre>func (n *Notification) GetValue(dbField string) string {</pre></code></td></tr><tr><td>343</td><td><code><pre> dbField = strings.ToLower(dbField)</pre></code></td></tr><tr><td>344</td><td><code><pre> switch dbField {</pre></code></td></tr><tr><td>345</td><td><code><pre> case "host":</pre></code></td></tr><tr><td>346</td><td><code><pre> return n.Host</pre></code></td></tr><tr><td>347</td><td><code><pre> case "port":</pre></code></td></tr><tr class="miss"><td>348</td><td><code><pre> return fmt.Sprintf("%v", n.Port)</pre></code></td></tr><tr><td>349</td><td><code><pre> case "username":</pre></code></td></tr><tr class="miss"><td>350</td><td><code><pre> return n.Username</pre></code></td></tr><tr><td>351</td><td><code><pre> case "password":</pre></code></td></tr><tr class="miss"><td>352</td><td><code><pre> if n.Password != "" {</pre></code></td></tr><tr class="miss"><td>353</td><td><code><pre> return "##########"</pre></code></td></tr><tr><td>354</td><td><code><pre> }</pre></code></td></tr><tr><td>355</td><td><code><pre> case "var1":</pre></code></td></tr><tr class="miss"><td>356</td><td><code><pre> return n.Var1</pre></code></td></tr><tr><td>357</td><td><code><pre> case "var2":</pre></code></td></tr><tr class="miss"><td>358</td><td><code><pre> return n.Var2</pre></code></td></tr><tr><td>359</td><td><code><pre> case "api_key":</pre></code></td></tr><tr><td>360</td><td><code><pre> return n.ApiKey</pre></code></td></tr><tr><td>361</td><td><code><pre> case "api_secret":</pre></code></td></tr><tr class="miss"><td>362</td><td><code><pre> return n.ApiSecret</pre></code></td></tr><tr><td>363</td><td><code><pre> case "limits":</pre></code></td></tr><tr class="miss"><td>364</td><td><code><pre> return utils.ToString(int(n.Limits))</pre></code></td></tr><tr><td>365</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>366</td><td><code><pre> return ""</pre></code></td></tr><tr><td>367</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_normalizeType">func normalizeType</div><div class="info"><a href="#s_fn_normalizeType">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>134</td><td><code><pre>func normalizeType(ty interface{}) string {</pre></code></td></tr><tr><td>135</td><td><code><pre> switch v := ty.(type) {</pre></code></td></tr><tr><td>136</td><td><code><pre> case int, int32, int64:</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> return fmt.Sprintf("%v", v)</pre></code></td></tr><tr><td>138</td><td><code><pre> case float32, float64:</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre> return fmt.Sprintf("%v", v)</pre></code></td></tr><tr><td>140</td><td><code><pre> case string:</pre></code></td></tr><tr><td>141</td><td><code><pre> return v</pre></code></td></tr><tr><td>142</td><td><code><pre> case []byte:</pre></code></td></tr><tr class="miss"><td>143</td><td><code><pre> return string(v)</pre></code></td></tr><tr><td>144</td><td><code><pre> case []string:</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> return fmt.Sprintf("%v", v)</pre></code></td></tr><tr><td>146</td><td><code><pre> case interface{}, map[string]interface{}:</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> j, _ := json.Marshal(v)</pre></code></td></tr><tr class="miss"><td>148</td><td><code><pre> return string(j)</pre></code></td></tr><tr><td>149</td><td><code><pre> default:</pre></code></td></tr><tr class="miss"><td>150</td><td><code><pre> return fmt.Sprintf("%v", v)</pre></code></td></tr><tr><td>151</td><td><code><pre> }</pre></code></td></tr><tr><td>152</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SelectNotifier">func SelectNotifier</div><div class="info"><a href="#s_fn_SelectNotifier">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>224</td><td><code><pre>func SelectNotifier(method string) (*Notification, Notifier, error) {</pre></code></td></tr><tr class="miss"><td>225</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr class="miss"><td>226</td><td><code><pre> n, ok := comm.(Notifier)</pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> if !ok {</pre></code></td></tr><tr class="miss"><td>228</td><td><code><pre> return nil, nil, errors.New(fmt.Sprintf("incorrect notification type: %v", reflect.TypeOf(n).String()))</pre></code></td></tr><tr><td>229</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> notifier := n.Select()</pre></code></td></tr><tr class="miss"><td>231</td><td><code><pre> if notifier.Method == method {</pre></code></td></tr><tr class="miss"><td>232</td><td><code><pre> return notifier, comm.(Notifier), nil</pre></code></td></tr><tr><td>233</td><td><code><pre> }</pre></code></td></tr><tr><td>234</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>235</td><td><code><pre> return nil, nil, nil</pre></code></td></tr><tr><td>236</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.removeQueue">func Notification.removeQueue</div><div class="info"><a href="#s_fn_Notification.removeQueue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>155</td><td><code><pre>func (n *Notification) removeQueue(msg interface{}) interface{} {</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> var newArr []interface{}</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> for _, q := range n.Queue {</pre></code></td></tr><tr class="miss"><td>158</td><td><code><pre> if q != msg {</pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> newArr = append(newArr, q)</pre></code></td></tr><tr><td>160</td><td><code><pre> }</pre></code></td></tr><tr><td>161</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> n.Queue = newArr</pre></code></td></tr><tr class="miss"><td>163</td><td><code><pre> return newArr</pre></code></td></tr><tr><td>164</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnSave">func OnSave</div><div class="info"><a href="#s_fn_OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>21</td><td><code><pre>func OnSave(method string) {</pre></code></td></tr><tr class="miss"><td>22</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr class="miss"><td>23</td><td><code><pre> if isType(comm, new(Notifier)) {</pre></code></td></tr><tr class="miss"><td>24</td><td><code><pre> notifier := comm.(Notifier)</pre></code></td></tr><tr class="miss"><td>25</td><td><code><pre> if notifier.Select().Method == method {</pre></code></td></tr><tr class="miss"><td>26</td><td><code><pre> notifier.OnSave()</pre></code></td></tr><tr><td>27</td><td><code><pre> }</pre></code></td></tr><tr><td>28</td><td><code><pre> }</pre></code></td></tr><tr><td>29</td><td><code><pre> }</pre></code></td></tr><tr><td>30</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnStart">func OnStart</div><div class="info"><a href="#s_fn_OnStart">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>114</td><td><code><pre>func OnStart(c *types.Core) {</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> if isType(comm, new(CoreEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> comm.(CoreEvents).OnUpdatedCore(c)</pre></code></td></tr><tr><td>118</td><td><code><pre> }</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OnNewNotifier">func OnNewNotifier</div><div class="info"><a href="#s_fn_OnNewNotifier">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>123</td><td><code><pre>func OnNewNotifier(n *Notification) {</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr class="miss"><td>125</td><td><code><pre> if isType(comm, new(NotifierEvents)) && isEnabled(comm) && inLimits(comm) {</pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> comm.(NotifierEvents).OnNewNotifier(n)</pre></code></td></tr><tr><td>127</td><td><code><pre> }</pre></code></td></tr><tr><td>128</td><td><code><pre> }</pre></code></td></tr><tr><td>129</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SetDB">func SetDB</div><div class="info"><a href="#s_fn_SetDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>98</td><td><code><pre>func SetDB(d *gorm.DB) {</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> db = d</pre></code></td></tr><tr><td>100</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Notification.ResetQueue">func Notification.ResetQueue</div><div class="info"><a href="#s_fn_Notification.ResetQueue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>410</td><td><code><pre>func (n *Notification) ResetQueue() {</pre></code></td></tr><tr class="miss"><td>411</td><td><code><pre> n.Queue = nil</pre></code></td></tr><tr><td>412</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<!-- Can be parsed by external script
|
||
|
PACKAGE:github.com/hunterlong/statup/core/notifier DONE:72.73
|
||
|
-->
|
||
|
|
||
|
<div id="pkg_github.com/hunterlong/statup/handlers" class="funcname">Package Overview: github.com/hunterlong/statup/handlers <span class="packageTotal">64.61%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/handlers</code> package. It
|
||
|
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/handlers | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
|
||
|
<tr id="s_fn_Router"><td><code><a href="#fn_Router">Router(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/routes.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>67/67</code></td></tr>
|
||
|
<tr id="s_fn_prometheusHandler"><td><code><a href="#fn_prometheusHandler">prometheusHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/prometheus.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>22/22</code></td></tr>
|
||
|
<tr id="s_fn_saveSASSHandler"><td><code><a href="#fn_saveSASSHandler">saveSASSHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>13/13</code></td></tr>
|
||
|
<tr id="s_fn_renderServiceChartsHandler"><td><code><a href="#fn_renderServiceChartsHandler">renderServiceChartsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
|
||
|
<tr id="s_fn_logsHandler"><td><code><a href="#fn_logsHandler">logsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
|
||
|
<tr id="s_fn_isAuthorized"><td><code><a href="#fn_isAuthorized">isAuthorized(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/prometheus.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>8/8</code></td></tr>
|
||
|
<tr id="s_fn_usersEditHandler"><td><code><a href="#fn_usersEditHandler">usersEditHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
|
||
|
<tr id="s_fn_servicesDeleteFailuresHandler"><td><code><a href="#fn_servicesDeleteFailuresHandler">servicesDeleteFailuresHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
|
||
|
<tr id="s_fn_RunHTTPServer"><td><code><a href="#fn_RunHTTPServer">RunHTTPServer(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
|
||
|
<tr id="s_fn_deleteAssetsHandler"><td><code><a href="#fn_deleteAssetsHandler">deleteAssetsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
|
||
|
<tr id="s_fn_logsLineHandler"><td><code><a href="#fn_logsLineHandler">logsLineHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
|
||
|
<tr id="s_fn_helpHandler"><td><code><a href="#fn_helpHandler">helpHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
|
||
|
<tr id="s_fn_usersHandler"><td><code><a href="#fn_usersHandler">usersHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
|
||
|
<tr id="s_fn_settingsHandler"><td><code><a href="#fn_settingsHandler">settingsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_logoutHandler"><td><code><a href="#fn_logoutHandler">logoutHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_servicesHandler"><td><code><a href="#fn_servicesHandler">servicesHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_resetRouter"><td><code><a href="#fn_resetRouter">resetRouter(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/routes.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_error404Handler"><td><code><a href="#fn_error404Handler">error404Handler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_parseForm"><td><code><a href="#fn_parseForm">parseForm(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_parseGet"><td><code><a href="#fn_parseGet">parseGet(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_@138:15"><td><code><a href="#fn_@138:15">@138:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@154:17"><td><code><a href="#fn_@154:17">@154:17(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@126:17"><td><code><a href="#fn_@126:17">@126:17(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@129:10"><td><code><a href="#fn_@129:10">@129:10(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@151:15"><td><code><a href="#fn_@151:15">@151:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@88:20"><td><code><a href="#fn_@88:20">@88:20(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@157:14"><td><code><a href="#fn_@157:14">@157:14(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@93:11"><td><code><a href="#fn_@93:11">@93:11(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@96:11"><td><code><a href="#fn_@96:11">@96:11(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@99:14"><td><code><a href="#fn_@99:14">@99:14(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@102:14"><td><code><a href="#fn_@102:14">@102:14(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@105:15"><td><code><a href="#fn_@105:15">@105:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@108:14"><td><code><a href="#fn_@108:14">@108:14(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@135:12"><td><code><a href="#fn_@135:12">@135:12(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_saveSettingsHandler"><td><code><a href="#fn_saveSettingsHandler">saveSettingsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>96.15%</code></td><td class="linecount"><code>25/26</code></td></tr>
|
||
|
<tr id="s_fn_servicesUpdateHandler"><td><code><a href="#fn_servicesUpdateHandler">servicesUpdateHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>93.55%</code></td><td class="linecount"><code>29/31</code></td></tr>
|
||
|
<tr id="s_fn_loginHandler"><td><code><a href="#fn_loginHandler">loginHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>92.86%</code></td><td class="linecount"><code>13/14</code></td></tr>
|
||
|
<tr id="s_fn_createUserHandler"><td><code><a href="#fn_createUserHandler">createUserHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>92.31%</code></td><td class="linecount"><code>12/13</code></td></tr>
|
||
|
<tr id="s_fn_createServiceHandler"><td><code><a href="#fn_createServiceHandler">createServiceHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>90.91%</code></td><td class="linecount"><code>20/22</code></td></tr>
|
||
|
<tr id="s_fn_servicesViewHandler"><td><code><a href="#fn_servicesViewHandler">servicesViewHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>88.24%</code></td><td class="linecount"><code>15/17</code></td></tr>
|
||
|
<tr id="s_fn_saveNotificationHandler"><td><code><a href="#fn_saveNotificationHandler">saveNotificationHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>86.96%</code></td><td class="linecount"><code>40/46</code></td></tr>
|
||
|
<tr id="s_fn_apiIndexHandler"><td><code><a href="#fn_apiIndexHandler">apiIndexHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>84.62%</code></td><td class="linecount"><code>11/13</code></td></tr>
|
||
|
<tr id="s_fn_apiServiceDataHandler"><td><code><a href="#fn_apiServiceDataHandler">apiServiceDataHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>83.33%</code></td><td class="linecount"><code>10/12</code></td></tr>
|
||
|
<tr id="s_fn_apiAllServicesHandler"><td><code><a href="#fn_apiAllServicesHandler">apiAllServicesHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>81.82%</code></td><td class="linecount"><code>9/11</code></td></tr>
|
||
|
<tr id="s_fn_setupHandler"><td><code><a href="#fn_setupHandler">setupHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/setup.go</code></td><td class="percent"><code>81.82%</code></td><td class="linecount"><code>9/11</code></td></tr>
|
||
|
<tr id="s_fn_executeResponse"><td><code><a href="#fn_executeResponse">executeResponse(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>24/30</code></td></tr>
|
||
|
<tr id="s_fn_servicesDeleteHandler"><td><code><a href="#fn_servicesDeleteHandler">servicesDeleteHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>8/10</code></td></tr>
|
||
|
<tr id="s_fn_usersDeleteHandler"><td><code><a href="#fn_usersDeleteHandler">usersDeleteHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>76.92%</code></td><td class="linecount"><code>10/13</code></td></tr>
|
||
|
<tr id="s_fn_resetCookies"><td><code><a href="#fn_resetCookies">resetCookies(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/routes.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>3/4</code></td></tr>
|
||
|
<tr id="s_fn_executeJSResponse"><td><code><a href="#fn_executeJSResponse">executeJSResponse(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>8/11</code></td></tr>
|
||
|
<tr id="s_fn_reorderServiceHandler"><td><code><a href="#fn_reorderServiceHandler">reorderServiceHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>8/11</code></td></tr>
|
||
|
<tr id="s_fn_saveAssetsHandler"><td><code><a href="#fn_saveAssetsHandler">saveAssetsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>10/14</code></td></tr>
|
||
|
<tr id="s_fn_updateUserHandler"><td><code><a href="#fn_updateUserHandler">updateUserHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>70.00%</code></td><td class="linecount"><code>14/20</code></td></tr>
|
||
|
<tr id="s_fn_apiServiceUpdateHandler"><td><code><a href="#fn_apiServiceUpdateHandler">apiServiceUpdateHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>70.00%</code></td><td class="linecount"><code>14/20</code></td></tr>
|
||
|
<tr id="s_fn_apiUserUpdateHandler"><td><code><a href="#fn_apiUserUpdateHandler">apiUserUpdateHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>68.42%</code></td><td class="linecount"><code>13/19</code></td></tr>
|
||
|
<tr id="s_fn_IsAuthenticated"><td><code><a href="#fn_IsAuthenticated">IsAuthenticated(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>8/12</code></td></tr>
|
||
|
<tr id="s_fn_apiAllUsersHandler"><td><code><a href="#fn_apiAllUsersHandler">apiAllUsersHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>4/6</code></td></tr>
|
||
|
<tr id="s_fn_processSetupHandler"><td><code><a href="#fn_processSetupHandler">processSetupHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/setup.go</code></td><td class="percent"><code>66.07%</code></td><td class="linecount"><code>37/56</code></td></tr>
|
||
|
<tr id="s_fn_apiCreateUsersHandler"><td><code><a href="#fn_apiCreateUsersHandler">apiCreateUsersHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>64.71%</code></td><td class="linecount"><code>11/17</code></td></tr>
|
||
|
<tr id="s_fn_apiCreateServiceHandler"><td><code><a href="#fn_apiCreateServiceHandler">apiCreateServiceHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>62.50%</code></td><td class="linecount"><code>10/16</code></td></tr>
|
||
|
<tr id="s_fn_apiServiceDeleteHandler"><td><code><a href="#fn_apiServiceDeleteHandler">apiServiceDeleteHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>9/15</code></td></tr>
|
||
|
<tr id="s_fn_apiUserDeleteHandler"><td><code><a href="#fn_apiUserDeleteHandler">apiUserDeleteHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>9/15</code></td></tr>
|
||
|
<tr id="s_fn_apiServiceHandler"><td><code><a href="#fn_apiServiceHandler">apiServiceHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>6/10</code></td></tr>
|
||
|
<tr id="s_fn_apiUserHandler"><td><code><a href="#fn_apiUserHandler">apiUserHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>6/10</code></td></tr>
|
||
|
<tr id="s_fn_dashboardHandler"><td><code><a href="#fn_dashboardHandler">dashboardHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
|
||
|
<tr id="s_fn_indexHandler"><td><code><a href="#fn_indexHandler">indexHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/index.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>2/4</code></td></tr>
|
||
|
<tr id="s_fn_isAPIAuthorized"><td><code><a href="#fn_isAPIAuthorized">isAPIAuthorized(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>28.57%</code></td><td class="linecount"><code>2/7</code></td></tr>
|
||
|
<tr id="s_fn_testNotificationHandler"><td><code><a href="#fn_testNotificationHandler">testNotificationHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/46</code></td></tr>
|
||
|
<tr id="s_fn_DesktopInit"><td><code><a href="#fn_DesktopInit">DesktopInit(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/index.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/42</code></td></tr>
|
||
|
<tr id="s_fn_renderServiceChartHandler"><td><code><a href="#fn_renderServiceChartHandler">renderServiceChartHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/18</code></td></tr>
|
||
|
<tr id="s_fn_exportHandler"><td><code><a href="#fn_exportHandler">exportHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/18</code></td></tr>
|
||
|
<tr id="s_fn_checkinCreateUpdateHandler"><td><code><a href="#fn_checkinCreateUpdateHandler">checkinCreateUpdateHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/13</code></td></tr>
|
||
|
<tr id="s_fn_apiServicePingDataHandler"><td><code><a href="#fn_apiServicePingDataHandler">apiServicePingDataHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/12</code></td></tr>
|
||
|
<tr id="s_fn_apiRenewHandler"><td><code><a href="#fn_apiRenewHandler">apiRenewHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/10</code></td></tr>
|
||
|
<tr id="s_fn_pluginSavedHandler"><td><code><a href="#fn_pluginSavedHandler">pluginSavedHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/plugins.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
|
||
|
<tr id="s_fn_@111:11"><td><code><a href="#fn_@111:11">@111:11(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
|
||
|
<tr id="s_fn_checkinUpdateHandler"><td><code><a href="#fn_checkinUpdateHandler">checkinUpdateHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
|
||
|
<tr id="s_fn_apiCheckinHandler"><td><code><a href="#fn_apiCheckinHandler">apiCheckinHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
|
||
|
<tr id="s_fn_pluginsDownloadHandler"><td><code><a href="#fn_pluginsDownloadHandler">pluginsDownloadHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/plugins.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_@144:15"><td><code><a href="#fn_@144:15">@144:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_parseId"><td><code><a href="#fn_parseId">parseId(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_@122:13"><td><code><a href="#fn_@122:13">@122:13(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_@229:11"><td><code><a href="#fn_@229:11">@229:11(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@132:17"><td><code><a href="#fn_@132:17">@132:17(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_setupResponseError"><td><code><a href="#fn_setupResponseError">setupResponseError(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/setup.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@148:13"><td><code><a href="#fn_@148:13">@148:13(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@90:9"><td><code><a href="#fn_@90:9">@90:9(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@232:15"><td><code><a href="#fn_@232:15">@232:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_trayHandler"><td><code><a href="#fn_trayHandler">trayHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/index.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@141:10"><td><code><a href="#fn_@141:10">@141:10(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr><td colspan="2"><code>github.com/hunterlong/statup/handlers</code></td><td class="percent"><code>64.61%</code></td><td class="linecount"><code>617/955</code></td></tr>
|
||
|
</table>
|
||
|
|
||
|
<div class="funcname" id="fn_Router">func Router</div><div class="info"><a href="#s_fn_Router">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/routes.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>34</td><td><code><pre>func Router() *mux.Router {</pre></code></td></tr><tr><td>35</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr><td>36</td><td><code><pre> r := mux.NewRouter()</pre></code></td></tr><tr><td>37</td><td><code><pre> r.Handle("/", http.HandlerFunc(indexHandler))</pre></code></td></tr><tr><td>38</td><td><code><pre> if source.UsingAssets(dir) {</pre></code></td></tr><tr><td>39</td><td><code><pre> indexHandler := http.FileServer(http.Dir(dir + "/assets/"))</pre></code></td></tr><tr><td>40</td><td><code><pre> r.PathPrefix("/css/").Handler(http.StripPrefix("/css/", http.FileServer(http.Dir(dir+"/assets/css"))))</pre></code></td></tr><tr><td>41</td><td><code><pre> r.PathPrefix("/robots.txt").Handler(indexHandler)</pre></code></td></tr><tr><td>42</td><td><code><pre> r.PathPrefix("/favicon.ico").Handler(indexHandler)</pre></code></td></tr><tr><td>43</td><td><code><pre> r.PathPrefix("/statup.png").Handler(indexHandler)</pre></code></td></tr><tr><td>44</td><td><code><pre> } else {</pre></code></td></tr><tr><td>45</td><td><code><pre> r.PathPrefix("/css/").Handler(http.StripPrefix("/css/", http.FileServer(source.CssBox.HTTPBox())))</pre></code></td></tr><tr><td>46</td><td><code><pre> r.PathPrefix("/robots.txt").Handler(http.FileServer(source.TmplBox.HTTPBox()))</pre></code></td></tr><tr><td>47</td><td><code><pre> r.PathPrefix("/favicon.ico").Handler(http.FileServer(source.TmplBox.HTTPBox()))</pre></code></td></tr><tr><td>48</td><td><code><pre> r.PathPrefix("/statup.png").Handler(http.FileServer(source.TmplBox.HTTPBox()))</pre></code></td></tr><tr><td>49</td><td><code><pre> }</pre></code></td></tr><tr><td>50</td><td><code><pre> r.PathPrefix("/js/").Handler(http.StripPrefix("/js/", http.FileServer(source.JsBox.HTTPBox())))</pre></code></td></tr><tr><td>51</td><td><code><pre> r.Handle("/charts.js", http.HandlerFunc(renderServiceChartsHandler))</pre></code></td></tr><tr><td>52</td><td><code><pre> r.Handle("/setup", http.HandlerFunc(setupHandler)).Methods("GET")</pre></code></td></tr><tr><td>53</td><td><code><pre> r.Handle("/setup", http.HandlerFunc(processSetupHandler)).Methods("POST")</pre></code></td></tr><tr><td>54</td><td><code><pre> r.Handle("/dashboard", http.HandlerFunc(dashboardHandler)).Methods("GET")</pre></code></td></tr><tr><td>55</td><td><code><pre> r.Handle("/dashboard", http.HandlerFunc(loginHandler)).Methods("POST")</pre></code></td></tr><tr><td>56</td><td><code><pre> r.Handle("/logout", http.HandlerFunc(logoutHandler))</pre></code></td></tr><tr><td>57</td><td><code><pre> r.Handle("/plugins/download/{name}", http.HandlerFunc(pluginsDownloadHandler))</pre></code></td></tr><tr><td>58</td><td><code><pre> r.Handle("/plugins/{name}/save", http.HandlerFunc(pluginSavedHandler)).Methods("POST")</pre></code></td></tr><tr><td>59</td><td><code><pre> r.Handle("/help", http.HandlerFunc(helpHandler))</pre></code></td></tr><tr><td>60</td><td><code><pre> r.Handle("/logs", http.HandlerFunc(logsHandler))</pre></code></td></tr><tr><td>61</td><td><code><pre> r.Handle("/logs/line", http.HandlerFunc(logsLineHandler))</pre></code></td></tr><tr><td>62</td><td><code><pre></pre></code></td></tr><tr><td>63</td><td><code><pre> // USER Routes</pre></code></td></tr><tr><td>64</td><td><code><pre> r.Handle("/users", http.HandlerFunc(usersHandler)).Methods("GET")</pre></code></td></tr><tr><td>65</td><td><code><pre> r.Handle("/users", http.HandlerFunc(createUserHandler)).Methods("POST")</pre></code></td></tr><tr><td>66</td><td><code><pre> r.Handle("
|
||
|
|
||
|
<div class="funcname" id="fn_prometheusHandler">func prometheusHandler</div><div class="info"><a href="#s_fn_prometheusHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/prometheus.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>36</td><td><code><pre>func prometheusHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>37</td><td><code><pre> utils.Log(1, fmt.Sprintf("Prometheus /metrics Request From IP: %v\n", r.RemoteAddr))</pre></code></td></tr><tr><td>38</td><td><code><pre> if !isAuthorized(r) {</pre></code></td></tr><tr><td>39</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>40</td><td><code><pre> return</pre></code></td></tr><tr><td>41</td><td><code><pre> }</pre></code></td></tr><tr><td>42</td><td><code><pre> metrics := []string{}</pre></code></td></tr><tr><td>43</td><td><code><pre> system := fmt.Sprintf("statup_total_failures %v\n", core.CountFailures())</pre></code></td></tr><tr><td>44</td><td><code><pre> system += fmt.Sprintf("statup_total_services %v", len(core.CoreApp.Services))</pre></code></td></tr><tr><td>45</td><td><code><pre> metrics = append(metrics, system)</pre></code></td></tr><tr><td>46</td><td><code><pre> for _, ser := range core.CoreApp.Services {</pre></code></td></tr><tr><td>47</td><td><code><pre> v := ser.(*core.Service)</pre></code></td></tr><tr><td>48</td><td><code><pre> online := 1</pre></code></td></tr><tr><td>49</td><td><code><pre> if !v.Online {</pre></code></td></tr><tr><td>50</td><td><code><pre> online = 0</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr><td>52</td><td><code><pre> met := fmt.Sprintf("statup_service_failures{id=\"%v\" name=\"%v\"} %v\n", v.Id, v.Name, len(v.Failures))</pre></code></td></tr><tr><td>53</td><td><code><pre> met += fmt.Sprintf("statup_service_latency{id=\"%v\" name=\"%v\"} %0.0f\n", v.Id, v.Name, (v.Latency * 100))</pre></code></td></tr><tr><td>54</td><td><code><pre> met += fmt.Sprintf("statup_service_online{id=\"%v\" name=\"%v\"} %v\n", v.Id, v.Name, online)</pre></code></td></tr><tr><td>55</td><td><code><pre> met += fmt.Sprintf("statup_service_status_code{id=\"%v\" name=\"%v\"} %v\n", v.Id, v.Name, v.LastStatusCode)</pre></code></td></tr><tr><td>56</td><td><code><pre> met += fmt.Sprintf("statup_service_response_length{id=\"%v\" name=\"%v\"} %v", v.Id, v.Name, len([]byte(v.LastResponse)))</pre></code></td></tr><tr><td>57</td><td><code><pre> metrics = append(metrics, met)</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr><tr><td>59</td><td><code><pre> output := strings.Join(metrics, "\n")</pre></code></td></tr><tr><td>60</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr><td>61</td><td><code><pre> w.Write([]byte(output))</pre></code></td></tr><tr><td>62</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_saveSASSHandler">func saveSASSHandler</div><div class="info"><a href="#s_fn_saveSASSHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>75</td><td><code><pre>func saveSASSHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>76</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>77</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>78</td><td><code><pre> return</pre></code></td></tr><tr><td>79</td><td><code><pre> }</pre></code></td></tr><tr><td>80</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>81</td><td><code><pre> theme := r.PostForm.Get("theme")</pre></code></td></tr><tr><td>82</td><td><code><pre> variables := r.PostForm.Get("variables")</pre></code></td></tr><tr><td>83</td><td><code><pre> mobile := r.PostForm.Get("mobile")</pre></code></td></tr><tr><td>84</td><td><code><pre> source.SaveAsset([]byte(theme), utils.Directory, "scss/base.scss")</pre></code></td></tr><tr><td>85</td><td><code><pre> source.SaveAsset([]byte(variables), utils.Directory, "scss/variables.scss")</pre></code></td></tr><tr><td>86</td><td><code><pre> source.SaveAsset([]byte(mobile), utils.Directory, "scss/mobile.scss")</pre></code></td></tr><tr><td>87</td><td><code><pre> source.CompileSASS(utils.Directory)</pre></code></td></tr><tr><td>88</td><td><code><pre> resetRouter()</pre></code></td></tr><tr><td>89</td><td><code><pre> executeResponse(w, r, "settings.html", core.CoreApp, "/settings")</pre></code></td></tr><tr><td>90</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_renderServiceChartsHandler">func renderServiceChartsHandler</div><div class="info"><a href="#s_fn_renderServiceChartsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>64</td><td><code><pre>func renderServiceChartsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>65</td><td><code><pre> services := core.CoreApp.Services</pre></code></td></tr><tr><td>66</td><td><code><pre> w.Header().Set("Content-Type", "text/javascript")</pre></code></td></tr><tr><td>67</td><td><code><pre> w.Header().Set("Cache-Control", "max-age=60")</pre></code></td></tr><tr><td>68</td><td><code><pre></pre></code></td></tr><tr><td>69</td><td><code><pre> //var data []string</pre></code></td></tr><tr><td>70</td><td><code><pre> end := time.Now().UTC()</pre></code></td></tr><tr><td>71</td><td><code><pre> start := time.Now().Add((-24 * 7) * time.Hour).UTC()</pre></code></td></tr><tr><td>72</td><td><code><pre> var srvs []*core.Service</pre></code></td></tr><tr><td>73</td><td><code><pre> for _, s := range services {</pre></code></td></tr><tr><td>74</td><td><code><pre> srvs = append(srvs, s.(*core.Service))</pre></code></td></tr><tr><td>75</td><td><code><pre> }</pre></code></td></tr><tr><td>76</td><td><code><pre> out := struct {</pre></code></td></tr><tr><td>77</td><td><code><pre> Services []*core.Service</pre></code></td></tr><tr><td>78</td><td><code><pre> Start int64</pre></code></td></tr><tr><td>79</td><td><code><pre> End int64</pre></code></td></tr><tr><td>80</td><td><code><pre> }{srvs, start.Unix(), end.Unix()}</pre></code></td></tr><tr><td>81</td><td><code><pre></pre></code></td></tr><tr><td>82</td><td><code><pre> executeJSResponse(w, r, "charts.js", out)</pre></code></td></tr><tr><td>83</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_logsHandler">func logsHandler</div><div class="info"><a href="#s_fn_logsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>78</td><td><code><pre>func logsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>79</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>80</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>81</td><td><code><pre> return</pre></code></td></tr><tr><td>82</td><td><code><pre> }</pre></code></td></tr><tr><td>83</td><td><code><pre> utils.LockLines.Lock()</pre></code></td></tr><tr><td>84</td><td><code><pre> logs := make([]string, 0)</pre></code></td></tr><tr><td>85</td><td><code><pre> len := len(utils.LastLines)</pre></code></td></tr><tr><td>86</td><td><code><pre> // We need string log lines from end to start.</pre></code></td></tr><tr><td>87</td><td><code><pre> for i := len - 1; i >= 0; i-- {</pre></code></td></tr><tr><td>88</td><td><code><pre> logs = append(logs, utils.LastLines[i].FormatForHtml()+"\r\n")</pre></code></td></tr><tr><td>89</td><td><code><pre> }</pre></code></td></tr><tr><td>90</td><td><code><pre> utils.LockLines.Unlock()</pre></code></td></tr><tr><td>91</td><td><code><pre> executeResponse(w, r, "logs.html", logs, nil)</pre></code></td></tr><tr><td>92</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_isAuthorized">func isAuthorized</div><div class="info"><a href="#s_fn_isAuthorized">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/prometheus.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>64</td><td><code><pre>func isAuthorized(r *http.Request) bool {</pre></code></td></tr><tr><td>65</td><td><code><pre> var token string</pre></code></td></tr><tr><td>66</td><td><code><pre> tokens, ok := r.Header["Authorization"]</pre></code></td></tr><tr><td>67</td><td><code><pre> if ok && len(tokens) >= 1 {</pre></code></td></tr><tr><td>68</td><td><code><pre> token = tokens[0]</pre></code></td></tr><tr><td>69</td><td><code><pre> token = strings.TrimPrefix(token, "Bearer ")</pre></code></td></tr><tr><td>70</td><td><code><pre> }</pre></code></td></tr><tr><td>71</td><td><code><pre> if token == core.CoreApp.ApiSecret {</pre></code></td></tr><tr><td>72</td><td><code><pre> return true</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> return false</pre></code></td></tr><tr><td>75</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_usersEditHandler">func usersEditHandler</div><div class="info"><a href="#s_fn_usersEditHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>37</td><td><code><pre>func usersEditHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>38</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>39</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>40</td><td><code><pre> return</pre></code></td></tr><tr><td>41</td><td><code><pre> }</pre></code></td></tr><tr><td>42</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>43</td><td><code><pre> id, _ := strconv.Atoi(vars["id"])</pre></code></td></tr><tr><td>44</td><td><code><pre> user, _ := core.SelectUser(int64(id))</pre></code></td></tr><tr><td>45</td><td><code><pre> executeResponse(w, r, "user.html", user, nil)</pre></code></td></tr><tr><td>46</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_servicesDeleteFailuresHandler">func servicesDeleteFailuresHandler</div><div class="info"><a href="#s_fn_servicesDeleteFailuresHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>242</td><td><code><pre>func servicesDeleteFailuresHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>243</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>244</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>245</td><td><code><pre> return</pre></code></td></tr><tr><td>246</td><td><code><pre> }</pre></code></td></tr><tr><td>247</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>248</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>249</td><td><code><pre> service.DeleteFailures()</pre></code></td></tr><tr><td>250</td><td><code><pre> executeResponse(w, r, "services.html", core.CoreApp.Services, "/services")</pre></code></td></tr><tr><td>251</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_RunHTTPServer">func RunHTTPServer</div><div class="info"><a href="#s_fn_RunHTTPServer">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>43</td><td><code><pre>func RunHTTPServer(ip string, port int) error {</pre></code></td></tr><tr><td>44</td><td><code><pre> host := fmt.Sprintf("%v:%v", ip, port)</pre></code></td></tr><tr><td>45</td><td><code><pre> utils.Log(1, "Statup HTTP Server running on http://"+host)</pre></code></td></tr><tr><td>46</td><td><code><pre> //for _, p := range core.CoreApp.AllPlugins {</pre></code></td></tr><tr><td>47</td><td><code><pre> // info := p.GetInfo()</pre></code></td></tr><tr><td>48</td><td><code><pre> // for _, route := range p.Routes() {</pre></code></td></tr><tr><td>49</td><td><code><pre> // path := fmt.Sprintf("%v", route.URL)</pre></code></td></tr><tr><td>50</td><td><code><pre> // router.Handle(path, http.HandlerFunc(route.Handler)).Methods(route.Method)</pre></code></td></tr><tr><td>51</td><td><code><pre> // utils.Log(1, fmt.Sprintf("Added Route %v for plugin %v\n", path, info.Name))</pre></code></td></tr><tr><td>52</td><td><code><pre> // }</pre></code></td></tr><tr><td>53</td><td><code><pre> //}</pre></code></td></tr><tr><td>54</td><td><code><pre> router = Router()</pre></code></td></tr><tr><td>55</td><td><code><pre> httpServer = &http.Server{</pre></code></td></tr><tr><td>56</td><td><code><pre> Addr: host,</pre></code></td></tr><tr><td>57</td><td><code><pre> WriteTimeout: time.Second * 60,</pre></code></td></tr><tr><td>58</td><td><code><pre> ReadTimeout: time.Second * 60,</pre></code></td></tr><tr><td>59</td><td><code><pre> IdleTimeout: time.Second * 60,</pre></code></td></tr><tr><td>60</td><td><code><pre> Handler: router,</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr><td>62</td><td><code><pre> resetCookies()</pre></code></td></tr><tr><td>63</td><td><code><pre> return httpServer.ListenAndServe()</pre></code></td></tr><tr><td>64</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_deleteAssetsHandler">func deleteAssetsHandler</div><div class="info"><a href="#s_fn_deleteAssetsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>112</td><td><code><pre>func deleteAssetsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>113</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>114</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>115</td><td><code><pre> return</pre></code></td></tr><tr><td>116</td><td><code><pre> }</pre></code></td></tr><tr><td>117</td><td><code><pre> source.DeleteAllAssets(utils.Directory)</pre></code></td></tr><tr><td>118</td><td><code><pre> resetRouter()</pre></code></td></tr><tr><td>119</td><td><code><pre> executeResponse(w, r, "settings.html", core.CoreApp, "/settings")</pre></code></td></tr><tr><td>120</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_logsLineHandler">func logsLineHandler</div><div class="info"><a href="#s_fn_logsLineHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>94</td><td><code><pre>func logsLineHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>95</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>96</td><td><code><pre> w.WriteHeader(http.StatusInternalServerError)</pre></code></td></tr><tr><td>97</td><td><code><pre> return</pre></code></td></tr><tr><td>98</td><td><code><pre> }</pre></code></td></tr><tr><td>99</td><td><code><pre> if lastLine := utils.GetLastLine(); lastLine != nil {</pre></code></td></tr><tr><td>100</td><td><code><pre> w.Write([]byte(lastLine.FormatForHtml()))</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr><tr><td>102</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_helpHandler">func helpHandler</div><div class="info"><a href="#s_fn_helpHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>69</td><td><code><pre>func helpHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>70</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>71</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>72</td><td><code><pre> return</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> help := source.HelpMarkdown()</pre></code></td></tr><tr><td>75</td><td><code><pre> executeResponse(w, r, "help.html", help, nil)</pre></code></td></tr><tr><td>76</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_usersHandler">func usersHandler</div><div class="info"><a href="#s_fn_usersHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>28</td><td><code><pre>func usersHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>29</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>30</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>31</td><td><code><pre> return</pre></code></td></tr><tr><td>32</td><td><code><pre> }</pre></code></td></tr><tr><td>33</td><td><code><pre> users, _ := core.SelectAllUsers()</pre></code></td></tr><tr><td>34</td><td><code><pre> executeResponse(w, r, "users.html", users, nil)</pre></code></td></tr><tr><td>35</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_settingsHandler">func settingsHandler</div><div class="info"><a href="#s_fn_settingsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>30</td><td><code><pre>func settingsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>31</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>32</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>33</td><td><code><pre> return</pre></code></td></tr><tr><td>34</td><td><code><pre> }</pre></code></td></tr><tr><td>35</td><td><code><pre> executeResponse(w, r, "settings.html", core.CoreApp, nil)</pre></code></td></tr><tr><td>36</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_logoutHandler">func logoutHandler</div><div class="info"><a href="#s_fn_logoutHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>62</td><td><code><pre>func logoutHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>63</td><td><code><pre> session, _ := sessionStore.Get(r, cookieKey)</pre></code></td></tr><tr><td>64</td><td><code><pre> session.Values["authenticated"] = false</pre></code></td></tr><tr><td>65</td><td><code><pre> session.Save(r, w)</pre></code></td></tr><tr><td>66</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>67</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_servicesHandler">func servicesHandler</div><div class="info"><a href="#s_fn_servicesHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>85</td><td><code><pre>func servicesHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>86</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>87</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>88</td><td><code><pre> return</pre></code></td></tr><tr><td>89</td><td><code><pre> }</pre></code></td></tr><tr><td>90</td><td><code><pre> executeResponse(w, r, "services.html", core.CoreApp.Services, nil)</pre></code></td></tr><tr><td>91</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_resetRouter">func resetRouter</div><div class="info"><a href="#s_fn_resetRouter">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/routes.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>118</td><td><code><pre>func resetRouter() {</pre></code></td></tr><tr><td>119</td><td><code><pre> router = Router()</pre></code></td></tr><tr><td>120</td><td><code><pre> httpServer.Handler = router</pre></code></td></tr><tr><td>121</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_error404Handler">func error404Handler</div><div class="info"><a href="#s_fn_error404Handler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>248</td><td><code><pre>func error404Handler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>249</td><td><code><pre> w.WriteHeader(http.StatusNotFound)</pre></code></td></tr><tr><td>250</td><td><code><pre> executeResponse(w, r, "error_404.html", nil, nil)</pre></code></td></tr><tr><td>251</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_parseForm">func parseForm</div><div class="info"><a href="#s_fn_parseForm">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>127</td><td><code><pre>func parseForm(r *http.Request) url.Values {</pre></code></td></tr><tr><td>128</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>129</td><td><code><pre> return r.PostForm</pre></code></td></tr><tr><td>130</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_parseGet">func parseGet</div><div class="info"><a href="#s_fn_parseGet">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>132</td><td><code><pre>func parseGet(r *http.Request) url.Values {</pre></code></td></tr><tr><td>133</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>134</td><td><code><pre> return r.Form</pre></code></td></tr><tr><td>135</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@138:15">func @138:15</div><div class="info"><a href="#s_fn_@138:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>138</td><td><code><pre>func(v interface{}) string {</pre></code></td></tr><tr><td>139</td><td><code><pre> return utils.ToString(v)</pre></code></td></tr><tr><td>140</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@154:17">func @154:17</div><div class="info"><a href="#s_fn_@154:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>154</td><td><code><pre>func() *types.Service {</pre></code></td></tr><tr><td>155</td><td><code><pre> return new(types.Service)</pre></code></td></tr><tr><td>156</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@126:17">func @126:17</div><div class="info"><a href="#s_fn_@126:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>126</td><td><code><pre>func(html string) string {</pre></code></td></tr><tr><td>127</td><td><code><pre> return utils.UnderScoreString(html)</pre></code></td></tr><tr><td>128</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@129:10">func @129:10</div><div class="info"><a href="#s_fn_@129:10">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>129</td><td><code><pre>func() string {</pre></code></td></tr><tr><td>130</td><td><code><pre> return r.URL.String()</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@151:15">func @151:15</div><div class="info"><a href="#s_fn_@151:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>151</td><td><code><pre>func(t int64) string {</pre></code></td></tr><tr><td>152</td><td><code><pre> return utils.Timezoner(time.Unix(t, 0), core.CoreApp.Timezone).Format("Monday, January 02")</pre></code></td></tr><tr><td>153</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@88:20">func @88:20</div><div class="info"><a href="#s_fn_@88:20">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>88</td><td><code><pre>func(w http.ResponseWriter, r *http.Request) template.FuncMap {</pre></code></td></tr><tr><td>89</td><td><code><pre> return template.FuncMap{</pre></code></td></tr><tr><td>90</td><td><code><pre> "js": func(html interface{}) template.JS {</pre></code></td></tr><tr><td>91</td><td><code><pre> return template.JS(utils.ToString(html))</pre></code></td></tr><tr><td>92</td><td><code><pre> },</pre></code></td></tr><tr><td>93</td><td><code><pre> "safe": func(html string) template.HTML {</pre></code></td></tr><tr><td>94</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>95</td><td><code><pre> },</pre></code></td></tr><tr><td>96</td><td><code><pre> "Auth": func() bool {</pre></code></td></tr><tr><td>97</td><td><code><pre> return IsAuthenticated(r)</pre></code></td></tr><tr><td>98</td><td><code><pre> },</pre></code></td></tr><tr><td>99</td><td><code><pre> "VERSION": func() string {</pre></code></td></tr><tr><td>100</td><td><code><pre> return core.VERSION</pre></code></td></tr><tr><td>101</td><td><code><pre> },</pre></code></td></tr><tr><td>102</td><td><code><pre> "CoreApp": func() *core.Core {</pre></code></td></tr><tr><td>103</td><td><code><pre> return core.CoreApp</pre></code></td></tr><tr><td>104</td><td><code><pre> },</pre></code></td></tr><tr><td>105</td><td><code><pre> "Services": func() []types.ServiceInterface {</pre></code></td></tr><tr><td>106</td><td><code><pre> return core.CoreApp.Services</pre></code></td></tr><tr><td>107</td><td><code><pre> },</pre></code></td></tr><tr><td>108</td><td><code><pre> "USE_CDN": func() bool {</pre></code></td></tr><tr><td>109</td><td><code><pre> return core.CoreApp.UseCdn</pre></code></td></tr><tr><td>110</td><td><code><pre> },</pre></code></td></tr><tr><td>111</td><td><code><pre> "Type": func(g interface{}) []string {</pre></code></td></tr><tr><td>112</td><td><code><pre> fooType := reflect.TypeOf(g)</pre></code></td></tr><tr><td>113</td><td><code><pre> var methods []string</pre></code></td></tr><tr><td>114</td><td><code><pre> methods = append(methods, fooType.String())</pre></code></td></tr><tr><td>115</td><td><code><pre> for i := 0; i < fooType.NumMethod(); i++ {</pre></code></td></tr><tr><td>116</td><td><code><pre> method := fooType.Method(i)</pre></code></td></tr><tr><td>117</td><td><code><pre> fmt.Println(method.Name)</pre></code></td></tr><tr><td>118</td><td><code><pre> methods = append(methods, method.Name)</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre> return methods</pre></code></td></tr><tr><td>121</td><td><code><pre> },</pre></code></td></tr><tr><td>122</td><td><code><pre> "ToJSON": func(g interface{}) template.HTML {</pre></code></td></tr><tr><td>123</td><td><code><pre> data, _ := json.Marshal(g)</pre></code></td></tr><tr><td>124</td><td><code><pre> return template.HTML(string(data))</pre></code></td></tr><tr><td>125</td><td><code><pre> },</pre></code></td></tr><tr><td>126</td><td><code><pre> "underscore": func(html string) string {</pre></code></td></tr><tr><td>127</td><td><code><pre> return utils.UnderScoreString(html)</pre></code></td></tr><tr><td>128</td><td><code><pre> },</pre></code></td></tr><tr><td>129</td><td><code><p
|
||
|
|
||
|
<div class="funcname" id="fn_@157:14">func @157:14</div><div class="info"><a href="#s_fn_@157:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>157</td><td><code><pre>func() *types.User {</pre></code></td></tr><tr><td>158</td><td><code><pre> return new(types.User)</pre></code></td></tr><tr><td>159</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@93:11">func @93:11</div><div class="info"><a href="#s_fn_@93:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>93</td><td><code><pre>func(html string) template.HTML {</pre></code></td></tr><tr><td>94</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@96:11">func @96:11</div><div class="info"><a href="#s_fn_@96:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>96</td><td><code><pre>func() bool {</pre></code></td></tr><tr><td>97</td><td><code><pre> return IsAuthenticated(r)</pre></code></td></tr><tr><td>98</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@99:14">func @99:14</div><div class="info"><a href="#s_fn_@99:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>99</td><td><code><pre>func() string {</pre></code></td></tr><tr><td>100</td><td><code><pre> return core.VERSION</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@102:14">func @102:14</div><div class="info"><a href="#s_fn_@102:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>102</td><td><code><pre>func() *core.Core {</pre></code></td></tr><tr><td>103</td><td><code><pre> return core.CoreApp</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@105:15">func @105:15</div><div class="info"><a href="#s_fn_@105:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>105</td><td><code><pre>func() []types.ServiceInterface {</pre></code></td></tr><tr><td>106</td><td><code><pre> return core.CoreApp.Services</pre></code></td></tr><tr><td>107</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@108:14">func @108:14</div><div class="info"><a href="#s_fn_@108:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>108</td><td><code><pre>func() bool {</pre></code></td></tr><tr><td>109</td><td><code><pre> return core.CoreApp.UseCdn</pre></code></td></tr><tr><td>110</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@135:12">func @135:12</div><div class="info"><a href="#s_fn_@135:12">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>135</td><td><code><pre>func() string {</pre></code></td></tr><tr><td>136</td><td><code><pre> return ""</pre></code></td></tr><tr><td>137</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_saveSettingsHandler">func saveSettingsHandler</div><div class="info"><a href="#s_fn_saveSettingsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>38</td><td><code><pre>func saveSettingsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>39</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>40</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>41</td><td><code><pre> return</pre></code></td></tr><tr><td>42</td><td><code><pre> }</pre></code></td></tr><tr><td>43</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>44</td><td><code><pre> app := core.CoreApp</pre></code></td></tr><tr><td>45</td><td><code><pre> name := r.PostForm.Get("project")</pre></code></td></tr><tr><td>46</td><td><code><pre> if name != "" {</pre></code></td></tr><tr><td>47</td><td><code><pre> app.Name = name</pre></code></td></tr><tr><td>48</td><td><code><pre> }</pre></code></td></tr><tr><td>49</td><td><code><pre> description := r.PostForm.Get("description")</pre></code></td></tr><tr><td>50</td><td><code><pre> if description != app.Description {</pre></code></td></tr><tr><td>51</td><td><code><pre> app.Description = description</pre></code></td></tr><tr><td>52</td><td><code><pre> }</pre></code></td></tr><tr><td>53</td><td><code><pre> style := r.PostForm.Get("style")</pre></code></td></tr><tr><td>54</td><td><code><pre> if style != app.Style {</pre></code></td></tr><tr class="miss"><td>55</td><td><code><pre> app.Style = style</pre></code></td></tr><tr><td>56</td><td><code><pre> }</pre></code></td></tr><tr><td>57</td><td><code><pre> footer := r.PostForm.Get("footer")</pre></code></td></tr><tr><td>58</td><td><code><pre> if footer != app.Footer {</pre></code></td></tr><tr><td>59</td><td><code><pre> app.Footer = footer</pre></code></td></tr><tr><td>60</td><td><code><pre> }</pre></code></td></tr><tr><td>61</td><td><code><pre> domain := r.PostForm.Get("domain")</pre></code></td></tr><tr><td>62</td><td><code><pre> if domain != app.Domain {</pre></code></td></tr><tr><td>63</td><td><code><pre> app.Domain = domain</pre></code></td></tr><tr><td>64</td><td><code><pre> }</pre></code></td></tr><tr><td>65</td><td><code><pre> timezone := r.PostForm.Get("timezone")</pre></code></td></tr><tr><td>66</td><td><code><pre> timeFloat, _ := strconv.ParseFloat(timezone, 10)</pre></code></td></tr><tr><td>67</td><td><code><pre> app.Timezone = float32(timeFloat)</pre></code></td></tr><tr><td>68</td><td><code><pre></pre></code></td></tr><tr><td>69</td><td><code><pre> app.UseCdn = (r.PostForm.Get("enable_cdn") == "on")</pre></code></td></tr><tr><td>70</td><td><code><pre> core.CoreApp, _ = core.UpdateCore(app)</pre></code></td></tr><tr><td>71</td><td><code><pre> //notifiers.OnSettingsSaved(core.CoreApp.ToCore())</pre></code></td></tr><tr><td>72</td><td><code><pre> executeResponse(w, r, "settings.html", core.CoreApp, "/settings")</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_servicesUpdateHandler">func servicesUpdateHandler</div><div class="info"><a href="#s_fn_servicesUpdateHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>205</td><td><code><pre>func servicesUpdateHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>206</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>207</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>208</td><td><code><pre> return</pre></code></td></tr><tr><td>209</td><td><code><pre> }</pre></code></td></tr><tr><td>210</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>211</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>212</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>213</td><td><code><pre> name := r.PostForm.Get("name")</pre></code></td></tr><tr><td>214</td><td><code><pre> domain := r.PostForm.Get("domain")</pre></code></td></tr><tr><td>215</td><td><code><pre> method := r.PostForm.Get("method")</pre></code></td></tr><tr><td>216</td><td><code><pre> expected := r.PostForm.Get("expected")</pre></code></td></tr><tr><td>217</td><td><code><pre> status, _ := strconv.Atoi(r.PostForm.Get("expected_status"))</pre></code></td></tr><tr><td>218</td><td><code><pre> interval, _ := strconv.Atoi(r.PostForm.Get("interval"))</pre></code></td></tr><tr><td>219</td><td><code><pre> port, _ := strconv.Atoi(r.PostForm.Get("port"))</pre></code></td></tr><tr><td>220</td><td><code><pre> timeout, _ := strconv.Atoi(r.PostForm.Get("timeout"))</pre></code></td></tr><tr><td>221</td><td><code><pre> checkType := r.PostForm.Get("check_type")</pre></code></td></tr><tr><td>222</td><td><code><pre> postData := r.PostForm.Get("post_data")</pre></code></td></tr><tr><td>223</td><td><code><pre> order, _ := strconv.Atoi(r.PostForm.Get("order"))</pre></code></td></tr><tr><td>224</td><td><code><pre></pre></code></td></tr><tr><td>225</td><td><code><pre> service.Name = name</pre></code></td></tr><tr><td>226</td><td><code><pre> service.Domain = domain</pre></code></td></tr><tr><td>227</td><td><code><pre> service.Method = method</pre></code></td></tr><tr><td>228</td><td><code><pre> service.ExpectedStatus = status</pre></code></td></tr><tr><td>229</td><td><code><pre> service.Expected = expected</pre></code></td></tr><tr><td>230</td><td><code><pre> service.Interval = interval</pre></code></td></tr><tr><td>231</td><td><code><pre> service.Type = checkType</pre></code></td></tr><tr><td>232</td><td><code><pre> service.Port = port</pre></code></td></tr><tr><td>233</td><td><code><pre> service.PostData = postData</pre></code></td></tr><tr><td>234</td><td><code><pre> service.Timeout = timeout</pre></code></td></tr><tr><td>235</td><td><code><pre> service.Order = order</pre></code></td></tr><tr><td>236</td><td><code><pre></pre></code></td></tr><tr><td>237</td><td><code><pre> service.Update(true)</pre></code></td></tr><tr><td>238</td><td><code><pre> service.Check(true)</pre></code></td></tr><tr><td>239</td><td><code><pre> executeResponse(w, r, "service.html", service, "/services")</pre></code></td></tr><tr><td>240</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_loginHandler">func loginHandler</div><div class="info"><a href="#s_fn_loginHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>42</td><td><code><pre>func loginHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>43</td><td><code><pre> if sessionStore == nil {</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> resetCookies()</pre></code></td></tr><tr><td>45</td><td><code><pre> }</pre></code></td></tr><tr><td>46</td><td><code><pre> session, _ := sessionStore.Get(r, cookieKey)</pre></code></td></tr><tr><td>47</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>48</td><td><code><pre> username := r.PostForm.Get("username")</pre></code></td></tr><tr><td>49</td><td><code><pre> password := r.PostForm.Get("password")</pre></code></td></tr><tr><td>50</td><td><code><pre> user, auth := core.AuthUser(username, password)</pre></code></td></tr><tr><td>51</td><td><code><pre> if auth {</pre></code></td></tr><tr><td>52</td><td><code><pre> session.Values["authenticated"] = true</pre></code></td></tr><tr><td>53</td><td><code><pre> session.Values["user_id"] = user.Id</pre></code></td></tr><tr><td>54</td><td><code><pre> session.Save(r, w)</pre></code></td></tr><tr><td>55</td><td><code><pre> http.Redirect(w, r, "/dashboard", http.StatusSeeOther)</pre></code></td></tr><tr><td>56</td><td><code><pre> } else {</pre></code></td></tr><tr><td>57</td><td><code><pre> err := core.ErrorResponse{Error: "Incorrect login information submitted, try again."}</pre></code></td></tr><tr><td>58</td><td><code><pre> executeResponse(w, r, "login.html", err, nil)</pre></code></td></tr><tr><td>59</td><td><code><pre> }</pre></code></td></tr><tr><td>60</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_createUserHandler">func createUserHandler</div><div class="info"><a href="#s_fn_createUserHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>75</td><td><code><pre>func createUserHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>76</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>77</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>78</td><td><code><pre> return</pre></code></td></tr><tr><td>79</td><td><code><pre> }</pre></code></td></tr><tr><td>80</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>81</td><td><code><pre> username := r.PostForm.Get("username")</pre></code></td></tr><tr><td>82</td><td><code><pre> password := r.PostForm.Get("password")</pre></code></td></tr><tr><td>83</td><td><code><pre> email := r.PostForm.Get("email")</pre></code></td></tr><tr><td>84</td><td><code><pre> admin := r.PostForm.Get("admin")</pre></code></td></tr><tr><td>85</td><td><code><pre></pre></code></td></tr><tr><td>86</td><td><code><pre> user := core.ReturnUser(&types.User{</pre></code></td></tr><tr><td>87</td><td><code><pre> Username: username,</pre></code></td></tr><tr><td>88</td><td><code><pre> Password: password,</pre></code></td></tr><tr><td>89</td><td><code><pre> Email: email,</pre></code></td></tr><tr><td>90</td><td><code><pre> Admin: (admin == "on"),</pre></code></td></tr><tr><td>91</td><td><code><pre> })</pre></code></td></tr><tr><td>92</td><td><code><pre> _, err := user.Create()</pre></code></td></tr><tr><td>93</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr><tr><td>96</td><td><code><pre> //notifiers.OnNewUser(user)</pre></code></td></tr><tr><td>97</td><td><code><pre> executeResponse(w, r, "users.html", user, "/users")</pre></code></td></tr><tr><td>98</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_createServiceHandler">func createServiceHandler</div><div class="info"><a href="#s_fn_createServiceHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>114</td><td><code><pre>func createServiceHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>115</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>116</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>117</td><td><code><pre> return</pre></code></td></tr><tr><td>118</td><td><code><pre> }</pre></code></td></tr><tr><td>119</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>120</td><td><code><pre> name := r.PostForm.Get("name")</pre></code></td></tr><tr><td>121</td><td><code><pre> domain := r.PostForm.Get("domain")</pre></code></td></tr><tr><td>122</td><td><code><pre> method := r.PostForm.Get("method")</pre></code></td></tr><tr><td>123</td><td><code><pre> expected := r.PostForm.Get("expected")</pre></code></td></tr><tr><td>124</td><td><code><pre> status, _ := strconv.Atoi(r.PostForm.Get("expected_status"))</pre></code></td></tr><tr><td>125</td><td><code><pre> interval, _ := strconv.Atoi(r.PostForm.Get("interval"))</pre></code></td></tr><tr><td>126</td><td><code><pre> port, _ := strconv.Atoi(r.PostForm.Get("port"))</pre></code></td></tr><tr><td>127</td><td><code><pre> timeout, _ := strconv.Atoi(r.PostForm.Get("timeout"))</pre></code></td></tr><tr><td>128</td><td><code><pre> checkType := r.PostForm.Get("check_type")</pre></code></td></tr><tr><td>129</td><td><code><pre> postData := r.PostForm.Get("post_data")</pre></code></td></tr><tr><td>130</td><td><code><pre> order, _ := strconv.Atoi(r.PostForm.Get("order"))</pre></code></td></tr><tr><td>131</td><td><code><pre></pre></code></td></tr><tr><td>132</td><td><code><pre> if checkType == "http" && status == 0 {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> status = 200</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr><tr><td>135</td><td><code><pre></pre></code></td></tr><tr><td>136</td><td><code><pre> service := core.ReturnService(&types.Service{</pre></code></td></tr><tr><td>137</td><td><code><pre> Name: name,</pre></code></td></tr><tr><td>138</td><td><code><pre> Domain: domain,</pre></code></td></tr><tr><td>139</td><td><code><pre> Method: method,</pre></code></td></tr><tr><td>140</td><td><code><pre> Expected: expected,</pre></code></td></tr><tr><td>141</td><td><code><pre> ExpectedStatus: status,</pre></code></td></tr><tr><td>142</td><td><code><pre> Interval: interval,</pre></code></td></tr><tr><td>143</td><td><code><pre> Type: checkType,</pre></code></td></tr><tr><td>144</td><td><code><pre> Port: port,</pre></code></td></tr><tr><td>145</td><td><code><pre> PostData: postData,</pre></code></td></tr><tr><td>146</td><td><code><pre> Timeout: timeout,</pre></code></td></tr><tr><td>147</td><td><code><pre> Order: order,</pre></code></td></tr><tr><td>148</td><td><code><pre> })</pre></code></td></tr><tr><td>149</td><td><code><pre> _, err := service.Create(true)</pre></code></td></tr><tr><td>150</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>151</td><td><code><pre> utils.Log(3, fmt.Sprintf("Error starting %v check routine. %v", service.Name, err))</pre></code></td></tr><tr><td>152</td><td><code><pre> }</pre></code></td></tr><tr><td>153</td><td><code><pre> //notifiers.OnNewService(core.ReturnService(service.Service))</pre></code></td></tr><tr><td>154</td><td><code><pre> executeResponse(w, r, "services.html", core.CoreApp.Services, "/services")</pre></code></td></tr><tr><td>155</td><td><code><pre>}</
|
||
|
|
||
|
<div class="funcname" id="fn_servicesViewHandler">func servicesViewHandler</div><div class="info"><a href="#s_fn_servicesViewHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>172</td><td><code><pre>func servicesViewHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>173</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>174</td><td><code><pre> fields := parseGet(r)</pre></code></td></tr><tr><td>175</td><td><code><pre> startField := utils.StringInt(fields.Get("start"))</pre></code></td></tr><tr><td>176</td><td><code><pre> endField := utils.StringInt(fields.Get("end"))</pre></code></td></tr><tr><td>177</td><td><code><pre> serv := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>178</td><td><code><pre> if serv == nil {</pre></code></td></tr><tr><td>179</td><td><code><pre> w.WriteHeader(http.StatusNotFound)</pre></code></td></tr><tr><td>180</td><td><code><pre> return</pre></code></td></tr><tr><td>181</td><td><code><pre> }</pre></code></td></tr><tr><td>182</td><td><code><pre></pre></code></td></tr><tr><td>183</td><td><code><pre> end := time.Now().UTC()</pre></code></td></tr><tr><td>184</td><td><code><pre> start := end.Add((-24 * 7) * time.Hour).UTC()</pre></code></td></tr><tr><td>185</td><td><code><pre></pre></code></td></tr><tr><td>186</td><td><code><pre> if startField != 0 {</pre></code></td></tr><tr class="miss"><td>187</td><td><code><pre> start = time.Unix(startField, 0)</pre></code></td></tr><tr><td>188</td><td><code><pre> }</pre></code></td></tr><tr><td>189</td><td><code><pre> if endField != 0 {</pre></code></td></tr><tr class="miss"><td>190</td><td><code><pre> end = time.Unix(endField, 0)</pre></code></td></tr><tr><td>191</td><td><code><pre> }</pre></code></td></tr><tr><td>192</td><td><code><pre></pre></code></td></tr><tr><td>193</td><td><code><pre> data := core.GraphDataRaw(serv, start, end, "hour", "latency")</pre></code></td></tr><tr><td>194</td><td><code><pre></pre></code></td></tr><tr><td>195</td><td><code><pre> out := struct {</pre></code></td></tr><tr><td>196</td><td><code><pre> Service *core.Service</pre></code></td></tr><tr><td>197</td><td><code><pre> Start int64</pre></code></td></tr><tr><td>198</td><td><code><pre> End int64</pre></code></td></tr><tr><td>199</td><td><code><pre> Data string</pre></code></td></tr><tr><td>200</td><td><code><pre> }{serv, start.Unix(), end.Unix(), data.ToString()}</pre></code></td></tr><tr><td>201</td><td><code><pre></pre></code></td></tr><tr><td>202</td><td><code><pre> executeResponse(w, r, "service.html", out, nil)</pre></code></td></tr><tr><td>203</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_saveNotificationHandler">func saveNotificationHandler</div><div class="info"><a href="#s_fn_saveNotificationHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>137</td><td><code><pre>func saveNotificationHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>138</td><td><code><pre> var err error</pre></code></td></tr><tr><td>139</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>140</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>141</td><td><code><pre> return</pre></code></td></tr><tr><td>142</td><td><code><pre> }</pre></code></td></tr><tr><td>143</td><td><code><pre> form := parseForm(r)</pre></code></td></tr><tr><td>144</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>145</td><td><code><pre> method := vars["method"]</pre></code></td></tr><tr><td>146</td><td><code><pre> enabled := form.Get("enable")</pre></code></td></tr><tr><td>147</td><td><code><pre> host := form.Get("host")</pre></code></td></tr><tr><td>148</td><td><code><pre> port := int(utils.StringInt(form.Get("port")))</pre></code></td></tr><tr><td>149</td><td><code><pre> username := form.Get("username")</pre></code></td></tr><tr><td>150</td><td><code><pre> password := form.Get("password")</pre></code></td></tr><tr><td>151</td><td><code><pre> var1 := form.Get("var1")</pre></code></td></tr><tr><td>152</td><td><code><pre> var2 := form.Get("var2")</pre></code></td></tr><tr><td>153</td><td><code><pre> apiKey := form.Get("api_key")</pre></code></td></tr><tr><td>154</td><td><code><pre> apiSecret := form.Get("api_secret")</pre></code></td></tr><tr><td>155</td><td><code><pre> limits := int(utils.StringInt(form.Get("limits")))</pre></code></td></tr><tr><td>156</td><td><code><pre></pre></code></td></tr><tr><td>157</td><td><code><pre> notifer, notif, err := notifier.SelectNotifier(method)</pre></code></td></tr><tr><td>158</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> utils.Log(3, fmt.Sprintf("issue saving notifier %v: %v", method, err))</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> executeResponse(w, r, "settings.html", core.CoreApp, "/settings")</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> return</pre></code></td></tr><tr><td>162</td><td><code><pre> }</pre></code></td></tr><tr><td>163</td><td><code><pre></pre></code></td></tr><tr><td>164</td><td><code><pre> if host != "" {</pre></code></td></tr><tr><td>165</td><td><code><pre> notifer.Host = host</pre></code></td></tr><tr><td>166</td><td><code><pre> }</pre></code></td></tr><tr><td>167</td><td><code><pre> if port != 0 {</pre></code></td></tr><tr><td>168</td><td><code><pre> notifer.Port = port</pre></code></td></tr><tr><td>169</td><td><code><pre> }</pre></code></td></tr><tr><td>170</td><td><code><pre> if username != "" {</pre></code></td></tr><tr><td>171</td><td><code><pre> notifer.Username = username</pre></code></td></tr><tr><td>172</td><td><code><pre> }</pre></code></td></tr><tr><td>173</td><td><code><pre> if password != "" && password != "##########" {</pre></code></td></tr><tr><td>174</td><td><code><pre> notifer.Password = password</pre></code></td></tr><tr><td>175</td><td><code><pre> }</pre></code></td></tr><tr><td>176</td><td><code><pre> if var1 != "" {</pre></code></td></tr><tr><td>177</td><td><code><pre> notifer.Var1 = var1</pre></code></td></tr><tr><td>178</td><td><code><pre> }</pre></code></td></tr><tr><td>179</td><td><code><pre> if var2 != "" {</pre></code></td></tr><tr><td>180</td><td><code><pre> notifer.Var2 = var2</pre></code></td></tr><tr><td>181</td><td><code><pre> }</pre></code></td></tr><tr><td
|
||
|
|
||
|
<div class="funcname" id="fn_apiIndexHandler">func apiIndexHandler</div><div class="info"><a href="#s_fn_apiIndexHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>36</td><td><code><pre>func apiIndexHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>37</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>39</td><td><code><pre> return</pre></code></td></tr><tr><td>40</td><td><code><pre> }</pre></code></td></tr><tr><td>41</td><td><code><pre> var out core.Core</pre></code></td></tr><tr><td>42</td><td><code><pre> out = *core.CoreApp</pre></code></td></tr><tr><td>43</td><td><code><pre> var services []types.ServiceInterface</pre></code></td></tr><tr><td>44</td><td><code><pre> for _, s := range out.Services {</pre></code></td></tr><tr><td>45</td><td><code><pre> service := s.Select()</pre></code></td></tr><tr><td>46</td><td><code><pre> service.Failures = nil</pre></code></td></tr><tr><td>47</td><td><code><pre> services = append(services, core.ReturnService(service))</pre></code></td></tr><tr><td>48</td><td><code><pre> }</pre></code></td></tr><tr><td>49</td><td><code><pre> out.Services = services</pre></code></td></tr><tr><td>50</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>51</td><td><code><pre> json.NewEncoder(w).Encode(out)</pre></code></td></tr><tr><td>52</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiServiceDataHandler">func apiServiceDataHandler</div><div class="info"><a href="#s_fn_apiServiceDataHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>81</td><td><code><pre>func apiServiceDataHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>82</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>83</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>84</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> return</pre></code></td></tr><tr><td>87</td><td><code><pre> }</pre></code></td></tr><tr><td>88</td><td><code><pre> fields := parseGet(r)</pre></code></td></tr><tr><td>89</td><td><code><pre> grouping := fields.Get("group")</pre></code></td></tr><tr><td>90</td><td><code><pre> startField := utils.StringInt(fields.Get("start"))</pre></code></td></tr><tr><td>91</td><td><code><pre> endField := utils.StringInt(fields.Get("end"))</pre></code></td></tr><tr><td>92</td><td><code><pre> obj := core.GraphDataRaw(service, time.Unix(startField, 0), time.Unix(endField, 0), grouping, "latency")</pre></code></td></tr><tr><td>93</td><td><code><pre></pre></code></td></tr><tr><td>94</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>95</td><td><code><pre> json.NewEncoder(w).Encode(obj)</pre></code></td></tr><tr><td>96</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiAllServicesHandler">func apiAllServicesHandler</div><div class="info"><a href="#s_fn_apiAllServicesHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>205</td><td><code><pre>func apiAllServicesHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>206</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>207</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>208</td><td><code><pre> return</pre></code></td></tr><tr><td>209</td><td><code><pre> }</pre></code></td></tr><tr><td>210</td><td><code><pre> allServices := core.CoreApp.Services</pre></code></td></tr><tr><td>211</td><td><code><pre> var services []types.ServiceInterface</pre></code></td></tr><tr><td>212</td><td><code><pre> for _, s := range allServices {</pre></code></td></tr><tr><td>213</td><td><code><pre> service := s.Select()</pre></code></td></tr><tr><td>214</td><td><code><pre> service.Failures = nil</pre></code></td></tr><tr><td>215</td><td><code><pre> services = append(services, core.ReturnService(service))</pre></code></td></tr><tr><td>216</td><td><code><pre> }</pre></code></td></tr><tr><td>217</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>218</td><td><code><pre> json.NewEncoder(w).Encode(services)</pre></code></td></tr><tr><td>219</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_setupHandler">func setupHandler</div><div class="info"><a href="#s_fn_setupHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/setup.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>28</td><td><code><pre>func setupHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>29</td><td><code><pre> if core.CoreApp.Services != nil {</pre></code></td></tr><tr><td>30</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>31</td><td><code><pre> return</pre></code></td></tr><tr><td>32</td><td><code><pre> }</pre></code></td></tr><tr><td>33</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr><td>34</td><td><code><pre> port := 5432</pre></code></td></tr><tr><td>35</td><td><code><pre> if os.Getenv("DB_CONN") == "mysql" {</pre></code></td></tr><tr class="miss"><td>36</td><td><code><pre> port = 3306</pre></code></td></tr><tr><td>37</td><td><code><pre> }</pre></code></td></tr><tr><td>38</td><td><code><pre> var data interface{}</pre></code></td></tr><tr><td>39</td><td><code><pre> if os.Getenv("DB_CONN") != "" {</pre></code></td></tr><tr class="miss"><td>40</td><td><code><pre> data = &types.DbConfig{</pre></code></td></tr><tr><td>41</td><td><code><pre> DbConn: os.Getenv("DB_CONN"),</pre></code></td></tr><tr><td>42</td><td><code><pre> DbHost: os.Getenv("DB_HOST"),</pre></code></td></tr><tr><td>43</td><td><code><pre> DbUser: os.Getenv("DB_USER"),</pre></code></td></tr><tr><td>44</td><td><code><pre> DbPass: os.Getenv("DB_PASS"),</pre></code></td></tr><tr><td>45</td><td><code><pre> DbData: os.Getenv("DB_DATABASE"),</pre></code></td></tr><tr><td>46</td><td><code><pre> DbPort: port,</pre></code></td></tr><tr><td>47</td><td><code><pre> Project: os.Getenv("NAME"),</pre></code></td></tr><tr><td>48</td><td><code><pre> Description: os.Getenv("DESCRIPTION"),</pre></code></td></tr><tr><td>49</td><td><code><pre> Email: "",</pre></code></td></tr><tr><td>50</td><td><code><pre> Username: "admin",</pre></code></td></tr><tr><td>51</td><td><code><pre> Password: "",</pre></code></td></tr><tr><td>52</td><td><code><pre> }</pre></code></td></tr><tr><td>53</td><td><code><pre> }</pre></code></td></tr><tr><td>54</td><td><code><pre> executeResponse(w, r, "setup.html", data, nil)</pre></code></td></tr><tr><td>55</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_executeResponse">func executeResponse</div><div class="info"><a href="#s_fn_executeResponse">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>166</td><td><code><pre>func executeResponse(w http.ResponseWriter, r *http.Request, file string, data interface{}, redirect interface{}) {</pre></code></td></tr><tr><td>167</td><td><code><pre> utils.Http(r)</pre></code></td></tr><tr><td>168</td><td><code><pre> if url, ok := redirect.(string); ok {</pre></code></td></tr><tr><td>169</td><td><code><pre> http.Redirect(w, r, url, http.StatusSeeOther)</pre></code></td></tr><tr><td>170</td><td><code><pre> return</pre></code></td></tr><tr><td>171</td><td><code><pre> }</pre></code></td></tr><tr><td>172</td><td><code><pre></pre></code></td></tr><tr><td>173</td><td><code><pre> templates := []string{"base.html", "head.html", "nav.html", "footer.html", "scripts.html", "form_service.html", "form_notifier.html", "form_user.html", "form_checkin.html"}</pre></code></td></tr><tr><td>174</td><td><code><pre></pre></code></td></tr><tr><td>175</td><td><code><pre> javascripts := []string{"charts.js", "chart_index.js"}</pre></code></td></tr><tr><td>176</td><td><code><pre></pre></code></td></tr><tr><td>177</td><td><code><pre> render, err := source.TmplBox.String(file)</pre></code></td></tr><tr><td>178</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>179</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>180</td><td><code><pre> }</pre></code></td></tr><tr><td>181</td><td><code><pre></pre></code></td></tr><tr><td>182</td><td><code><pre> // setup the main template and handler funcs</pre></code></td></tr><tr><td>183</td><td><code><pre> t := template.New("main")</pre></code></td></tr><tr><td>184</td><td><code><pre> t.Funcs(handlerFuncs(w, r))</pre></code></td></tr><tr><td>185</td><td><code><pre> t, err = t.Parse(mainTmpl)</pre></code></td></tr><tr><td>186</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>187</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>188</td><td><code><pre> }</pre></code></td></tr><tr><td>189</td><td><code><pre></pre></code></td></tr><tr><td>190</td><td><code><pre> // render all templates</pre></code></td></tr><tr><td>191</td><td><code><pre> for _, temp := range templates {</pre></code></td></tr><tr><td>192</td><td><code><pre> tmp, _ := source.TmplBox.String(temp)</pre></code></td></tr><tr><td>193</td><td><code><pre> t, err = t.Parse(tmp)</pre></code></td></tr><tr><td>194</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>195</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>196</td><td><code><pre> }</pre></code></td></tr><tr><td>197</td><td><code><pre> }</pre></code></td></tr><tr><td>198</td><td><code><pre></pre></code></td></tr><tr><td>199</td><td><code><pre> // render all javascript files</pre></code></td></tr><tr><td>200</td><td><code><pre> for _, temp := range javascripts {</pre></code></td></tr><tr><td>201</td><td><code><pre> tmp, _ := source.JsBox.String(temp)</pre></code></td></tr><tr><td>202</td><td><code><pre> t, err = t.Parse(tmp)</pre></code></td></tr><tr><td>203</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>204</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>205</td><td><code><pre> }</pre></code></td></tr><tr><td>206</td><td><code><pre> }</pre></code></td></tr><tr><td>207</td><td><code><pre></pre></code></td></tr><tr><td>208</td><td><code><pre> // render the page requested</pre></code></td></tr><tr><td>209</td><td><code><pre> _, err = t.Parse(render)</pre></code></td></tr><tr><td>210</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>211</td><td><code><pre>
|
||
|
|
||
|
<div class="funcname" id="fn_servicesDeleteHandler">func servicesDeleteHandler</div><div class="info"><a href="#s_fn_servicesDeleteHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>157</td><td><code><pre>func servicesDeleteHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>158</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>159</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>160</td><td><code><pre> return</pre></code></td></tr><tr><td>161</td><td><code><pre> }</pre></code></td></tr><tr><td>162</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>163</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>164</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> w.WriteHeader(http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> return</pre></code></td></tr><tr><td>167</td><td><code><pre> }</pre></code></td></tr><tr><td>168</td><td><code><pre> service.Delete()</pre></code></td></tr><tr><td>169</td><td><code><pre> executeResponse(w, r, "services.html", core.CoreApp.Services, "/services")</pre></code></td></tr><tr><td>170</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_usersDeleteHandler">func usersDeleteHandler</div><div class="info"><a href="#s_fn_usersDeleteHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>100</td><td><code><pre>func usersDeleteHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>101</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>102</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>103</td><td><code><pre> return</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr><tr><td>105</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>106</td><td><code><pre> id, _ := strconv.Atoi(vars["id"])</pre></code></td></tr><tr><td>107</td><td><code><pre> user, _ := core.SelectUser(int64(id))</pre></code></td></tr><tr><td>108</td><td><code><pre></pre></code></td></tr><tr><td>109</td><td><code><pre> users, _ := core.SelectAllUsers()</pre></code></td></tr><tr><td>110</td><td><code><pre> if len(users) == 1 {</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> utils.Log(2, "cannot delete the only user in the system")</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> http.Redirect(w, r, "/users", http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>113</td><td><code><pre> return</pre></code></td></tr><tr><td>114</td><td><code><pre> }</pre></code></td></tr><tr><td>115</td><td><code><pre> user.Delete()</pre></code></td></tr><tr><td>116</td><td><code><pre> http.Redirect(w, r, "/users", http.StatusSeeOther)</pre></code></td></tr><tr><td>117</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_resetCookies">func resetCookies</div><div class="info"><a href="#s_fn_resetCookies">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/routes.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>123</td><td><code><pre>func resetCookies() {</pre></code></td></tr><tr><td>124</td><td><code><pre> if core.CoreApp != nil {</pre></code></td></tr><tr><td>125</td><td><code><pre> cookie := fmt.Sprintf("%v_%v", core.CoreApp.ApiSecret, time.Now().Nanosecond())</pre></code></td></tr><tr><td>126</td><td><code><pre> sessionStore = sessions.NewCookieStore([]byte(cookie))</pre></code></td></tr><tr><td>127</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> sessionStore = sessions.NewCookieStore([]byte("secretinfo"))</pre></code></td></tr><tr><td>129</td><td><code><pre> }</pre></code></td></tr><tr><td>130</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_executeJSResponse">func executeJSResponse</div><div class="info"><a href="#s_fn_executeJSResponse">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>222</td><td><code><pre>func executeJSResponse(w http.ResponseWriter, r *http.Request, file string, data interface{}) {</pre></code></td></tr><tr><td>223</td><td><code><pre> render, err := source.JsBox.String(file)</pre></code></td></tr><tr><td>224</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>225</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>226</td><td><code><pre> }</pre></code></td></tr><tr><td>227</td><td><code><pre> t := template.New("charts")</pre></code></td></tr><tr><td>228</td><td><code><pre> t.Funcs(template.FuncMap{</pre></code></td></tr><tr><td>229</td><td><code><pre> "safe": func(html string) template.HTML {</pre></code></td></tr><tr><td>230</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>231</td><td><code><pre> },</pre></code></td></tr><tr><td>232</td><td><code><pre> "Services": func() []types.ServiceInterface {</pre></code></td></tr><tr><td>233</td><td><code><pre> return core.CoreApp.Services</pre></code></td></tr><tr><td>234</td><td><code><pre> },</pre></code></td></tr><tr><td>235</td><td><code><pre> })</pre></code></td></tr><tr><td>236</td><td><code><pre> _, err = t.Parse(render)</pre></code></td></tr><tr><td>237</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>238</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>239</td><td><code><pre> }</pre></code></td></tr><tr><td>240</td><td><code><pre></pre></code></td></tr><tr><td>241</td><td><code><pre> err = t.Execute(w, data)</pre></code></td></tr><tr><td>242</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>243</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>244</td><td><code><pre> }</pre></code></td></tr><tr><td>245</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_reorderServiceHandler">func reorderServiceHandler</div><div class="info"><a href="#s_fn_reorderServiceHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>98</td><td><code><pre>func reorderServiceHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>99</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>100</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>101</td><td><code><pre> return</pre></code></td></tr><tr><td>102</td><td><code><pre> }</pre></code></td></tr><tr><td>103</td><td><code><pre> var newOrder []*serviceOrder</pre></code></td></tr><tr><td>104</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>105</td><td><code><pre> decoder.Decode(&newOrder)</pre></code></td></tr><tr><td>106</td><td><code><pre> for _, s := range newOrder {</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> service := core.SelectService(s.Id)</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> service.Order = s.Order</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> service.Update(false)</pre></code></td></tr><tr><td>110</td><td><code><pre> }</pre></code></td></tr><tr><td>111</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr><td>112</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_saveAssetsHandler">func saveAssetsHandler</div><div class="info"><a href="#s_fn_saveAssetsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>92</td><td><code><pre>func saveAssetsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>93</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>94</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr><td>95</td><td><code><pre> return</pre></code></td></tr><tr><td>96</td><td><code><pre> }</pre></code></td></tr><tr><td>97</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr><td>98</td><td><code><pre> err := source.CreateAllAssets(dir)</pre></code></td></tr><tr><td>99</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> return</pre></code></td></tr><tr><td>102</td><td><code><pre> }</pre></code></td></tr><tr><td>103</td><td><code><pre> err = source.CompileSASS(dir)</pre></code></td></tr><tr><td>104</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> source.CopyToPublic(source.CssBox, dir+"/assets/css", "base.css")</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> utils.Log(2, "Default 'base.css' was insert because SASS did not work.")</pre></code></td></tr><tr><td>107</td><td><code><pre> }</pre></code></td></tr><tr><td>108</td><td><code><pre> resetRouter()</pre></code></td></tr><tr><td>109</td><td><code><pre> executeResponse(w, r, "settings.html", core.CoreApp, "/settings")</pre></code></td></tr><tr><td>110</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_updateUserHandler">func updateUserHandler</div><div class="info"><a href="#s_fn_updateUserHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>48</td><td><code><pre>func updateUserHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>49</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> return</pre></code></td></tr><tr><td>52</td><td><code><pre> }</pre></code></td></tr><tr><td>53</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>54</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>55</td><td><code><pre> id, _ := strconv.Atoi(vars["id"])</pre></code></td></tr><tr><td>56</td><td><code><pre> user, err := core.SelectUser(int64(id))</pre></code></td></tr><tr><td>57</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> utils.Log(3, fmt.Sprintf("user error: %v", err))</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> w.WriteHeader(http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> return</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr><td>62</td><td><code><pre></pre></code></td></tr><tr><td>63</td><td><code><pre> user.Username = r.PostForm.Get("username")</pre></code></td></tr><tr><td>64</td><td><code><pre> user.Email = r.PostForm.Get("email")</pre></code></td></tr><tr><td>65</td><td><code><pre> user.Admin = (r.PostForm.Get("admin") == "on")</pre></code></td></tr><tr><td>66</td><td><code><pre> password := r.PostForm.Get("password")</pre></code></td></tr><tr><td>67</td><td><code><pre> if password != "##########" {</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> user.Password = utils.HashPassword(password)</pre></code></td></tr><tr><td>69</td><td><code><pre> }</pre></code></td></tr><tr><td>70</td><td><code><pre> user.Update()</pre></code></td></tr><tr><td>71</td><td><code><pre> users, _ := core.SelectAllUsers()</pre></code></td></tr><tr><td>72</td><td><code><pre> executeResponse(w, r, "users.html", users, "/users")</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiServiceUpdateHandler">func apiServiceUpdateHandler</div><div class="info"><a href="#s_fn_apiServiceUpdateHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>153</td><td><code><pre>func apiServiceUpdateHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>154</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>155</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> return</pre></code></td></tr><tr><td>157</td><td><code><pre> }</pre></code></td></tr><tr><td>158</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>159</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>160</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> return</pre></code></td></tr><tr><td>163</td><td><code><pre> }</pre></code></td></tr><tr><td>164</td><td><code><pre> var updatedService *types.Service</pre></code></td></tr><tr><td>165</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>166</td><td><code><pre> decoder.Decode(&updatedService)</pre></code></td></tr><tr><td>167</td><td><code><pre> updatedService.Id = service.Id</pre></code></td></tr><tr><td>168</td><td><code><pre> service = core.ReturnService(updatedService)</pre></code></td></tr><tr><td>169</td><td><code><pre> err := service.Update(true)</pre></code></td></tr><tr><td>170</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>171</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> return</pre></code></td></tr><tr><td>173</td><td><code><pre> }</pre></code></td></tr><tr><td>174</td><td><code><pre> service.Check(true)</pre></code></td></tr><tr><td>175</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>176</td><td><code><pre> json.NewEncoder(w).Encode(service)</pre></code></td></tr><tr><td>177</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiUserUpdateHandler">func apiUserUpdateHandler</div><div class="info"><a href="#s_fn_apiUserUpdateHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>236</td><td><code><pre>func apiUserUpdateHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>237</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>238</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>239</td><td><code><pre> return</pre></code></td></tr><tr><td>240</td><td><code><pre> }</pre></code></td></tr><tr><td>241</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>242</td><td><code><pre> user, err := core.SelectUser(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>243</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>244</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>245</td><td><code><pre> return</pre></code></td></tr><tr><td>246</td><td><code><pre> }</pre></code></td></tr><tr><td>247</td><td><code><pre> var updateUser *types.User</pre></code></td></tr><tr><td>248</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>249</td><td><code><pre> decoder.Decode(&updateUser)</pre></code></td></tr><tr><td>250</td><td><code><pre> updateUser.Id = user.Id</pre></code></td></tr><tr><td>251</td><td><code><pre> user = core.ReturnUser(updateUser)</pre></code></td></tr><tr><td>252</td><td><code><pre> err = user.Update()</pre></code></td></tr><tr><td>253</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>254</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>255</td><td><code><pre> return</pre></code></td></tr><tr><td>256</td><td><code><pre> }</pre></code></td></tr><tr><td>257</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>258</td><td><code><pre> json.NewEncoder(w).Encode(user)</pre></code></td></tr><tr><td>259</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_IsAuthenticated">func IsAuthenticated</div><div class="info"><a href="#s_fn_IsAuthenticated">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>68</td><td><code><pre>func IsAuthenticated(r *http.Request) bool {</pre></code></td></tr><tr><td>69</td><td><code><pre> if os.Getenv("GO_ENV") == "test" {</pre></code></td></tr><tr><td>70</td><td><code><pre> return true</pre></code></td></tr><tr><td>71</td><td><code><pre> }</pre></code></td></tr><tr><td>72</td><td><code><pre> if core.CoreApp == nil {</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> return false</pre></code></td></tr><tr><td>74</td><td><code><pre> }</pre></code></td></tr><tr><td>75</td><td><code><pre> if sessionStore == nil {</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> return false</pre></code></td></tr><tr><td>77</td><td><code><pre> }</pre></code></td></tr><tr><td>78</td><td><code><pre> session, err := sessionStore.Get(r, cookieKey)</pre></code></td></tr><tr><td>79</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> return false</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr><tr><td>82</td><td><code><pre> if session.Values["authenticated"] == nil {</pre></code></td></tr><tr><td>83</td><td><code><pre> return false</pre></code></td></tr><tr><td>84</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> return session.Values["authenticated"].(bool)</pre></code></td></tr><tr><td>86</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiAllUsersHandler">func apiAllUsersHandler</div><div class="info"><a href="#s_fn_apiAllUsersHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>287</td><td><code><pre>func apiAllUsersHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>288</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>289</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>290</td><td><code><pre> return</pre></code></td></tr><tr><td>291</td><td><code><pre> }</pre></code></td></tr><tr><td>292</td><td><code><pre> users, _ := core.SelectAllUsers()</pre></code></td></tr><tr><td>293</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>294</td><td><code><pre> json.NewEncoder(w).Encode(users)</pre></code></td></tr><tr><td>295</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_processSetupHandler">func processSetupHandler</div><div class="info"><a href="#s_fn_processSetupHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/setup.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>57</td><td><code><pre>func processSetupHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>58</td><td><code><pre> var err error</pre></code></td></tr><tr><td>59</td><td><code><pre> if core.CoreApp.Services != nil {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> return</pre></code></td></tr><tr><td>62</td><td><code><pre> }</pre></code></td></tr><tr><td>63</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>64</td><td><code><pre> dbHost := r.PostForm.Get("db_host")</pre></code></td></tr><tr><td>65</td><td><code><pre> dbUser := r.PostForm.Get("db_user")</pre></code></td></tr><tr><td>66</td><td><code><pre> dbPass := r.PostForm.Get("db_password")</pre></code></td></tr><tr><td>67</td><td><code><pre> dbDatabase := r.PostForm.Get("db_database")</pre></code></td></tr><tr><td>68</td><td><code><pre> dbConn := r.PostForm.Get("db_connection")</pre></code></td></tr><tr><td>69</td><td><code><pre> dbPort, _ := strconv.Atoi(r.PostForm.Get("db_port"))</pre></code></td></tr><tr><td>70</td><td><code><pre> project := r.PostForm.Get("project")</pre></code></td></tr><tr><td>71</td><td><code><pre> username := r.PostForm.Get("username")</pre></code></td></tr><tr><td>72</td><td><code><pre> password := r.PostForm.Get("password")</pre></code></td></tr><tr><td>73</td><td><code><pre> sample := r.PostForm.Get("sample_data")</pre></code></td></tr><tr><td>74</td><td><code><pre> description := r.PostForm.Get("description")</pre></code></td></tr><tr><td>75</td><td><code><pre> domain := r.PostForm.Get("domain")</pre></code></td></tr><tr><td>76</td><td><code><pre> email := r.PostForm.Get("email")</pre></code></td></tr><tr><td>77</td><td><code><pre></pre></code></td></tr><tr><td>78</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr><td>79</td><td><code><pre></pre></code></td></tr><tr><td>80</td><td><code><pre> config := &core.DbConfig{</pre></code></td></tr><tr><td>81</td><td><code><pre> DbConn: dbConn,</pre></code></td></tr><tr><td>82</td><td><code><pre> DbHost: dbHost,</pre></code></td></tr><tr><td>83</td><td><code><pre> DbUser: dbUser,</pre></code></td></tr><tr><td>84</td><td><code><pre> DbPass: dbPass,</pre></code></td></tr><tr><td>85</td><td><code><pre> DbData: dbDatabase,</pre></code></td></tr><tr><td>86</td><td><code><pre> DbPort: dbPort,</pre></code></td></tr><tr><td>87</td><td><code><pre> Project: project,</pre></code></td></tr><tr><td>88</td><td><code><pre> Description: description,</pre></code></td></tr><tr><td>89</td><td><code><pre> Domain: domain,</pre></code></td></tr><tr><td>90</td><td><code><pre> Username: username,</pre></code></td></tr><tr><td>91</td><td><code><pre> Password: password,</pre></code></td></tr><tr><td>92</td><td><code><pre> Email: email,</pre></code></td></tr><tr><td>93</td><td><code><pre> Error: nil,</pre></code></td></tr><tr><td>94</td><td><code><pre> Location: utils.Directory,</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr><tr><td>96</td><td><code><pre></pre></code></td></tr><tr><td>97</td><td><code><pre> core.Configs, err = config.Save()</pre></code></td></tr><tr><td>98</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> config.Error = err</pre></code></td></tr><tr class="miss">
|
||
|
|
||
|
<div class="funcname" id="fn_apiCreateUsersHandler">func apiCreateUsersHandler</div><div class="info"><a href="#s_fn_apiCreateUsersHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>297</td><td><code><pre>func apiCreateUsersHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>298</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>299</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>300</td><td><code><pre> return</pre></code></td></tr><tr><td>301</td><td><code><pre> }</pre></code></td></tr><tr><td>302</td><td><code><pre> var user *types.User</pre></code></td></tr><tr><td>303</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>304</td><td><code><pre> err := decoder.Decode(&user)</pre></code></td></tr><tr><td>305</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>306</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>307</td><td><code><pre> return</pre></code></td></tr><tr><td>308</td><td><code><pre> }</pre></code></td></tr><tr><td>309</td><td><code><pre> newUser := core.ReturnUser(user)</pre></code></td></tr><tr><td>310</td><td><code><pre> uId, err := newUser.Create()</pre></code></td></tr><tr><td>311</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>312</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>313</td><td><code><pre> return</pre></code></td></tr><tr><td>314</td><td><code><pre> }</pre></code></td></tr><tr><td>315</td><td><code><pre> output := apiResponse{</pre></code></td></tr><tr><td>316</td><td><code><pre> Object: "user",</pre></code></td></tr><tr><td>317</td><td><code><pre> Method: "create",</pre></code></td></tr><tr><td>318</td><td><code><pre> Id: uId,</pre></code></td></tr><tr><td>319</td><td><code><pre> Status: "success",</pre></code></td></tr><tr><td>320</td><td><code><pre> }</pre></code></td></tr><tr><td>321</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>322</td><td><code><pre> json.NewEncoder(w).Encode(output)</pre></code></td></tr><tr><td>323</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiCreateServiceHandler">func apiCreateServiceHandler</div><div class="info"><a href="#s_fn_apiCreateServiceHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>131</td><td><code><pre>func apiCreateServiceHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>132</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> return</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr><td>136</td><td><code><pre> var service *types.Service</pre></code></td></tr><tr><td>137</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>138</td><td><code><pre> err := decoder.Decode(&service)</pre></code></td></tr><tr><td>139</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> return</pre></code></td></tr><tr><td>142</td><td><code><pre> }</pre></code></td></tr><tr><td>143</td><td><code><pre> newService := core.ReturnService(service)</pre></code></td></tr><tr><td>144</td><td><code><pre> _, err = newService.Create(true)</pre></code></td></tr><tr><td>145</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> return</pre></code></td></tr><tr><td>148</td><td><code><pre> }</pre></code></td></tr><tr><td>149</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>150</td><td><code><pre> json.NewEncoder(w).Encode(service)</pre></code></td></tr><tr><td>151</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiServiceDeleteHandler">func apiServiceDeleteHandler</div><div class="info"><a href="#s_fn_apiServiceDeleteHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>179</td><td><code><pre>func apiServiceDeleteHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>180</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>181</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> return</pre></code></td></tr><tr><td>183</td><td><code><pre> }</pre></code></td></tr><tr><td>184</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>185</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>186</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>187</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>188</td><td><code><pre> return</pre></code></td></tr><tr><td>189</td><td><code><pre> }</pre></code></td></tr><tr><td>190</td><td><code><pre> err := service.Delete()</pre></code></td></tr><tr><td>191</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>192</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>193</td><td><code><pre> return</pre></code></td></tr><tr><td>194</td><td><code><pre> }</pre></code></td></tr><tr><td>195</td><td><code><pre> output := apiResponse{</pre></code></td></tr><tr><td>196</td><td><code><pre> Object: "service",</pre></code></td></tr><tr><td>197</td><td><code><pre> Method: "delete",</pre></code></td></tr><tr><td>198</td><td><code><pre> Id: service.Id,</pre></code></td></tr><tr><td>199</td><td><code><pre> Status: "success",</pre></code></td></tr><tr><td>200</td><td><code><pre> }</pre></code></td></tr><tr><td>201</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>202</td><td><code><pre> json.NewEncoder(w).Encode(output)</pre></code></td></tr><tr><td>203</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiUserDeleteHandler">func apiUserDeleteHandler</div><div class="info"><a href="#s_fn_apiUserDeleteHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>261</td><td><code><pre>func apiUserDeleteHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>262</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>263</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>264</td><td><code><pre> return</pre></code></td></tr><tr><td>265</td><td><code><pre> }</pre></code></td></tr><tr><td>266</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>267</td><td><code><pre> user, err := core.SelectUser(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>268</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>269</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>270</td><td><code><pre> return</pre></code></td></tr><tr><td>271</td><td><code><pre> }</pre></code></td></tr><tr><td>272</td><td><code><pre> err = user.Delete()</pre></code></td></tr><tr><td>273</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>274</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>275</td><td><code><pre> return</pre></code></td></tr><tr><td>276</td><td><code><pre> }</pre></code></td></tr><tr><td>277</td><td><code><pre> output := apiResponse{</pre></code></td></tr><tr><td>278</td><td><code><pre> Object: "user",</pre></code></td></tr><tr><td>279</td><td><code><pre> Method: "delete",</pre></code></td></tr><tr><td>280</td><td><code><pre> Id: user.Id,</pre></code></td></tr><tr><td>281</td><td><code><pre> Status: "success",</pre></code></td></tr><tr><td>282</td><td><code><pre> }</pre></code></td></tr><tr><td>283</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>284</td><td><code><pre> json.NewEncoder(w).Encode(output)</pre></code></td></tr><tr><td>285</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiServiceHandler">func apiServiceHandler</div><div class="info"><a href="#s_fn_apiServiceHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>115</td><td><code><pre>func apiServiceHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>116</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> return</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>121</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>122</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return</pre></code></td></tr><tr><td>125</td><td><code><pre> }</pre></code></td></tr><tr><td>126</td><td><code><pre></pre></code></td></tr><tr><td>127</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>128</td><td><code><pre> json.NewEncoder(w).Encode(service)</pre></code></td></tr><tr><td>129</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiUserHandler">func apiUserHandler</div><div class="info"><a href="#s_fn_apiUserHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>221</td><td><code><pre>func apiUserHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>222</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>223</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>224</td><td><code><pre> return</pre></code></td></tr><tr><td>225</td><td><code><pre> }</pre></code></td></tr><tr><td>226</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>227</td><td><code><pre> user, err := core.SelectUser(utils.StringInt(vars["id"]))</pre></code></td></tr><tr><td>228</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> return</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr><td>232</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr><td>233</td><td><code><pre> json.NewEncoder(w).Encode(user)</pre></code></td></tr><tr><td>234</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_dashboardHandler">func dashboardHandler</div><div class="info"><a href="#s_fn_dashboardHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>32</td><td><code><pre>func dashboardHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>33</td><td><code><pre> fmt.Println()</pre></code></td></tr><tr><td>34</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> err := core.ErrorResponse{}</pre></code></td></tr><tr class="miss"><td>36</td><td><code><pre> executeResponse(w, r, "login.html", err, nil)</pre></code></td></tr><tr><td>37</td><td><code><pre> } else {</pre></code></td></tr><tr><td>38</td><td><code><pre> executeResponse(w, r, "dashboard.html", core.CoreApp, nil)</pre></code></td></tr><tr><td>39</td><td><code><pre> }</pre></code></td></tr><tr><td>40</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_indexHandler">func indexHandler</div><div class="info"><a href="#s_fn_indexHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/index.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>29</td><td><code><pre>func indexHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>30</td><td><code><pre> if core.Configs == nil {</pre></code></td></tr><tr class="miss"><td>31</td><td><code><pre> http.Redirect(w, r, "/setup", http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>32</td><td><code><pre> return</pre></code></td></tr><tr><td>33</td><td><code><pre> }</pre></code></td></tr><tr><td>34</td><td><code><pre> executeResponse(w, r, "index.html", core.CoreApp, nil)</pre></code></td></tr><tr><td>35</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_isAPIAuthorized">func isAPIAuthorized</div><div class="info"><a href="#s_fn_isAPIAuthorized">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>325</td><td><code><pre>func isAPIAuthorized(r *http.Request) bool {</pre></code></td></tr><tr><td>326</td><td><code><pre> if os.Getenv("GO_ENV") == "test" {</pre></code></td></tr><tr><td>327</td><td><code><pre> return true</pre></code></td></tr><tr><td>328</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>329</td><td><code><pre> if IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>330</td><td><code><pre> return true</pre></code></td></tr><tr><td>331</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>332</td><td><code><pre> if isAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>333</td><td><code><pre> return true</pre></code></td></tr><tr><td>334</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>335</td><td><code><pre> return false</pre></code></td></tr><tr><td>336</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_testNotificationHandler">func testNotificationHandler</div><div class="info"><a href="#s_fn_testNotificationHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>200</td><td><code><pre>func testNotificationHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>201</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>202</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>203</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>204</td><td><code><pre> return</pre></code></td></tr><tr><td>205</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>206</td><td><code><pre> form := parseForm(r)</pre></code></td></tr><tr class="miss"><td>207</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>208</td><td><code><pre> method := vars["method"]</pre></code></td></tr><tr class="miss"><td>209</td><td><code><pre> enabled := form.Get("enable")</pre></code></td></tr><tr class="miss"><td>210</td><td><code><pre> host := form.Get("host")</pre></code></td></tr><tr class="miss"><td>211</td><td><code><pre> port := int(utils.StringInt(form.Get("port")))</pre></code></td></tr><tr class="miss"><td>212</td><td><code><pre> username := form.Get("username")</pre></code></td></tr><tr class="miss"><td>213</td><td><code><pre> password := form.Get("password")</pre></code></td></tr><tr class="miss"><td>214</td><td><code><pre> var1 := form.Get("var1")</pre></code></td></tr><tr class="miss"><td>215</td><td><code><pre> var2 := form.Get("var2")</pre></code></td></tr><tr class="miss"><td>216</td><td><code><pre> apiKey := form.Get("api_key")</pre></code></td></tr><tr class="miss"><td>217</td><td><code><pre> apiSecret := form.Get("api_secret")</pre></code></td></tr><tr class="miss"><td>218</td><td><code><pre> limits := int(utils.StringInt(form.Get("limits")))</pre></code></td></tr><tr><td>219</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>220</td><td><code><pre> fakeNotifer, notif, err := notifier.SelectNotifier(method)</pre></code></td></tr><tr class="miss"><td>221</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>222</td><td><code><pre> utils.Log(3, fmt.Sprintf("issue saving notifier %v: %v", method, err))</pre></code></td></tr><tr class="miss"><td>223</td><td><code><pre> executeResponse(w, r, "settings.html", core.CoreApp, "/settings")</pre></code></td></tr><tr class="miss"><td>224</td><td><code><pre> return</pre></code></td></tr><tr><td>225</td><td><code><pre> }</pre></code></td></tr><tr><td>226</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> notifer := *fakeNotifer</pre></code></td></tr><tr><td>228</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> if host != "" {</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> notifer.Host = host</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>232</td><td><code><pre> if port != 0 {</pre></code></td></tr><tr class="miss"><td>233</td><td><code><pre> notifer.Port = port</pre></code></td></tr><tr><td>234</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>235</td><td><code><pre> if username != "" {</pre></code></td></tr><tr class="miss"><td>236</td><td><code><pre> notifer.Username = username</pre></code></td></tr><tr><td>237</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>238</td><td><code><pre> if password != "" && password != "##########" {</pre></code></td></tr><tr class="miss"><td>239</td><td><code><pre> notifer.Password = password</pre></code></td></tr><tr><td>240</td><td><code><pre>
|
||
|
|
||
|
<div class="funcname" id="fn_DesktopInit">func DesktopInit</div><div class="info"><a href="#s_fn_DesktopInit">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/index.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>41</td><td><code><pre>func DesktopInit(ip string, port int) {</pre></code></td></tr><tr class="miss"><td>42</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>43</td><td><code><pre> exists := utils.FileExists(utils.Directory + "/statup.db")</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> if exists {</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> core.Configs, err = core.LoadConfig(utils.Directory)</pre></code></td></tr><tr class="miss"><td>46</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>47</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> return</pre></code></td></tr><tr><td>49</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> err = core.Configs.Connect(false, utils.Directory)</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> return</pre></code></td></tr><tr><td>54</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>55</td><td><code><pre> core.InitApp()</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> RunHTTPServer(ip, port)</pre></code></td></tr><tr><td>57</td><td><code><pre> }</pre></code></td></tr><tr><td>58</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> config := &core.DbConfig{</pre></code></td></tr><tr><td>60</td><td><code><pre> DbConn: "sqlite",</pre></code></td></tr><tr><td>61</td><td><code><pre> Project: "Statup",</pre></code></td></tr><tr><td>62</td><td><code><pre> Description: "Statup running as an App!",</pre></code></td></tr><tr><td>63</td><td><code><pre> Domain: "http://localhost",</pre></code></td></tr><tr><td>64</td><td><code><pre> Username: "admin",</pre></code></td></tr><tr><td>65</td><td><code><pre> Password: "admin",</pre></code></td></tr><tr><td>66</td><td><code><pre> Email: "user@email.com",</pre></code></td></tr><tr><td>67</td><td><code><pre> Error: nil,</pre></code></td></tr><tr><td>68</td><td><code><pre> Location: utils.Directory,</pre></code></td></tr><tr><td>69</td><td><code><pre> }</pre></code></td></tr><tr><td>70</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> config, err = config.Save()</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>74</td><td><code><pre> }</pre></code></td></tr><tr><td>75</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> config.DropDatabase()</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> config.CreateDatabase()</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> core.CoreApp = config.CreateCore()</pre></code></td></tr><tr><td>79</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>81</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> return</pre></code></td></tr><tr><td>83</td><td><code><pre> }</pre></code></td></tr><tr><td>84</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> core.Configs, err = core.LoadConfig(util
|
||
|
|
||
|
<div class="funcname" id="fn_renderServiceChartHandler">func renderServiceChartHandler</div><div class="info"><a href="#s_fn_renderServiceChartHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>32</td><td><code><pre>func renderServiceChartHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>34</td><td><code><pre> fields := parseGet(r)</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> w.Header().Set("Content-Type", "text/javascript")</pre></code></td></tr><tr class="miss"><td>36</td><td><code><pre> w.Header().Set("Cache-Control", "max-age=30")</pre></code></td></tr><tr><td>37</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> startField := fields.Get("start")</pre></code></td></tr><tr class="miss"><td>39</td><td><code><pre> endField := fields.Get("end")</pre></code></td></tr><tr><td>40</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>41</td><td><code><pre> end := now.EndOfDay().UTC()</pre></code></td></tr><tr class="miss"><td>42</td><td><code><pre> start := now.BeginningOfDay().UTC()</pre></code></td></tr><tr><td>43</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> if startField != "" {</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> start = time.Unix(utils.StringInt(startField), 0)</pre></code></td></tr><tr class="miss"><td>46</td><td><code><pre> start = now.New(start).BeginningOfDay().UTC()</pre></code></td></tr><tr><td>47</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> if endField != "" {</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> end = time.Unix(utils.StringInt(endField), 0)</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> end = now.New(end).EndOfDay().UTC()</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr><td>52</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> data := core.GraphDataRaw(service, start, end, "hour", "latency").ToString()</pre></code></td></tr><tr><td>55</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> out := struct {</pre></code></td></tr><tr><td>57</td><td><code><pre> Services []*core.Service</pre></code></td></tr><tr><td>58</td><td><code><pre> Data []string</pre></code></td></tr><tr><td>59</td><td><code><pre> }{[]*core.Service{service}, []string{data}}</pre></code></td></tr><tr><td>60</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> executeResponse(w, r, "charts.js", out, nil)</pre></code></td></tr><tr><td>62</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_exportHandler">func exportHandler</div><div class="info"><a href="#s_fn_exportHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>109</td><td><code><pre>func exportHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> w.WriteHeader(http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return</pre></code></td></tr><tr><td>113</td><td><code><pre> }</pre></code></td></tr><tr><td>114</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> var notifiers []*notifier.Notification</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> for _, v := range core.CoreApp.Notifications {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> notifier := v.(notifier.Notifier)</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> notifiers = append(notifiers, notifier.Select())</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>121</td><td><code><pre> data := exportData{core.CoreApp, notifiers}</pre></code></td></tr><tr><td>122</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> export, _ := json.Marshal(data)</pre></code></td></tr><tr><td>124</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>125</td><td><code><pre> mime := http.DetectContentType(export)</pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> fileSize := len(string(export))</pre></code></td></tr><tr><td>127</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> w.Header().Set("Content-Type", mime)</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> w.Header().Set("Content-Disposition", "attachment; filename=export.json")</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> w.Header().Set("Expires", "0")</pre></code></td></tr><tr class="miss"><td>131</td><td><code><pre> w.Header().Set("Content-Transfer-Encoding", "binary")</pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre> w.Header().Set("Content-Length", strconv.Itoa(fileSize))</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> w.Header().Set("Content-Control", "private, no-transform, no-store, must-revalidate")</pre></code></td></tr><tr><td>134</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>135</td><td><code><pre> http.ServeContent(w, r, "export.json", time.Now(), bytes.NewReader(export))</pre></code></td></tr><tr><td>136</td><td><code><pre></pre></code></td></tr><tr><td>137</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_checkinCreateUpdateHandler">func checkinCreateUpdateHandler</div><div class="info"><a href="#s_fn_checkinCreateUpdateHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>253</td><td><code><pre>func checkinCreateUpdateHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>254</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>255</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> return</pre></code></td></tr><tr><td>257</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>258</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>259</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr class="miss"><td>260</td><td><code><pre> api := r.PostForm.Get("api")</pre></code></td></tr><tr class="miss"><td>261</td><td><code><pre> checkin := core.SelectCheckin(api)</pre></code></td></tr><tr><td>262</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>263</td><td><code><pre> interval := utils.StringInt(r.PostForm.Get("interval"))</pre></code></td></tr><tr class="miss"><td>264</td><td><code><pre> grace := utils.StringInt(r.PostForm.Get("grace"))</pre></code></td></tr><tr class="miss"><td>265</td><td><code><pre> checkin.Interval = interval</pre></code></td></tr><tr class="miss"><td>266</td><td><code><pre> checkin.GracePeriod = grace</pre></code></td></tr><tr class="miss"><td>267</td><td><code><pre> checkin.Update()</pre></code></td></tr><tr class="miss"><td>268</td><td><code><pre> executeResponse(w, r, "service.html", service, fmt.Sprintf("/service/%v", service.Id))</pre></code></td></tr><tr><td>269</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiServicePingDataHandler">func apiServicePingDataHandler</div><div class="info"><a href="#s_fn_apiServicePingDataHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>98</td><td><code><pre>func apiServicePingDataHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> service := core.SelectService(utils.StringInt(vars["id"]))</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> return</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> fields := parseGet(r)</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> grouping := fields.Get("group")</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> startField := utils.StringInt(fields.Get("start"))</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> endField := utils.StringInt(fields.Get("end"))</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> obj := core.GraphDataRaw(service, time.Unix(startField, 0), time.Unix(endField, 0), grouping, "ping_time")</pre></code></td></tr><tr><td>110</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> w.Header().Set("Content-Type", "application/json")</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> json.NewEncoder(w).Encode(obj)</pre></code></td></tr><tr><td>113</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiRenewHandler">func apiRenewHandler</div><div class="info"><a href="#s_fn_apiRenewHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>54</td><td><code><pre>func apiRenewHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>55</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>57</td><td><code><pre> return</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> core.CoreApp.ApiKey = utils.NewSHA1Hash(40)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> core.CoreApp.ApiSecret = utils.NewSHA1Hash(40)</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> core.CoreApp, err = core.UpdateCore(core.CoreApp)</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>65</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> http.Redirect(w, r, "/settings", http.StatusSeeOther)</pre></code></td></tr><tr><td>67</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_pluginSavedHandler">func pluginSavedHandler</div><div class="info"><a href="#s_fn_pluginSavedHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/plugins.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>29</td><td><code><pre>func pluginSavedHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>30</td><td><code><pre> auth := IsAuthenticated(r)</pre></code></td></tr><tr class="miss"><td>31</td><td><code><pre> if !auth {</pre></code></td></tr><tr class="miss"><td>32</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> return</pre></code></td></tr><tr><td>34</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>36</td><td><code><pre> //vars := mux.Vars(router)</pre></code></td></tr><tr><td>37</td><td><code><pre> //plug := SelectPlugin(vars["name"])</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> data := make(map[string]string)</pre></code></td></tr><tr class="miss"><td>39</td><td><code><pre> for k, v := range r.PostForm {</pre></code></td></tr><tr class="miss"><td>40</td><td><code><pre> data[k] = strings.Join(v, "")</pre></code></td></tr><tr><td>41</td><td><code><pre> }</pre></code></td></tr><tr><td>42</td><td><code><pre> //plug.OnSave(structs.Map(data))</pre></code></td></tr><tr class="miss"><td>43</td><td><code><pre> http.Redirect(w, r, "/settings", http.StatusSeeOther)</pre></code></td></tr><tr><td>44</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@111:11">func @111:11</div><div class="info"><a href="#s_fn_@111:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>111</td><td><code><pre>func(g interface{}) []string {</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> fooType := reflect.TypeOf(g)</pre></code></td></tr><tr class="miss"><td>113</td><td><code><pre> var methods []string</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> methods = append(methods, fooType.String())</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> for i := 0; i < fooType.NumMethod(); i++ {</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> method := fooType.Method(i)</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> fmt.Println(method.Name)</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> methods = append(methods, method.Name)</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return methods</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_checkinUpdateHandler">func checkinUpdateHandler</div><div class="info"><a href="#s_fn_checkinUpdateHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>271</td><td><code><pre>func checkinUpdateHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>272</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>273</td><td><code><pre> checkin := core.SelectCheckin(vars["id"])</pre></code></td></tr><tr class="miss"><td>274</td><td><code><pre> ip, _, _ := net.SplitHostPort(r.RemoteAddr)</pre></code></td></tr><tr class="miss"><td>275</td><td><code><pre> checkinHit := core.ReturnCheckinHit(&types.CheckinHit{</pre></code></td></tr><tr><td>276</td><td><code><pre> Checkin: checkin.Id,</pre></code></td></tr><tr><td>277</td><td><code><pre> From: ip,</pre></code></td></tr><tr><td>278</td><td><code><pre> CreatedAt: time.Now().UTC(),</pre></code></td></tr><tr><td>279</td><td><code><pre> })</pre></code></td></tr><tr class="miss"><td>280</td><td><code><pre> checkinHit.Create()</pre></code></td></tr><tr class="miss"><td>281</td><td><code><pre> w.Write([]byte("ok"))</pre></code></td></tr><tr class="miss"><td>282</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr><td>283</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_apiCheckinHandler">func apiCheckinHandler</div><div class="info"><a href="#s_fn_apiCheckinHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>69</td><td><code><pre>func apiCheckinHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> return</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> checkin := core.SelectCheckin(vars["api"])</pre></code></td></tr><tr><td>76</td><td><code><pre> //checkin.Receivehit()</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> json.NewEncoder(w).Encode(checkin)</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_pluginsDownloadHandler">func pluginsDownloadHandler</div><div class="info"><a href="#s_fn_pluginsDownloadHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/plugins.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>46</td><td><code><pre>func pluginsDownloadHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>47</td><td><code><pre> auth := IsAuthenticated(r)</pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> if !auth {</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> http.Redirect(w, r, "/", http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> return</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr><td>52</td><td><code><pre> //vars := mux.Vars(router)</pre></code></td></tr><tr><td>53</td><td><code><pre> //name := vars["name"]</pre></code></td></tr><tr><td>54</td><td><code><pre> //DownloadPlugin(name)</pre></code></td></tr><tr><td>55</td><td><code><pre> //core.LoadConfig(utils.Directory)</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> http.Redirect(w, r, "/plugins", http.StatusSeeOther)</pre></code></td></tr><tr><td>57</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@144:15">func @144:15</div><div class="info"><a href="#s_fn_@144:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>144</td><td><code><pre>func(t time.Duration) string {</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> duration, _ := time.ParseDuration(fmt.Sprintf("%vs", t.Seconds()))</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> return utils.FormatDuration(duration)</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_parseId">func parseId</div><div class="info"><a href="#s_fn_parseId">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>122</td><td><code><pre>func parseId(r *http.Request) int64 {</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return utils.StringInt(vars["id"])</pre></code></td></tr><tr><td>125</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@122:13">func @122:13</div><div class="info"><a href="#s_fn_@122:13">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>122</td><td><code><pre>func(g interface{}) template.HTML {</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> data, _ := json.Marshal(g)</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return template.HTML(string(data))</pre></code></td></tr><tr><td>125</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@229:11">func @229:11</div><div class="info"><a href="#s_fn_@229:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>229</td><td><code><pre>func(html string) template.HTML {</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@132:17">func @132:17</div><div class="info"><a href="#s_fn_@132:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>132</td><td><code><pre>func() string {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> return ""</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_setupResponseError">func setupResponseError</div><div class="info"><a href="#s_fn_setupResponseError">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/setup.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>152</td><td><code><pre>func setupResponseError(w http.ResponseWriter, r *http.Request, a interface{}) {</pre></code></td></tr><tr class="miss"><td>153</td><td><code><pre> executeResponse(w, r, "setup.html", a, nil)</pre></code></td></tr><tr><td>154</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@148:13">func @148:13</div><div class="info"><a href="#s_fn_@148:13">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>148</td><td><code><pre>func(t time.Time) int64 {</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> return t.UTC().Unix()</pre></code></td></tr><tr><td>150</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@90:9">func @90:9</div><div class="info"><a href="#s_fn_@90:9">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>90</td><td><code><pre>func(html interface{}) template.JS {</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> return template.JS(utils.ToString(html))</pre></code></td></tr><tr><td>92</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@232:15">func @232:15</div><div class="info"><a href="#s_fn_@232:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>232</td><td><code><pre>func() []types.ServiceInterface {</pre></code></td></tr><tr class="miss"><td>233</td><td><code><pre> return core.CoreApp.Services</pre></code></td></tr><tr><td>234</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_trayHandler">func trayHandler</div><div class="info"><a href="#s_fn_trayHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/index.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>37</td><td><code><pre>func trayHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> executeResponse(w, r, "tray.html", core.CoreApp, nil)</pre></code></td></tr><tr><td>39</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@141:10">func @141:10</div><div class="info"><a href="#s_fn_@141:10">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>141</td><td><code><pre>func(t time.Time) string {</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> return utils.Timestamp(t).Ago()</pre></code></td></tr><tr><td>143</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<!-- Can be parsed by external script
|
||
|
PACKAGE:github.com/hunterlong/statup/handlers DONE:64.61
|
||
|
-->
|
||
|
|
||
|
<div id="pkg_github.com/hunterlong/statup/notifiers" class="funcname">Package Overview: github.com/hunterlong/statup/notifiers <span class="packageTotal">7.14%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/notifiers</code> package. It
|
||
|
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/notifiers | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
|
||
|
<tr id="s_fn_slack.Select"><td><code><a href="#fn_slack.Select">slack.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_lineNotifier.Select"><td><code><a href="#fn_lineNotifier.Select">lineNotifier.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_discord.Select"><td><code><a href="#fn_discord.Select">discord.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_webhooker.Select"><td><code><a href="#fn_webhooker.Select">webhooker.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_email.Select"><td><code><a href="#fn_email.Select">email.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_twilio.Select"><td><code><a href="#fn_twilio.Select">twilio.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_twilio.Send"><td><code><a href="#fn_twilio.Send">twilio.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/23</code></td></tr>
|
||
|
<tr id="s_fn_webhooker.run"><td><code><a href="#fn_webhooker.run">webhooker.run(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/21</code></td></tr>
|
||
|
<tr id="s_fn_discord.OnTest"><td><code><a href="#fn_discord.OnTest">discord.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/20</code></td></tr>
|
||
|
<tr id="s_fn_email.dialSend"><td><code><a href="#fn_email.dialSend">email.dialSend(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/12</code></td></tr>
|
||
|
<tr id="s_fn_lineNotifier.Send"><td><code><a href="#fn_lineNotifier.Send">lineNotifier.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/12</code></td></tr>
|
||
|
<tr id="s_fn_webhooker.OnTest"><td><code><a href="#fn_webhooker.OnTest">webhooker.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
|
||
|
<tr id="s_fn_slack.OnTest"><td><code><a href="#fn_slack.OnTest">slack.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
|
||
|
<tr id="s_fn_emailTemplate"><td><code><a href="#fn_emailTemplate">emailTemplate(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
|
||
|
<tr id="s_fn_discord.Send"><td><code><a href="#fn_discord.Send">discord.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
|
||
|
<tr id="s_fn_parseSlackMessage"><td><code><a href="#fn_parseSlackMessage">parseSlackMessage(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
|
||
|
<tr id="s_fn_email.OnTest"><td><code><a href="#fn_email.OnTest">email.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
|
||
|
<tr id="s_fn_slack.Send"><td><code><a href="#fn_slack.Send">slack.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
|
||
|
<tr id="s_fn_replaceBodyText"><td><code><a href="#fn_replaceBodyText">replaceBodyText(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
|
||
|
<tr id="s_fn_email.Send"><td><code><a href="#fn_email.Send">email.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
|
||
|
<tr id="s_fn_twilioSuccess"><td><code><a href="#fn_twilioSuccess">twilioSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_lineNotifier.OnSuccess"><td><code><a href="#fn_lineNotifier.OnSuccess">lineNotifier.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_email.OnSuccess"><td><code><a href="#fn_email.OnSuccess">email.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_webhooker.OnSuccess"><td><code><a href="#fn_webhooker.OnSuccess">webhooker.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_slack.OnSuccess"><td><code><a href="#fn_slack.OnSuccess">slack.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_twilio.OnSuccess"><td><code><a href="#fn_twilio.OnSuccess">twilio.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_webhooker.Send"><td><code><a href="#fn_webhooker.Send">webhooker.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_discord.OnSuccess"><td><code><a href="#fn_discord.OnSuccess">discord.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_email.OnFailure"><td><code><a href="#fn_email.OnFailure">email.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_slack.OnSave"><td><code><a href="#fn_slack.OnSave">slack.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_slack.OnFailure"><td><code><a href="#fn_slack.OnFailure">slack.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_webhooker.OnFailure"><td><code><a href="#fn_webhooker.OnFailure">webhooker.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_lineNotifier.OnFailure"><td><code><a href="#fn_lineNotifier.OnFailure">lineNotifier.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_twilioError"><td><code><a href="#fn_twilioError">twilioError(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_twilio.OnFailure"><td><code><a href="#fn_twilio.OnFailure">twilio.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_discord.OnSave"><td><code><a href="#fn_discord.OnSave">discord.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_discord.OnFailure"><td><code><a href="#fn_discord.OnFailure">discord.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
|
||
|
<tr id="s_fn_twilio.OnTest"><td><code><a href="#fn_twilio.OnTest">twilio.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_email.OnSave"><td><code><a href="#fn_email.OnSave">email.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_lineNotifier.OnSave"><td><code><a href="#fn_lineNotifier.OnSave">lineNotifier.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_emailSource"><td><code><a href="#fn_emailSource">emailSource(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_twilio.OnSave"><td><code><a href="#fn_twilio.OnSave">twilio.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
|
||
|
<tr id="s_fn_webhooker.OnSave"><td><code><a href="#fn_webhooker.OnSave">webhooker.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr><td colspan="2"><code>github.com/hunterlong/statup/notifiers</code></td><td class="percent"><code>7.14%</code></td><td class="linecount"><code>18/252</code></td></tr>
|
||
|
</table>
|
||
|
|
||
|
<div class="funcname" id="fn_slack.Select">func slack.Select</div><div class="info"><a href="#s_fn_slack.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>97</td><td><code><pre>func (u *slack) Select() *notifier.Notification {</pre></code></td></tr><tr><td>98</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>99</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_lineNotifier.Select">func lineNotifier.Select</div><div class="info"><a href="#s_fn_lineNotifier.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>75</td><td><code><pre>func (u *lineNotifier) Select() *notifier.Notification {</pre></code></td></tr><tr><td>76</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>77</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_discord.Select">func discord.Select</div><div class="info"><a href="#s_fn_discord.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>71</td><td><code><pre>func (u *discord) Select() *notifier.Notification {</pre></code></td></tr><tr><td>72</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_webhooker.Select">func webhooker.Select</div><div class="info"><a href="#s_fn_webhooker.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>97</td><td><code><pre>func (w *webhooker) Select() *notifier.Notification {</pre></code></td></tr><tr><td>98</td><td><code><pre> return w.Notification</pre></code></td></tr><tr><td>99</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_email.Select">func email.Select</div><div class="info"><a href="#s_fn_email.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>209</td><td><code><pre>func (u *email) Select() *notifier.Notification {</pre></code></td></tr><tr><td>210</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>211</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_twilio.Select">func twilio.Select</div><div class="info"><a href="#s_fn_twilio.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>78</td><td><code><pre>func (u *twilio) Select() *notifier.Notification {</pre></code></td></tr><tr><td>79</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>80</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>81</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>82</td><td><code><pre> err := notifier.AddNotifier(webhook)</pre></code></td></tr><tr><td>83</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>85</td><td><code><pre> }</pre></code></td></tr><tr><td>86</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>51</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>52</td><td><code><pre> err := notifier.AddNotifier(discorder)</pre></code></td></tr><tr><td>53</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr><tr><td>56</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>153</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>154</td><td><code><pre> err := notifier.AddNotifier(emailer)</pre></code></td></tr><tr><td>155</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>157</td><td><code><pre> }</pre></code></td></tr><tr><td>158</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>71</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>72</td><td><code><pre> err := notifier.AddNotifier(twilioNotifier)</pre></code></td></tr><tr><td>73</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>75</td><td><code><pre> }</pre></code></td></tr><tr><td>76</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>51</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>52</td><td><code><pre> err := notifier.AddNotifier(lineNotify)</pre></code></td></tr><tr><td>53</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr><tr><td>56</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>77</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>78</td><td><code><pre> err := notifier.AddNotifier(slacker)</pre></code></td></tr><tr><td>79</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr><tr><td>82</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_twilio.Send">func twilio.Send</div><div class="info"><a href="#s_fn_twilio.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>83</td><td><code><pre>func (u *twilio) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> message := msg.(string)</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> twilioUrl := fmt.Sprintf("https://api.twilio.com/2010-04-01/Accounts/%v/Messages.json", u.GetValue("api_key"))</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> client := &http.Client{}</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> v := url.Values{}</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> v.Set("To", "+"+u.Var1)</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> v.Set("From", "+"+u.Var2)</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> v.Set("Body", message)</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> rb := *strings.NewReader(v.Encode())</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> req, err := http.NewRequest("POST", twilioUrl, &rb)</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> req.SetBasicAuth(u.ApiKey, u.ApiSecret)</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> req.Header.Add("Accept", "application/json")</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> req.Header.Add("Content-Type", "application/x-www-form-urlencoded")</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre> res, err := client.Do(req)</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>98</td><td><code><pre> return err</pre></code></td></tr><tr><td>99</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> defer res.Body.Close()</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> contents, _ := ioutil.ReadAll(res.Body)</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> success, _ := twilioSuccess(contents)</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> if !success {</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> errorOut := twilioError(contents)</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> out := fmt.Sprintf("Error code %v - %v", errorOut.Code, errorOut.Message)</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> return errors.New(out)</pre></code></td></tr><tr><td>107</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> return nil</pre></code></td></tr><tr><td>109</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_webhooker.run">func webhooker.run</div><div class="info"><a href="#s_fn_webhooker.run">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>113</td><td><code><pre>func (w *webhooker) run(body string) (*http.Response, error) {</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> utils.Log(1, fmt.Sprintf("sending body: '%v' to %v as a %v request", body, w.Host, w.Var1))</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> client := new(http.Client)</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> client.Timeout = time.Duration(10 * time.Second)</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> var buf *bytes.Buffer</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> buf = bytes.NewBuffer(nil)</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> if w.Var2 != "" {</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> buf = bytes.NewBuffer([]byte(w.Var2))</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> req, err := http.NewRequest(w.Var1, w.Host, buf)</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>125</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> if w.ApiSecret != "" {</pre></code></td></tr><tr class="miss"><td>127</td><td><code><pre> splitArray := strings.Split(w.ApiSecret, ",")</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> for _, a := range splitArray {</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> split := strings.Split(a, "=")</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> req.Header.Add(split[0], split[1])</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr><tr><td>132</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> if w.ApiSecret != "" {</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> req.Header.Add("Content-Type", w.ApiSecret)</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> resp, err := client.Do(req)</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>138</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>139</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> return resp, err</pre></code></td></tr><tr><td>141</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_discord.OnTest">func discord.OnTest</div><div class="info"><a href="#s_fn_discord.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>99</td><td><code><pre>func (u *discord) OnTest() error {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> outError := errors.New("Incorrect discord URL, please confirm URL is correct")</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> message := `{"content": "Testing the discord notifier"}`</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> req, _ := http.NewRequest("POST", discorder.Host, bytes.NewBuffer([]byte(message)))</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> req.Header.Set("Content-Type", "application/json")</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> client := &http.Client{}</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> resp, err := client.Do(req)</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> return err</pre></code></td></tr><tr><td>108</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> defer resp.Body.Close()</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> contents, _ := ioutil.ReadAll(resp.Body)</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> if string(contents) == "" {</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return nil</pre></code></td></tr><tr><td>113</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> var d discordTestJson</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> err = json.Unmarshal(contents, &d)</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> return outError</pre></code></td></tr><tr><td>118</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> if d.Code == 0 {</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return outError</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> fmt.Println("discord: ", string(contents))</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> return nil</pre></code></td></tr><tr><td>124</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_email.dialSend">func email.dialSend</div><div class="info"><a href="#s_fn_email.dialSend">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>232</td><td><code><pre>func (u *email) dialSend(email *emailOutgoing) error {</pre></code></td></tr><tr class="miss"><td>233</td><td><code><pre> mailer = mail.NewDialer(emailer.Host, emailer.Port, emailer.Username, emailer.Password)</pre></code></td></tr><tr class="miss"><td>234</td><td><code><pre> mailer.TLSConfig = &tls.Config{InsecureSkipVerify: true}</pre></code></td></tr><tr class="miss"><td>235</td><td><code><pre> emailSource(email)</pre></code></td></tr><tr class="miss"><td>236</td><td><code><pre> m := mail.NewMessage()</pre></code></td></tr><tr class="miss"><td>237</td><td><code><pre> m.SetHeader("From", email.From)</pre></code></td></tr><tr class="miss"><td>238</td><td><code><pre> m.SetHeader("To", email.To)</pre></code></td></tr><tr class="miss"><td>239</td><td><code><pre> m.SetHeader("Subject", email.Subject)</pre></code></td></tr><tr class="miss"><td>240</td><td><code><pre> m.SetBody("text/html", email.Source)</pre></code></td></tr><tr class="miss"><td>241</td><td><code><pre> if err := mailer.DialAndSend(m); err != nil {</pre></code></td></tr><tr class="miss"><td>242</td><td><code><pre> utils.Log(3, fmt.Sprintf("email '%v' sent to: %v using the %v template (size: %v) %v", email.Subject, email.To, email.Template, len([]byte(email.Source)), err))</pre></code></td></tr><tr class="miss"><td>243</td><td><code><pre> return err</pre></code></td></tr><tr><td>244</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>245</td><td><code><pre> return nil</pre></code></td></tr><tr><td>246</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_lineNotifier.Send">func lineNotifier.Send</div><div class="info"><a href="#s_fn_lineNotifier.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>59</td><td><code><pre>func (u *lineNotifier) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> message := msg.(string)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> client := new(http.Client)</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> v := url.Values{}</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> v.Set("message", message)</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> req, err := http.NewRequest("POST", "https://notify-api.line.me/api/notify", strings.NewReader(v.Encode()))</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> req.Header.Add("Authorization", fmt.Sprintf("Bearer %v", u.GetValue("api_secret")))</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> req.Header.Add("Accept", "application/json")</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> req.Header.Add("Content-Type", "application/x-www-form-urlencoded")</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> _, err = client.Do(req)</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> return err</pre></code></td></tr><tr><td>71</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> return nil</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_webhooker.OnTest">func webhooker.OnTest</div><div class="info"><a href="#s_fn_webhooker.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>143</td><td><code><pre>func (w *webhooker) OnTest() error {</pre></code></td></tr><tr class="miss"><td>144</td><td><code><pre> service := &types.Service{</pre></code></td></tr><tr><td>145</td><td><code><pre> Id: 1,</pre></code></td></tr><tr><td>146</td><td><code><pre> Name: "Interpol - All The Rage Back Home",</pre></code></td></tr><tr><td>147</td><td><code><pre> Domain: "https://www.youtube.com/watch?v=-u6DvRyyKGU",</pre></code></td></tr><tr><td>148</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>149</td><td><code><pre> Interval: 30,</pre></code></td></tr><tr><td>150</td><td><code><pre> Type: "http",</pre></code></td></tr><tr><td>151</td><td><code><pre> Method: "GET",</pre></code></td></tr><tr><td>152</td><td><code><pre> Timeout: 20,</pre></code></td></tr><tr><td>153</td><td><code><pre> LastStatusCode: 404,</pre></code></td></tr><tr><td>154</td><td><code><pre> Expected: "test example",</pre></code></td></tr><tr><td>155</td><td><code><pre> LastResponse: "<html>this is an example response</html>",</pre></code></td></tr><tr><td>156</td><td><code><pre> CreatedAt: time.Now().Add(-24 * time.Hour),</pre></code></td></tr><tr><td>157</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>158</td><td><code><pre> body := replaceBodyText(w.Var2, service, nil)</pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> resp, err := w.run(body)</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> return err</pre></code></td></tr><tr><td>162</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>163</td><td><code><pre> defer resp.Body.Close()</pre></code></td></tr><tr class="miss"><td>164</td><td><code><pre> content, err := ioutil.ReadAll(resp.Body)</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> utils.Log(1, fmt.Sprintf("webhook notifier received: '%v'", string(content)))</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> return err</pre></code></td></tr><tr><td>167</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_slack.OnTest">func slack.OnTest</div><div class="info"><a href="#s_fn_slack.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>101</td><td><code><pre>func (u *slack) OnTest() error {</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> client := new(http.Client)</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> res, err := client.Post(u.Host, "application/json", bytes.NewBuffer([]byte(`{"text":"testing message"}`)))</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> return err</pre></code></td></tr><tr><td>106</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> defer res.Body.Close()</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> contents, _ := ioutil.ReadAll(res.Body)</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> if string(contents) != "ok" {</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> return errors.New("The slack response was incorrect, check the URL")</pre></code></td></tr><tr><td>111</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return err</pre></code></td></tr><tr><td>113</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_emailTemplate">func emailTemplate</div><div class="info"><a href="#s_fn_emailTemplate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>253</td><td><code><pre>func emailTemplate(contents string, data interface{}) string {</pre></code></td></tr><tr class="miss"><td>254</td><td><code><pre> t := template.New("email")</pre></code></td></tr><tr class="miss"><td>255</td><td><code><pre> t, err := t.Parse(contents)</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>257</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>258</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>259</td><td><code><pre> var tpl bytes.Buffer</pre></code></td></tr><tr class="miss"><td>260</td><td><code><pre> if err := t.Execute(&tpl, data); err != nil {</pre></code></td></tr><tr class="miss"><td>261</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr><td>262</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>263</td><td><code><pre> result := tpl.String()</pre></code></td></tr><tr class="miss"><td>264</td><td><code><pre> return result</pre></code></td></tr><tr><td>265</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_discord.Send">func discord.Send</div><div class="info"><a href="#s_fn_discord.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>59</td><td><code><pre>func (u *discord) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> message := msg.(string)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> req, _ := http.NewRequest("POST", discorder.GetValue("host"), bytes.NewBuffer([]byte(message)))</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> req.Header.Set("Content-Type", "application/json")</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> client := &http.Client{}</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> resp, err := client.Do(req)</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> return err</pre></code></td></tr><tr><td>67</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> return resp.Body.Close()</pre></code></td></tr><tr><td>69</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_parseSlackMessage">func parseSlackMessage</div><div class="info"><a href="#s_fn_parseSlackMessage">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>59</td><td><code><pre>func parseSlackMessage(temp string, data interface{}) error {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> buf := new(bytes.Buffer)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> slackTemp, _ := template.New("slack").Parse(temp)</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> err := slackTemp.Execute(buf, data)</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> return err</pre></code></td></tr><tr><td>65</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> slacker.AddQueue(buf.String())</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> return nil</pre></code></td></tr><tr><td>68</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_email.OnTest">func email.OnTest</div><div class="info"><a href="#s_fn_email.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>221</td><td><code><pre>func (u *email) OnTest() error {</pre></code></td></tr><tr class="miss"><td>222</td><td><code><pre> host := fmt.Sprintf("%v:%v", u.Host, u.Port)</pre></code></td></tr><tr class="miss"><td>223</td><td><code><pre> dial, err := smtp.Dial(host)</pre></code></td></tr><tr class="miss"><td>224</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>225</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>226</td><td><code><pre> return err</pre></code></td></tr><tr><td>227</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>228</td><td><code><pre> auth := smtp.PlainAuth("", u.Username, u.Password, host)</pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> return dial.Auth(auth)</pre></code></td></tr><tr><td>230</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_slack.Send">func slack.Send</div><div class="info"><a href="#s_fn_slack.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>85</td><td><code><pre>func (u *slack) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> message := msg.(string)</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> client := new(http.Client)</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> res, err := client.Post(u.Host, "application/json", bytes.NewBuffer([]byte(message)))</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> return err</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> defer res.Body.Close()</pre></code></td></tr><tr><td>93</td><td><code><pre> //contents, _ := ioutil.ReadAll(res.Body)</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> return nil</pre></code></td></tr><tr><td>95</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_replaceBodyText">func replaceBodyText</div><div class="info"><a href="#s_fn_replaceBodyText">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>101</td><td><code><pre>func replaceBodyText(body string, s *types.Service, f *types.Failure) string {</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> if s != nil {</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> body = strings.Replace(body, "%service.Name", s.Name, -1)</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> body = strings.Replace(body, "%service.Id", utils.ToString(s.Id), -1)</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> body = strings.Replace(body, "%service.Online", utils.ToString(s.Online), -1)</pre></code></td></tr><tr><td>106</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> if f != nil {</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> body = strings.Replace(body, "%failure.Issue", f.Issue, -1)</pre></code></td></tr><tr><td>109</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> return body</pre></code></td></tr><tr><td>111</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_email.Send">func email.Send</div><div class="info"><a href="#s_fn_email.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>161</td><td><code><pre>func (u *email) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> email := msg.(*emailOutgoing)</pre></code></td></tr><tr class="miss"><td>163</td><td><code><pre> err := u.dialSend(email)</pre></code></td></tr><tr class="miss"><td>164</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> utils.Log(3, fmt.Sprintf("email Notifier could not send email: %v", err))</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> return err</pre></code></td></tr><tr><td>167</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> return nil</pre></code></td></tr><tr><td>169</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_twilioSuccess">func twilioSuccess</div><div class="info"><a href="#s_fn_twilioSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>142</td><td><code><pre>func twilioSuccess(res []byte) (bool, twilioResponse) {</pre></code></td></tr><tr class="miss"><td>143</td><td><code><pre> var obj twilioResponse</pre></code></td></tr><tr class="miss"><td>144</td><td><code><pre> json.Unmarshal(res, &obj)</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> if obj.Status == "queued" {</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> return true, obj</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>148</td><td><code><pre> return false, obj</pre></code></td></tr><tr><td>149</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_lineNotifier.OnSuccess">func lineNotifier.OnSuccess</div><div class="info"><a href="#s_fn_lineNotifier.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>87</td><td><code><pre>func (u *lineNotifier) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> msg := fmt.Sprintf("Your service '%v' is back online!", s.Name)</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>93</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_email.OnSuccess">func email.OnSuccess</div><div class="info"><a href="#s_fn_email.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>195</td><td><code><pre>func (u *email) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>196</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>197</td><td><code><pre> email := &emailOutgoing{</pre></code></td></tr><tr><td>198</td><td><code><pre> To: emailer.GetValue("var2"),</pre></code></td></tr><tr><td>199</td><td><code><pre> Subject: fmt.Sprintf("Service %v is Back Online", s.Name),</pre></code></td></tr><tr><td>200</td><td><code><pre> Template: mainEmailTemplate,</pre></code></td></tr><tr><td>201</td><td><code><pre> Data: interface{}(s),</pre></code></td></tr><tr><td>202</td><td><code><pre> From: emailer.GetValue("var1"),</pre></code></td></tr><tr><td>203</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>204</td><td><code><pre> u.AddQueue(email)</pre></code></td></tr><tr><td>205</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>206</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>207</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_webhooker.OnSuccess">func webhooker.OnSuccess</div><div class="info"><a href="#s_fn_webhooker.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>177</td><td><code><pre>func (w *webhooker) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>178</td><td><code><pre> if !w.Online {</pre></code></td></tr><tr class="miss"><td>179</td><td><code><pre> msg := replaceBodyText(w.Var2, s, nil)</pre></code></td></tr><tr class="miss"><td>180</td><td><code><pre> webhook.AddQueue(msg)</pre></code></td></tr><tr><td>181</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> w.Online = true</pre></code></td></tr><tr><td>183</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_slack.OnSuccess">func slack.OnSuccess</div><div class="info"><a href="#s_fn_slack.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>127</td><td><code><pre>func (u *slack) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> message := slackMessage{</pre></code></td></tr><tr><td>130</td><td><code><pre> Service: s,</pre></code></td></tr><tr><td>131</td><td><code><pre> Template: successTemplate,</pre></code></td></tr><tr><td>132</td><td><code><pre> Time: time.Now().Unix(),</pre></code></td></tr><tr><td>133</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> parseSlackMessage(successTemplate, message)</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>137</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_twilio.OnSuccess">func twilio.OnSuccess</div><div class="info"><a href="#s_fn_twilio.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>119</td><td><code><pre>func (u *twilio) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>121</td><td><code><pre> msg := fmt.Sprintf("Your service '%v' is back online!", s.Name)</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr><td>123</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>125</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_webhooker.Send">func webhooker.Send</div><div class="info"><a href="#s_fn_webhooker.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>89</td><td><code><pre>func (w *webhooker) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> resp, err := w.run(msg.(string))</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> if err == nil {</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> resp.Body.Close()</pre></code></td></tr><tr><td>93</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> return err</pre></code></td></tr><tr><td>95</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_discord.OnSuccess">func discord.OnSuccess</div><div class="info"><a href="#s_fn_discord.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>83</td><td><code><pre>func (u *discord) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> msg := fmt.Sprintf(`{"content": "Your service '%v' is back online!"}`, s.Name)</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr><td>87</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>89</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_email.OnFailure">func email.OnFailure</div><div class="info"><a href="#s_fn_email.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>182</td><td><code><pre>func (u *email) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> email := &emailOutgoing{</pre></code></td></tr><tr><td>184</td><td><code><pre> To: emailer.GetValue("var2"),</pre></code></td></tr><tr><td>185</td><td><code><pre> Subject: fmt.Sprintf("Service %v is Failing", s.Name),</pre></code></td></tr><tr><td>186</td><td><code><pre> Template: mainEmailTemplate,</pre></code></td></tr><tr><td>187</td><td><code><pre> Data: interface{}(s),</pre></code></td></tr><tr><td>188</td><td><code><pre> From: emailer.GetValue("var1"),</pre></code></td></tr><tr><td>189</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>190</td><td><code><pre> u.AddQueue(email)</pre></code></td></tr><tr class="miss"><td>191</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>192</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_slack.OnSave">func slack.OnSave</div><div class="info"><a href="#s_fn_slack.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>140</td><td><code><pre>func (u *slack) OnSave() error {</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> message := fmt.Sprintf("Notification %v is receiving updated information.", u.Method)</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> u.AddQueue(message)</pre></code></td></tr><tr class="miss"><td>143</td><td><code><pre> return nil</pre></code></td></tr><tr><td>144</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_slack.OnFailure">func slack.OnFailure</div><div class="info"><a href="#s_fn_slack.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>116</td><td><code><pre>func (u *slack) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> message := slackMessage{</pre></code></td></tr><tr><td>118</td><td><code><pre> Service: s,</pre></code></td></tr><tr><td>119</td><td><code><pre> Template: failingTemplate,</pre></code></td></tr><tr><td>120</td><td><code><pre> Time: time.Now().Unix(),</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> parseSlackMessage(failingTemplate, message)</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>124</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_webhooker.OnFailure">func webhooker.OnFailure</div><div class="info"><a href="#s_fn_webhooker.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>170</td><td><code><pre>func (w *webhooker) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>171</td><td><code><pre> msg := replaceBodyText(w.Var2, s, f)</pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> webhook.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>173</td><td><code><pre> w.Online = false</pre></code></td></tr><tr><td>174</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_lineNotifier.OnFailure">func lineNotifier.OnFailure</div><div class="info"><a href="#s_fn_lineNotifier.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>80</td><td><code><pre>func (u *lineNotifier) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>81</td><td><code><pre> msg := fmt.Sprintf("Your service '%v' is currently offline!", s.Name)</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>84</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_twilioError">func twilioError</div><div class="info"><a href="#s_fn_twilioError">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>151</td><td><code><pre>func twilioError(res []byte) twilioErrorObj {</pre></code></td></tr><tr class="miss"><td>152</td><td><code><pre> var obj twilioErrorObj</pre></code></td></tr><tr class="miss"><td>153</td><td><code><pre> json.Unmarshal(res, &obj)</pre></code></td></tr><tr class="miss"><td>154</td><td><code><pre> return obj</pre></code></td></tr><tr><td>155</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_twilio.OnFailure">func twilio.OnFailure</div><div class="info"><a href="#s_fn_twilio.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>112</td><td><code><pre>func (u *twilio) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>113</td><td><code><pre> msg := fmt.Sprintf("Your service '%v' is currently offline!", s.Name)</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>116</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_discord.OnSave">func discord.OnSave</div><div class="info"><a href="#s_fn_discord.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>92</td><td><code><pre>func (u *discord) OnSave() error {</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> msg := fmt.Sprintf(`{"content": "The discord notifier on Statup was just updated."}`)</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> return nil</pre></code></td></tr><tr><td>96</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_discord.OnFailure">func discord.OnFailure</div><div class="info"><a href="#s_fn_discord.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>76</td><td><code><pre>func (u *discord) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> msg := fmt.Sprintf(`{"content": "Your service '%v' is currently failing! Reason: %v"}`, s.Name, f.Issue)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>80</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_twilio.OnTest">func twilio.OnTest</div><div class="info"><a href="#s_fn_twilio.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>137</td><td><code><pre>func (u *twilio) OnTest() error {</pre></code></td></tr><tr class="miss"><td>138</td><td><code><pre> msg := fmt.Sprintf("Testing the Twilio SMS Notifier")</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre> return u.Send(msg)</pre></code></td></tr><tr><td>140</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_email.OnSave">func email.OnSave</div><div class="info"><a href="#s_fn_email.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>214</td><td><code><pre>func (u *email) OnSave() error {</pre></code></td></tr><tr class="miss"><td>215</td><td><code><pre> utils.Log(1, fmt.Sprintf("Notification %v is receiving updated information.", u.Method))</pre></code></td></tr><tr><td>216</td><td><code><pre> // Do updating stuff here</pre></code></td></tr><tr class="miss"><td>217</td><td><code><pre> return nil</pre></code></td></tr><tr><td>218</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_lineNotifier.OnSave">func lineNotifier.OnSave</div><div class="info"><a href="#s_fn_lineNotifier.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>96</td><td><code><pre>func (u *lineNotifier) OnSave() error {</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> utils.Log(1, fmt.Sprintf("Notification %v is receiving updated information.", u.Method))</pre></code></td></tr><tr><td>98</td><td><code><pre> // Do updating stuff here</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> return nil</pre></code></td></tr><tr><td>100</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_emailSource">func emailSource</div><div class="info"><a href="#s_fn_emailSource">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>248</td><td><code><pre>func emailSource(email *emailOutgoing) {</pre></code></td></tr><tr class="miss"><td>249</td><td><code><pre> source := emailTemplate(email.Template, email.Data)</pre></code></td></tr><tr class="miss"><td>250</td><td><code><pre> email.Source = source</pre></code></td></tr><tr><td>251</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_twilio.OnSave">func twilio.OnSave</div><div class="info"><a href="#s_fn_twilio.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>128</td><td><code><pre>func (u *twilio) OnSave() error {</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> utils.Log(1, fmt.Sprintf("Notification %v is receiving updated information.", u.Method))</pre></code></td></tr><tr><td>130</td><td><code><pre></pre></code></td></tr><tr><td>131</td><td><code><pre> // Do updating stuff here</pre></code></td></tr><tr><td>132</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> return nil</pre></code></td></tr><tr><td>134</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_webhooker.OnSave">func webhooker.OnSave</div><div class="info"><a href="#s_fn_webhooker.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>186</td><td><code><pre>func (w *webhooker) OnSave() error {</pre></code></td></tr><tr class="miss"><td>187</td><td><code><pre> return nil</pre></code></td></tr><tr><td>188</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<!-- Can be parsed by external script
|
||
|
PACKAGE:github.com/hunterlong/statup/notifiers DONE:7.14
|
||
|
-->
|
||
|
|
||
|
<div id="pkg_github.com/hunterlong/statup/plugin" class="funcname">Package Overview: github.com/hunterlong/statup/plugin <span class="packageTotal">33.33%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/plugin</code> package. It
|
||
|
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/plugin | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
|
||
|
<tr id="s_fn_Add"><td><code><a href="#fn_Add">Add(...)</a></code></td><td><code>github.com/hunterlong/statup/plugin/main.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_SetDatabase"><td><code><a href="#fn_SetDatabase">SetDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/plugin/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_PluginInfo.Form"><td><code><a href="#fn_PluginInfo.Form">PluginInfo.Form(...)</a></code></td><td><code>github.com/hunterlong/statup/plugin/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_PluginObject.AddRoute"><td><code><a href="#fn_PluginObject.AddRoute">PluginObject.AddRoute(...)</a></code></td><td><code>github.com/hunterlong/statup/plugin/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/0</code></td></tr>
|
||
|
<tr><td colspan="2"><code>github.com/hunterlong/statup/plugin</code></td><td class="percent"><code>33.33%</code></td><td class="linecount"><code>1/3</code></td></tr>
|
||
|
</table>
|
||
|
|
||
|
<div class="funcname" id="fn_Add">func Add</div><div class="info"><a href="#s_fn_Add">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/plugin/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>42</td><td><code><pre>func Add(p Pluginer) *PluginObject {</pre></code></td></tr><tr><td>43</td><td><code><pre> return &PluginObject{}</pre></code></td></tr><tr><td>44</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SetDatabase">func SetDatabase</div><div class="info"><a href="#s_fn_SetDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/plugin/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>107</td><td><code><pre>func SetDatabase(database *gorm.DB) {</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> DB = database</pre></code></td></tr><tr><td>109</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_PluginInfo.Form">func PluginInfo.Form</div><div class="info"><a href="#s_fn_PluginInfo.Form">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/plugin/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>111</td><td><code><pre>func (p *PluginInfo) Form() string {</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return "okkokokkok"</pre></code></td></tr><tr><td>113</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_PluginObject.AddRoute">func PluginObject.AddRoute</div><div class="info"><a href="#s_fn_PluginObject.AddRoute">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/plugin/main.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>46</td><td><code><pre>func (p *PluginObject) AddRoute(s string, i string, f http.HandlerFunc) {</pre></code></td></tr><tr><td>47</td><td><code><pre></pre></code></td></tr><tr><td>48</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<!-- Can be parsed by external script
|
||
|
PACKAGE:github.com/hunterlong/statup/plugin DONE:33.33
|
||
|
-->
|
||
|
|
||
|
<div id="pkg_github.com/hunterlong/statup/source" class="funcname">Package Overview: github.com/hunterlong/statup/source <span class="packageTotal">77.71%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/source</code> package. It
|
||
|
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/source | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/source/rice-box.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>29/29</code></td></tr>
|
||
|
<tr id="s_fn_CreateAllAssets"><td><code><a href="#fn_CreateAllAssets">CreateAllAssets(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>17/17</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/source/rice-box.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>12/12</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/source/rice-box.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/source/rice-box.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
|
||
|
<tr id="s_fn_Assets"><td><code><a href="#fn_Assets">Assets(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_@79:5"><td><code><a href="#fn_@79:5">@79:5(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_@83:5"><td><code><a href="#fn_@83:5">@83:5(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_CompileSASS"><td><code><a href="#fn_CompileSASS">CompileSASS(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>74.19%</code></td><td class="linecount"><code>23/31</code></td></tr>
|
||
|
<tr id="s_fn_MakePublicFolder"><td><code><a href="#fn_MakePublicFolder">MakePublicFolder(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
|
||
|
<tr id="s_fn_SaveAsset"><td><code><a href="#fn_SaveAsset">SaveAsset(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>4/6</code></td></tr>
|
||
|
<tr id="s_fn_DeleteAllAssets"><td><code><a href="#fn_DeleteAllAssets">DeleteAllAssets(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>4/6</code></td></tr>
|
||
|
<tr id="s_fn_copyAndCapture"><td><code><a href="#fn_copyAndCapture">copyAndCapture(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>64.29%</code></td><td class="linecount"><code>9/14</code></td></tr>
|
||
|
<tr id="s_fn_CopyToPublic"><td><code><a href="#fn_CopyToPublic">CopyToPublic(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>63.64%</code></td><td class="linecount"><code>7/11</code></td></tr>
|
||
|
<tr id="s_fn_OpenAsset"><td><code><a href="#fn_OpenAsset">OpenAsset(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
|
||
|
<tr id="s_fn_UsingAssets"><td><code><a href="#fn_UsingAssets">UsingAssets(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>33.33%</code></td><td class="linecount"><code>4/12</code></td></tr>
|
||
|
<tr id="s_fn_HelpMarkdown"><td><code><a href="#fn_HelpMarkdown">HelpMarkdown(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
|
||
|
<tr><td colspan="2"><code>github.com/hunterlong/statup/source</code></td><td class="percent"><code>77.71%</code></td><td class="linecount"><code>136/175</code></td></tr>
|
||
|
</table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/rice-box.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>204</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>205</td><td><code><pre></pre></code></td></tr><tr><td>206</td><td><code><pre> // define files</pre></code></td></tr><tr><td>207</td><td><code><pre> filel := &embedded.EmbeddedFile{</pre></code></td></tr><tr><td>208</td><td><code><pre> Filename: "base.html",</pre></code></td></tr><tr><td>209</td><td><code><pre> FileModTime: time.Unix(1538458071, 0),</pre></code></td></tr><tr><td>210</td><td><code><pre> Content: string("{{ define \"base\" }}\n<!doctype html>\n<html lang=\"en\">\n{{block \"head\" .}} {{end}}\n<body>\n {{template \"content\" .}}\n</body>\n<footer>{{template \"footer\" .}}</footer>\n{{template \"scripts\" .}}\n</html>\n{{end}}\n"),</pre></code></td></tr><tr><td>211</td><td><code><pre> }</pre></code></td></tr><tr><td>212</td><td><code><pre> filem := &embedded.EmbeddedFile{</pre></code></td></tr><tr><td>213</td><td><code><pre> Filename: "dashboard.html",</pre></code></td></tr><tr><td>214</td><td><code><pre> FileModTime: time.Unix(1538459427, 0),</pre></code></td></tr><tr><td>215</td><td><code><pre> Content: string("{{define \"title\"}}Statup | Dashboard{{end}}\n{{define \"content\"}}\n<div class=\"container col-md-7 col-sm-12 mt-md-5 bg-light\">\n{{template \"nav\" }}\n <div class=\"col-12 mt-3\">\n <div class=\"row stats_area mb-5\">\n <div class=\"col-4\">\n <span class=\"lg_number\">{{ CoreApp.ServicesCount }}</span>\n Total Services\n </div>\n <div class=\"col-4\">\n <span class=\"lg_number\">{{ CoreApp.Count24HFailures }}</span>\n Failures last 24 Hours\n </div>\n <div class=\"col-4\">\n <span class=\"lg_number\">{{ CoreApp.CountOnline }}</span>\n Online Services\n </div>\n </div>\n <div class=\"row mt-4\">\n <div class=\"col-12\">\n <h3>Services</h3>\n <div class=\"list-group mb-5 mt-3\">\n {{ range Services }}\n <a href=\"#\" class=\"list-group-item list-group-item-action flex-column align-items-start\">\n <div class=\"d-flex w-100 justify-content-between\">\n <h5 class=\"mb-1\">{{.Name}}</h5>\n <small>{{if .Online}} <span class=\"badge badge-success\">ONLINE</span> {{else}} <span class=\"badge badge-danger\">OFFLINE</span> {{end}}</small>\n </div>\n <p class=\"mb-1\">{{.SmallText}}</p>\n </a>\n {{ end }}\n </div>\n\n {{ range Services }}\n {{ if .LimitedFailures }}\n <h4 class=\"text-truncate\">{{.Name}} Failures</h4>\n <div class=\"list-group mt-3 mb-4\">\n {{ range .LimitedFailures }}\n <a href=\"#\" class=\"list-group-item list-group-item-action flex-column align-items-start\">\n <div class=\"d-flex w-100 justify-content-between\">\n <h5 class=\"mb-1\">{{.ParseError}}</h5>\n <small>{{.Ago}}</small>\n </div>\n <p class=\"mb-1\">{{.Issue}}</
|
||
|
|
||
|
<div class="funcname" id="fn_CreateAllAssets">func CreateAllAssets</div><div class="info"><a href="#s_fn_CreateAllAssets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>152</td><td><code><pre>func CreateAllAssets(folder string) error {</pre></code></td></tr><tr><td>153</td><td><code><pre> utils.Log(1, fmt.Sprintf("Dump Statup assets into %v/assets", folder))</pre></code></td></tr><tr><td>154</td><td><code><pre> MakePublicFolder(folder + "/assets")</pre></code></td></tr><tr><td>155</td><td><code><pre> MakePublicFolder(folder + "/assets/js")</pre></code></td></tr><tr><td>156</td><td><code><pre> MakePublicFolder(folder + "/assets/css")</pre></code></td></tr><tr><td>157</td><td><code><pre> MakePublicFolder(folder + "/assets/scss")</pre></code></td></tr><tr><td>158</td><td><code><pre> utils.Log(1, "Inserting scss, css, and javascript files into assets folder")</pre></code></td></tr><tr><td>159</td><td><code><pre> CopyToPublic(ScssBox, folder+"/assets/scss", "base.scss")</pre></code></td></tr><tr><td>160</td><td><code><pre> CopyToPublic(ScssBox, folder+"/assets/scss", "variables.scss")</pre></code></td></tr><tr><td>161</td><td><code><pre> CopyToPublic(ScssBox, folder+"/assets/scss", "mobile.scss")</pre></code></td></tr><tr><td>162</td><td><code><pre> CopyToPublic(ScssBox, folder+"/assets/scss", "pikaday.scss")</pre></code></td></tr><tr><td>163</td><td><code><pre> CopyToPublic(CssBox, folder+"/assets/css", "bootstrap.min.css")</pre></code></td></tr><tr><td>164</td><td><code><pre> CopyToPublic(CssBox, folder+"/assets/css", "base.css")</pre></code></td></tr><tr><td>165</td><td><code><pre> //CopyToPublic(JsBox, folder+"/assets/js", "bootstrap.min.js")</pre></code></td></tr><tr><td>166</td><td><code><pre> //CopyToPublic(JsBox, folder+"/assets/js", "Chart.bundle.min.js")</pre></code></td></tr><tr><td>167</td><td><code><pre> //CopyToPublic(JsBox, folder+"/assets/js", "jquery-3.3.1.min.js")</pre></code></td></tr><tr><td>168</td><td><code><pre> //CopyToPublic(JsBox, folder+"/assets/js", "sortable.min.js")</pre></code></td></tr><tr><td>169</td><td><code><pre> //CopyToPublic(JsBox, folder+"/assets/js", "main.js")</pre></code></td></tr><tr><td>170</td><td><code><pre> //CopyToPublic(JsBox, folder+"/assets/js", "setup.js")</pre></code></td></tr><tr><td>171</td><td><code><pre> CopyToPublic(TmplBox, folder+"/assets", "robots.txt")</pre></code></td></tr><tr><td>172</td><td><code><pre> CopyToPublic(TmplBox, folder+"/assets", "statup.png")</pre></code></td></tr><tr><td>173</td><td><code><pre> utils.Log(1, "Compiling CSS from SCSS style...")</pre></code></td></tr><tr><td>174</td><td><code><pre> err := utils.Log(1, "Statup assets have been inserted")</pre></code></td></tr><tr><td>175</td><td><code><pre> return err</pre></code></td></tr><tr><td>176</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/rice-box.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>113</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>114</td><td><code><pre></pre></code></td></tr><tr><td>115</td><td><code><pre> // define files</pre></code></td></tr><tr><td>116</td><td><code><pre> fileb := &embedded.EmbeddedFile{</pre></code></td></tr><tr><td>117</td><td><code><pre> Filename: "Chart.bundle.min.js",</pre></code></td></tr><tr><td>118</td><td><code><pre> FileModTime: time.Unix(1528732500, 0),</pre></code></td></tr><tr><td>119</td><td><code><pre> Content: string("/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.7.2\n *\n * Copyright 2018 Chart.js Contributors\n * Released under the MIT license\n * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md\n */\n!function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).Chart=t()}}(function(){return function t(e,i,n){function a(o,s){if(!i[o]){if(!e[o]){var l=\"function\"==typeof require&&require;if(!s&&l)return l(o,!0);if(r)return r(o,!0);var u=new Error(\"Cannot find module '\"+o+\"'\");throw u.code=\"MODULE_NOT_FOUND\",u}var d=i[o]={exports:{}};e[o][0].call(d.exports,function(t){var i=e[o][1][t];return a(i||t)},d,d.exports,t,e,i,n)}return i[o].exports}for(var r=\"function\"==typeof require&&require,o=0;o<n.length;o++)a(n[o]);return a}({1:[function(t,e,i){var n=t(5);function a(t){if(t){var e=[0,0,0],i=1,a=t.match(/^#([a-fA-F0-9]{3})$/i);if(a){a=a[1];for(var r=0;r<e.length;r++)e[r]=parseInt(a[r]+a[r],16)}else if(a=t.match(/^#([a-fA-F0-9]{6})$/i)){a=a[1];for(r=0;r<e.length;r++)e[r]=parseInt(a.slice(2*r,2*r+2),16)}else if(a=t.match(/^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(a[r+1]);i=parseFloat(a[4])}else if(a=t.match(/^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(a[r+1]));i=parseFloat(a[4])}else if(a=t.match(/(\\w+)/)){if(\"transparent\"==a[1])return[0,0,0,0];if(!(e=n[a[1]]))return}for(r=0;r<e.length;r++)e[r]=d(e[r],0,255);return i=i||0==i?d(i,0,1):1,e[3]=i,e}}function r(t){if(t){var e=t.match(/^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/);if(e){var i=parseFloat(e[4]);return[d(parseInt(e[1]),0,360),d(parseFloat(e[2]),0,100),d(parseFloat(e[3]),0,100),d(isNaN(i)?1:i,0,1)]}}}function o(t){if(t){var e=t.match(/^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/);if(e){var i=parseFloat(e[4]);return[d(parseInt(e[1]),0,360),d(parseFloat(e[2]),0,100),d(parseFloat(e[3]),0,100),d(isNaN(i)?1:i,0,1)]}}}function s(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),\"rgba(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+e+\")\"}function l(t,e){return\"rgba(\"+Math.round(t[0]/255*100)+\"%, \"+Math.round(t[1]/255*100)+\"%, \"+Math.round(t[2]/255*100)+\"%, \"+(e||t[3]||1)+\")\"}function u(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),\"hsla(\"+t[0]+\", \"+t[1]+\"%, \"+t[2]+\"%, \"+e+\")\"}function d(t,e,i){return Math.min(Math.max(e,t),i)}function h(t){var e=t.toString(16).toUpperCase();return e.length<2?\"0\"+e:e}e.exports={getRgba:a,getHsla:r,getRgb:function(t){var e=a(t);return e&&e.slice(0,3)},getHsl:function(t){var e=r(t);return e&&e.slice(0,3)},getHwb:o,getAlpha:function(t){var e=a(t);{if(e)return e[3];if(e=r(t))return e[3];if(e=o(t))return e[3]}},hexString:fu
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/rice-box.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>57</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>58</td><td><code><pre></pre></code></td></tr><tr><td>59</td><td><code><pre> // define files</pre></code></td></tr><tr><td>60</td><td><code><pre> file6 := &embedded.EmbeddedFile{</pre></code></td></tr><tr><td>61</td><td><code><pre> Filename: "base.scss",</pre></code></td></tr><tr><td>62</td><td><code><pre> FileModTime: time.Unix(1538106377, 0),</pre></code></td></tr><tr><td>63</td><td><code><pre> Content: string("/*!\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long <info@socialeck.com> and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n@import 'variables';\n\n\nHTML,BODY {\n background-color: $background-color;\n}\n\n.container {\n padding-top: 20px;\n padding-bottom: 20px;\n max-width: $max-width;\n}\n\n.header-title {\n color: $title-color;\n}\n\n.header-desc {\n color: $description-color;\n}\n\n.btn {\n border-radius: $global-border-radius;\n}\n\n.online_list .badge {\n margin-top: 0.2rem;\n}\n\n.navbar {\n margin-bottom: 30px;\n}\n\n.btn-sm {\n line-height: 1.3;\n font-size: 0.75rem;\n}\n\n.view_service_btn {\n position: absolute;\n bottom: -40px;\n right: 40px;\n}\n\n.service_lower_info {\n position: absolute;\n bottom: -40px;\n left: 40px;\n color: #d1ffca;\n font-size: 0.85rem;\n}\n\n.lg_number {\n font-size: $service-stats-size;\n font-weight: bold;\n display: block;\n color: $service-stats-color;\n}\n\n.stats_area {\n text-align: center;\n color: #a5a5a5;\n}\n\n.lower_canvas {\n height: 3.4rem;\n width: 100%;\n background-color: #48d338;\n padding: 15px 10px;\n margin-left: 0px !important;\n margin-right: 0px !important;\n}\n\n.lower_canvas SPAN {\n font-size: 1rem;\n color: $service-description-color\n}\n\n.footer {\n text-decoration: none;\n margin-top: 20px;\n}\n\n.footer A {\n color: $footer-text-color;\n text-decoration: none;\n}\n\n.footer A:HOVER {\n color: #6d6d6d;\n}\n\n.badge {\n color: white;\n border-radius: $global-border-radius;\n}\n\n.btn-group {\n height: 25px;\n\n & A {\n padding: 0.1rem .75rem;\n font-size: 0.8rem;\n }\n}\n\n.card-body .badge {\n color: #fff;\n}\n\n.nav-pills .nav-link {\n border-radius: $global-border-radius;\n}\n\n.form-control {\n border-radius: $global-border-radius;\n}\n\n.card {\n background-color: $service-background;\n border: $service-border;\n}\n\n.card-body {\n overflow: hidden;\n}\n\n.card-body H4 A {\n color: $service-title;\n text-decoration: none;\n}\n\n.chart-container {\n position: relative;\n height: 170px;\n width: 100%;\n}\n\n.service-chart-container {\n position: relative;\n height: 400px;\n width: 100%;\n}\n\n@mixin dynamic-color-hov($color) {\n &.dyn-dark {\n background-color: darken($color, 12%) !important;\n border-color: darken($color, 17%) !important;\n }\n &.dyn-dark:HOVER {\n background-color: darken($color, 17%) !important;\n border-color: darken($color, 20%) !important;\n }\n &.dyn-light {\n background-color: lighten($color, 12%) !important;\n border-color: lighten($color, 17%) !important;\n }\n &.dyn-light:HOVER {\n background-color: lighten($color, 17%) !important;\n border-color: lighten($color, 20%) !important;\n }\n}\n\n@mixin dynamic-color(
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/rice-box.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>8</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>9</td><td><code><pre></pre></code></td></tr><tr><td>10</td><td><code><pre> // define files</pre></code></td></tr><tr><td>11</td><td><code><pre> file2 := &embedded.EmbeddedFile{</pre></code></td></tr><tr><td>12</td><td><code><pre> Filename: "base.css",</pre></code></td></tr><tr><td>13</td><td><code><pre> FileModTime: time.Unix(1538806661, 0),</pre></code></td></tr><tr><td>14</td><td><code><pre> Content: string("@charset \"UTF-8\";\n/*!\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long <info@socialeck.com> and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n/*!\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long <info@socialeck.com> and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n/* Index Page */\n/* Status Container */\n/* Button Colors */\n/* Footer Settings */\n/* Global Settings */\n/* Mobile Settings */\n/* Mobile Service Container */\nHTML, BODY {\n background-color: #fcfcfc; }\n\n.container {\n padding-top: 20px;\n padding-bottom: 20px;\n max-width: 860px; }\n\n.header-title {\n color: #464646; }\n\n.header-desc {\n color: #939393; }\n\n.btn {\n border-radius: 0.2rem; }\n\n.online_list .badge {\n margin-top: 0.2rem; }\n\n.navbar {\n margin-bottom: 30px; }\n\n.btn-sm {\n line-height: 1.3;\n font-size: 0.75rem; }\n\n.view_service_btn {\n position: absolute;\n bottom: -40px;\n right: 40px; }\n\n.service_lower_info {\n position: absolute;\n bottom: -40px;\n left: 40px;\n color: #d1ffca;\n font-size: 0.85rem; }\n\n.lg_number {\n font-size: 2.3rem;\n font-weight: bold;\n display: block;\n color: #4f4f4f; }\n\n.stats_area {\n text-align: center;\n color: #a5a5a5; }\n\n.lower_canvas {\n height: 3.4rem;\n width: 100%;\n background-color: #48d338;\n padding: 15px 10px;\n margin-left: 0px !important;\n margin-right: 0px !important; }\n\n.lower_canvas SPAN {\n font-size: 1rem;\n color: #fff; }\n\n.footer {\n text-decoration: none;\n margin-top: 20px; }\n\n.footer A {\n color: #8d8d8d;\n text-decoration: none; }\n\n.footer A:HOVER {\n color: #6d6d6d; }\n\n.badge {\n color: white;\n border-radius: 0.2rem; }\n\n.btn-group {\n height: 25px; }\n .btn-group A {\n padding: 0.1rem .75rem;\n font-size: 0.8rem; }\n\n.card-body .badge {\n color: #fff; }\n\n.nav-pills .nav-link {\n border-radius: 0.2rem; }\n\n.form-control {\n border-radius: 0.2rem; }\n\n.card {\n background-color: #ffffff;\n border: 1px solid rgba(0, 0, 0, 0.125); }\n\n.card-body {\n overflow: hidden; }\n\n.card-body H4 A {\n color: #444444;\n text-decoration: none; }\n\n.chart-container {\n position: relative;\n height: 170px;\n width: 100%; }\n\n.service-chart-container {\n position: relative;\n height: 400px;\n width: 100%; }\n\n.btn-primary {\n background-color: #3e9bff;\
|
||
|
|
||
|
<div class="funcname" id="fn_Assets">func Assets</div><div class="info"><a href="#s_fn_Assets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>38</td><td><code><pre>func Assets() {</pre></code></td></tr><tr><td>39</td><td><code><pre> CssBox = rice.MustFindBox("css")</pre></code></td></tr><tr><td>40</td><td><code><pre> ScssBox = rice.MustFindBox("scss")</pre></code></td></tr><tr><td>41</td><td><code><pre> JsBox = rice.MustFindBox("js")</pre></code></td></tr><tr><td>42</td><td><code><pre> TmplBox = rice.MustFindBox("tmpl")</pre></code></td></tr><tr><td>43</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@79:5">func @79:5</div><div class="info"><a href="#s_fn_@79:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>79</td><td><code><pre>func() {</pre></code></td></tr><tr><td>80</td><td><code><pre> stdout, errStdout = copyAndCapture(os.Stdout, stdoutIn)</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@83:5">func @83:5</div><div class="info"><a href="#s_fn_@83:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>83</td><td><code><pre>func() {</pre></code></td></tr><tr><td>84</td><td><code><pre> stderr, errStderr = copyAndCapture(os.Stderr, stderrIn)</pre></code></td></tr><tr><td>85</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CompileSASS">func CompileSASS</div><div class="info"><a href="#s_fn_CompileSASS">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>57</td><td><code><pre>func CompileSASS(folder string) error {</pre></code></td></tr><tr><td>58</td><td><code><pre> sassBin := os.Getenv("SASS")</pre></code></td></tr><tr><td>59</td><td><code><pre> if sassBin == "" {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> sassBin = "sass"</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr><td>62</td><td><code><pre></pre></code></td></tr><tr><td>63</td><td><code><pre> scssFile := fmt.Sprintf("%v/%v", folder, "assets/scss/base.scss")</pre></code></td></tr><tr><td>64</td><td><code><pre> baseFile := fmt.Sprintf("%v/%v", folder, "assets/css/base.css")</pre></code></td></tr><tr><td>65</td><td><code><pre></pre></code></td></tr><tr><td>66</td><td><code><pre> utils.Log(1, fmt.Sprintf("Compiling SASS %v into %v", scssFile, baseFile))</pre></code></td></tr><tr><td>67</td><td><code><pre> command := fmt.Sprintf("%v %v %v", sassBin, scssFile, baseFile)</pre></code></td></tr><tr><td>68</td><td><code><pre></pre></code></td></tr><tr><td>69</td><td><code><pre> utils.Log(1, fmt.Sprintf("Command: sh -c %v", command))</pre></code></td></tr><tr><td>70</td><td><code><pre></pre></code></td></tr><tr><td>71</td><td><code><pre> testCmd := exec.Command("sh", "-c", command)</pre></code></td></tr><tr><td>72</td><td><code><pre></pre></code></td></tr><tr><td>73</td><td><code><pre> var stdout, stderr []byte</pre></code></td></tr><tr><td>74</td><td><code><pre> var errStdout, errStderr error</pre></code></td></tr><tr><td>75</td><td><code><pre> stdoutIn, _ := testCmd.StdoutPipe()</pre></code></td></tr><tr><td>76</td><td><code><pre> stderrIn, _ := testCmd.StderrPipe()</pre></code></td></tr><tr><td>77</td><td><code><pre> testCmd.Start()</pre></code></td></tr><tr><td>78</td><td><code><pre></pre></code></td></tr><tr><td>79</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>80</td><td><code><pre> stdout, errStdout = copyAndCapture(os.Stdout, stdoutIn)</pre></code></td></tr><tr><td>81</td><td><code><pre> }()</pre></code></td></tr><tr><td>82</td><td><code><pre></pre></code></td></tr><tr><td>83</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>84</td><td><code><pre> stderr, errStderr = copyAndCapture(os.Stderr, stderrIn)</pre></code></td></tr><tr><td>85</td><td><code><pre> }()</pre></code></td></tr><tr><td>86</td><td><code><pre></pre></code></td></tr><tr><td>87</td><td><code><pre> err := testCmd.Wait()</pre></code></td></tr><tr><td>88</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> return err</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr><td>92</td><td><code><pre></pre></code></td></tr><tr><td>93</td><td><code><pre> if errStdout != nil || errStderr != nil {</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to compile assets with SASS %v", err))</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> return errors.New("failed to capture stdout or stderr")</pre></code></td></tr><tr><td>96</td><td><code><pre> }</pre></code></td></tr><tr><td>97</td><td><code><pre></pre></code></td></tr><tr><td>98</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to compile assets with SASS %v", err))</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> utils.Log(3, fmt.Sprintf("bash -c %v %v %v", sassBin, scssFile, baseFile))</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> return err<
|
||
|
|
||
|
<div class="funcname" id="fn_MakePublicFolder">func MakePublicFolder</div><div class="info"><a href="#s_fn_MakePublicFolder">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>207</td><td><code><pre>func MakePublicFolder(folder string) error {</pre></code></td></tr><tr><td>208</td><td><code><pre> utils.Log(1, fmt.Sprintf("Creating folder '%v'", folder))</pre></code></td></tr><tr><td>209</td><td><code><pre> if _, err := os.Stat(folder); os.IsNotExist(err) {</pre></code></td></tr><tr><td>210</td><td><code><pre> err = os.MkdirAll(folder, 0777)</pre></code></td></tr><tr><td>211</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>212</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to created %v directory, %v", folder, err))</pre></code></td></tr><tr class="miss"><td>213</td><td><code><pre> return err</pre></code></td></tr><tr><td>214</td><td><code><pre> }</pre></code></td></tr><tr><td>215</td><td><code><pre> }</pre></code></td></tr><tr><td>216</td><td><code><pre> return nil</pre></code></td></tr><tr><td>217</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_SaveAsset">func SaveAsset</div><div class="info"><a href="#s_fn_SaveAsset">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>131</td><td><code><pre>func SaveAsset(data []byte, folder, file string) error {</pre></code></td></tr><tr><td>132</td><td><code><pre> utils.Log(1, fmt.Sprintf("Saving %v/%v into assets folder", folder, file))</pre></code></td></tr><tr><td>133</td><td><code><pre> err := ioutil.WriteFile(folder+"/assets/"+file, data, 0744)</pre></code></td></tr><tr><td>134</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>135</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to save %v/%v, %v", folder, file, err))</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> return err</pre></code></td></tr><tr><td>137</td><td><code><pre> }</pre></code></td></tr><tr><td>138</td><td><code><pre> return nil</pre></code></td></tr><tr><td>139</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DeleteAllAssets">func DeleteAllAssets</div><div class="info"><a href="#s_fn_DeleteAllAssets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>179</td><td><code><pre>func DeleteAllAssets(folder string) error {</pre></code></td></tr><tr><td>180</td><td><code><pre> err := os.RemoveAll(folder + "/assets")</pre></code></td></tr><tr><td>181</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> utils.Log(1, fmt.Sprintf("There was an issue deleting Statup Assets, %v", err))</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> return err</pre></code></td></tr><tr><td>184</td><td><code><pre> }</pre></code></td></tr><tr><td>185</td><td><code><pre> utils.Log(1, "Statup assets have been deleted")</pre></code></td></tr><tr><td>186</td><td><code><pre> return err</pre></code></td></tr><tr><td>187</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_copyAndCapture">func copyAndCapture</div><div class="info"><a href="#s_fn_copyAndCapture">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>220</td><td><code><pre>func copyAndCapture(w io.Writer, r io.Reader) ([]byte, error) {</pre></code></td></tr><tr><td>221</td><td><code><pre> var out []byte</pre></code></td></tr><tr><td>222</td><td><code><pre> buf := make([]byte, 1024, 1024)</pre></code></td></tr><tr><td>223</td><td><code><pre> for {</pre></code></td></tr><tr><td>224</td><td><code><pre> n, err := r.Read(buf[:])</pre></code></td></tr><tr><td>225</td><td><code><pre> if n > 0 {</pre></code></td></tr><tr class="miss"><td>226</td><td><code><pre> d := buf[:n]</pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> out = append(out, d...)</pre></code></td></tr><tr class="miss"><td>228</td><td><code><pre> _, err := w.Write(d)</pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> return out, err</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr><td>232</td><td><code><pre> }</pre></code></td></tr><tr><td>233</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>234</td><td><code><pre> // Read returns io.EOF at the end of file, which is not an error for us</pre></code></td></tr><tr><td>235</td><td><code><pre> if err == io.EOF {</pre></code></td></tr><tr><td>236</td><td><code><pre> err = nil</pre></code></td></tr><tr><td>237</td><td><code><pre> }</pre></code></td></tr><tr><td>238</td><td><code><pre> return out, err</pre></code></td></tr><tr><td>239</td><td><code><pre> }</pre></code></td></tr><tr><td>240</td><td><code><pre> }</pre></code></td></tr><tr><td>241</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_CopyToPublic">func CopyToPublic</div><div class="info"><a href="#s_fn_CopyToPublic">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>190</td><td><code><pre>func CopyToPublic(box *rice.Box, folder, file string) error {</pre></code></td></tr><tr><td>191</td><td><code><pre> assetFolder := fmt.Sprintf("%v/%v", folder, file)</pre></code></td></tr><tr><td>192</td><td><code><pre> utils.Log(1, fmt.Sprintf("Copying %v to %v", file, assetFolder))</pre></code></td></tr><tr><td>193</td><td><code><pre> base, err := box.String(file)</pre></code></td></tr><tr><td>194</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>195</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to copy %v to %v, %v.", file, assetFolder, err))</pre></code></td></tr><tr class="miss"><td>196</td><td><code><pre> return err</pre></code></td></tr><tr><td>197</td><td><code><pre> }</pre></code></td></tr><tr><td>198</td><td><code><pre> err = ioutil.WriteFile(assetFolder, []byte(base), 0744)</pre></code></td></tr><tr><td>199</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>200</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to write file %v to %v, %v.", file, assetFolder, err))</pre></code></td></tr><tr class="miss"><td>201</td><td><code><pre> return err</pre></code></td></tr><tr><td>202</td><td><code><pre> }</pre></code></td></tr><tr><td>203</td><td><code><pre> return nil</pre></code></td></tr><tr><td>204</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_OpenAsset">func OpenAsset</div><div class="info"><a href="#s_fn_OpenAsset">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>142</td><td><code><pre>func OpenAsset(folder, file string) string {</pre></code></td></tr><tr><td>143</td><td><code><pre> dat, err := ioutil.ReadFile(folder + "/assets/" + file)</pre></code></td></tr><tr><td>144</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> utils.Log(3, fmt.Sprintf("Failed to open %v, %v", file, err))</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> return ""</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr><tr><td>148</td><td><code><pre> return string(dat)</pre></code></td></tr><tr><td>149</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_UsingAssets">func UsingAssets</div><div class="info"><a href="#s_fn_UsingAssets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>111</td><td><code><pre>func UsingAssets(folder string) bool {</pre></code></td></tr><tr><td>112</td><td><code><pre> if _, err := os.Stat(folder + "/assets"); err == nil {</pre></code></td></tr><tr><td>113</td><td><code><pre> return true</pre></code></td></tr><tr><td>114</td><td><code><pre> } else {</pre></code></td></tr><tr><td>115</td><td><code><pre> if os.Getenv("USE_ASSETS") == "true" {</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> utils.Log(1, "Environment variable USE_ASSETS was found.")</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> CreateAllAssets(folder)</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> err := CompileSASS(folder)</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> CopyToPublic(CssBox, folder+"/css", "base.css")</pre></code></td></tr><tr class="miss"><td>121</td><td><code><pre> utils.Log(2, "Default 'base.css' was insert because SASS did not work.")</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> return true</pre></code></td></tr><tr><td>123</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return true</pre></code></td></tr><tr><td>125</td><td><code><pre> }</pre></code></td></tr><tr><td>126</td><td><code><pre> }</pre></code></td></tr><tr><td>127</td><td><code><pre> return false</pre></code></td></tr><tr><td>128</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_HelpMarkdown">func HelpMarkdown</div><div class="info"><a href="#s_fn_HelpMarkdown">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>46</td><td><code><pre>func HelpMarkdown() string {</pre></code></td></tr><tr class="miss"><td>47</td><td><code><pre> helpSrc, err := TmplBox.Bytes("help.md")</pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> return "error generating markdown"</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> output := blackfriday.Run(helpSrc)</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> return string(output)</pre></code></td></tr><tr><td>54</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<!-- Can be parsed by external script
|
||
|
PACKAGE:github.com/hunterlong/statup/source DONE:77.71
|
||
|
-->
|
||
|
|
||
|
<div id="pkg_github.com/hunterlong/statup/utils" class="funcname">Package Overview: github.com/hunterlong/statup/utils <span class="packageTotal">55.29%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/utils</code> package. It
|
||
|
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/utils | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
|
||
|
<tr id="s_fn_Log"><td><code><a href="#fn_Log">Log(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>16/16</code></td></tr>
|
||
|
<tr id="s_fn_UnderScoreString"><td><code><a href="#fn_UnderScoreString">UnderScoreString(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
|
||
|
<tr id="s_fn_NewSHA1Hash"><td><code><a href="#fn_NewSHA1Hash">NewSHA1Hash(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/encryption.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>8/8</code></td></tr>
|
||
|
<tr id="s_fn_Http"><td><code><a href="#fn_Http">Http(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
|
||
|
<tr id="s_fn_DeleteFile"><td><code><a href="#fn_DeleteFile">DeleteFile(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
|
||
|
<tr id="s_fn_newLogRow"><td><code><a href="#fn_newLogRow">newLogRow(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_RandomString"><td><code><a href="#fn_RandomString">RandomString(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/encryption.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_Timezoner"><td><code><a href="#fn_Timezoner">Timezoner(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
|
||
|
<tr id="s_fn_rotate"><td><code><a href="#fn_rotate">rotate(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_@84:5"><td><code><a href="#fn_@84:5">@84:5(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
|
||
|
<tr id="s_fn_HashPassword"><td><code><a href="#fn_HashPassword">HashPassword(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/encryption.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_Timestamp.Ago"><td><code><a href="#fn_Timestamp.Ago">Timestamp.Ago(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_StringInt"><td><code><a href="#fn_StringInt">StringInt(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
|
||
|
<tr id="s_fn_DeleteDirectory"><td><code><a href="#fn_DeleteDirectory">DeleteDirectory(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_rev"><td><code><a href="#fn_rev">rev(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/time.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
|
||
|
<tr id="s_fn_pushLastLine"><td><code><a href="#fn_pushLastLine">pushLastLine(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
|
||
|
<tr id="s_fn_InitLogs"><td><code><a href="#fn_InitLogs">InitLogs(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>76.92%</code></td><td class="linecount"><code>10/13</code></td></tr>
|
||
|
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
|
||
|
<tr id="s_fn_createLog"><td><code><a href="#fn_createLog">createLog(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>63.64%</code></td><td class="linecount"><code>7/11</code></td></tr>
|
||
|
<tr id="s_fn_FileExists"><td><code><a href="#fn_FileExists">FileExists(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>2/4</code></td></tr>
|
||
|
<tr id="s_fn_DurationReadable"><td><code><a href="#fn_DurationReadable">DurationReadable(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>42.86%</code></td><td class="linecount"><code>3/7</code></td></tr>
|
||
|
<tr id="s_fn_FormatDuration"><td><code><a href="#fn_FormatDuration">FormatDuration(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/time.go</code></td><td class="percent"><code>37.50%</code></td><td class="linecount"><code>15/40</code></td></tr>
|
||
|
<tr id="s_fn_ToString"><td><code><a href="#fn_ToString">ToString(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>25.00%</code></td><td class="linecount"><code>2/8</code></td></tr>
|
||
|
<tr id="s_fn_Command"><td><code><a href="#fn_Command">Command(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/16</code></td></tr>
|
||
|
<tr id="s_fn_copyAndCapture"><td><code><a href="#fn_copyAndCapture">copyAndCapture(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/14</code></td></tr>
|
||
|
<tr id="s_fn_GetLastLine"><td><code><a href="#fn_GetLastLine">GetLastLine(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_LogRow.lineAsString"><td><code><a href="#fn_LogRow.lineAsString">LogRow.lineAsString(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
|
||
|
<tr id="s_fn_dir"><td><code><a href="#fn_dir">dir(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
|
||
|
<tr id="s_fn_LogRow.FormatForHtml"><td><code><a href="#fn_LogRow.FormatForHtml">LogRow.FormatForHtml(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@155:5"><td><code><a href="#fn_@155:5">@155:5(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr id="s_fn_@159:5"><td><code><a href="#fn_@159:5">@159:5(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
|
||
|
<tr><td colspan="2"><code>github.com/hunterlong/statup/utils</code></td><td class="percent"><code>55.29%</code></td><td class="linecount"><code>115/208</code></td></tr>
|
||
|
</table>
|
||
|
|
||
|
<div class="funcname" id="fn_Log">func Log</div><div class="info"><a href="#s_fn_Log">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>93</td><td><code><pre>func Log(level int, err interface{}) error {</pre></code></td></tr><tr><td>94</td><td><code><pre> pushLastLine(err)</pre></code></td></tr><tr><td>95</td><td><code><pre> var outErr error</pre></code></td></tr><tr><td>96</td><td><code><pre> switch level {</pre></code></td></tr><tr><td>97</td><td><code><pre> case 5:</pre></code></td></tr><tr><td>98</td><td><code><pre> _, outErr = fmt.Printf("PANIC: %v\n", err)</pre></code></td></tr><tr><td>99</td><td><code><pre> fmtLogs.Printf("PANIC: %v\n", err)</pre></code></td></tr><tr><td>100</td><td><code><pre> case 4:</pre></code></td></tr><tr><td>101</td><td><code><pre> _, outErr = fmt.Printf("FATAL: %v\n", err)</pre></code></td></tr><tr><td>102</td><td><code><pre> fmtLogs.Printf("FATAL: %v\n", err)</pre></code></td></tr><tr><td>103</td><td><code><pre> //color.Red("ERROR: %v\n", err)</pre></code></td></tr><tr><td>104</td><td><code><pre> //os.Exit(2)</pre></code></td></tr><tr><td>105</td><td><code><pre> case 3:</pre></code></td></tr><tr><td>106</td><td><code><pre> _, outErr = fmt.Printf("ERROR: %v\n", err)</pre></code></td></tr><tr><td>107</td><td><code><pre> fmtLogs.Printf("ERROR: %v\n", err)</pre></code></td></tr><tr><td>108</td><td><code><pre> //color.Red("ERROR: %v\n", err)</pre></code></td></tr><tr><td>109</td><td><code><pre> case 2:</pre></code></td></tr><tr><td>110</td><td><code><pre> _, outErr = fmt.Printf("WARNING: %v\n", err)</pre></code></td></tr><tr><td>111</td><td><code><pre> fmtLogs.Printf("WARNING: %v\n", err)</pre></code></td></tr><tr><td>112</td><td><code><pre> //color.Yellow("WARNING: %v\n", err)</pre></code></td></tr><tr><td>113</td><td><code><pre> case 1:</pre></code></td></tr><tr><td>114</td><td><code><pre> _, outErr = fmt.Printf("INFO: %v\n", err)</pre></code></td></tr><tr><td>115</td><td><code><pre> fmtLogs.Printf("INFO: %v\n", err)</pre></code></td></tr><tr><td>116</td><td><code><pre> //color.Blue("INFO: %v\n", err)</pre></code></td></tr><tr><td>117</td><td><code><pre> case 0:</pre></code></td></tr><tr><td>118</td><td><code><pre> _, outErr = fmt.Printf("%v\n", err)</pre></code></td></tr><tr><td>119</td><td><code><pre> fmtLogs.Printf("%v\n", err)</pre></code></td></tr><tr><td>120</td><td><code><pre> //color.White("%v\n", err)</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr><td>122</td><td><code><pre> return outErr</pre></code></td></tr><tr><td>123</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_UnderScoreString">func UnderScoreString</div><div class="info"><a href="#s_fn_UnderScoreString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>97</td><td><code><pre>func UnderScoreString(str string) string {</pre></code></td></tr><tr><td>98</td><td><code><pre></pre></code></td></tr><tr><td>99</td><td><code><pre> // convert every letter to lower case</pre></code></td></tr><tr><td>100</td><td><code><pre> newStr := strings.ToLower(str)</pre></code></td></tr><tr><td>101</td><td><code><pre></pre></code></td></tr><tr><td>102</td><td><code><pre> // convert all spaces/tab to underscore</pre></code></td></tr><tr><td>103</td><td><code><pre> regExp := regexp.MustCompile("[[:space:][:blank:]]")</pre></code></td></tr><tr><td>104</td><td><code><pre> newStrByte := regExp.ReplaceAll([]byte(newStr), []byte("_"))</pre></code></td></tr><tr><td>105</td><td><code><pre></pre></code></td></tr><tr><td>106</td><td><code><pre> regExp = regexp.MustCompile("`[^a-z0-9]`i")</pre></code></td></tr><tr><td>107</td><td><code><pre> newStrByte = regExp.ReplaceAll(newStrByte, []byte("_"))</pre></code></td></tr><tr><td>108</td><td><code><pre></pre></code></td></tr><tr><td>109</td><td><code><pre> regExp = regexp.MustCompile("[!/']")</pre></code></td></tr><tr><td>110</td><td><code><pre> newStrByte = regExp.ReplaceAll(newStrByte, []byte("_"))</pre></code></td></tr><tr><td>111</td><td><code><pre></pre></code></td></tr><tr><td>112</td><td><code><pre> // and remove underscore from beginning and ending</pre></code></td></tr><tr><td>113</td><td><code><pre></pre></code></td></tr><tr><td>114</td><td><code><pre> newStr = strings.TrimPrefix(string(newStrByte), "_")</pre></code></td></tr><tr><td>115</td><td><code><pre> newStr = strings.TrimSuffix(newStr, "_")</pre></code></td></tr><tr><td>116</td><td><code><pre></pre></code></td></tr><tr><td>117</td><td><code><pre> return newStr</pre></code></td></tr><tr><td>118</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_NewSHA1Hash">func NewSHA1Hash</div><div class="info"><a href="#s_fn_NewSHA1Hash">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/encryption.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>32</td><td><code><pre>func NewSHA1Hash(n ...int) string {</pre></code></td></tr><tr><td>33</td><td><code><pre> noRandomCharacters := 32</pre></code></td></tr><tr><td>34</td><td><code><pre> if len(n) > 0 {</pre></code></td></tr><tr><td>35</td><td><code><pre> noRandomCharacters = n[0]</pre></code></td></tr><tr><td>36</td><td><code><pre> }</pre></code></td></tr><tr><td>37</td><td><code><pre> randString := RandomString(noRandomCharacters)</pre></code></td></tr><tr><td>38</td><td><code><pre> hash := sha1.New()</pre></code></td></tr><tr><td>39</td><td><code><pre> hash.Write([]byte(randString))</pre></code></td></tr><tr><td>40</td><td><code><pre> bs := hash.Sum(nil)</pre></code></td></tr><tr><td>41</td><td><code><pre> return fmt.Sprintf("%x", bs)</pre></code></td></tr><tr><td>42</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Http">func Http</div><div class="info"><a href="#s_fn_Http">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>126</td><td><code><pre>func Http(r *http.Request) string {</pre></code></td></tr><tr><td>127</td><td><code><pre> msg := fmt.Sprintf("%v (%v) | IP: %v", r.RequestURI, r.Method, r.Host)</pre></code></td></tr><tr><td>128</td><td><code><pre> fmtLogs.Printf("WEB: %v\n", msg)</pre></code></td></tr><tr><td>129</td><td><code><pre> fmt.Printf("WEB: %v\n", msg)</pre></code></td></tr><tr><td>130</td><td><code><pre> pushLastLine(msg)</pre></code></td></tr><tr><td>131</td><td><code><pre> return msg</pre></code></td></tr><tr><td>132</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DeleteFile">func DeleteFile</div><div class="info"><a href="#s_fn_DeleteFile">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>131</td><td><code><pre>func DeleteFile(file string) error {</pre></code></td></tr><tr><td>132</td><td><code><pre> Log(1, "deleting file: "+file)</pre></code></td></tr><tr><td>133</td><td><code><pre> err := os.Remove(file)</pre></code></td></tr><tr><td>134</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>135</td><td><code><pre> return err</pre></code></td></tr><tr><td>136</td><td><code><pre> }</pre></code></td></tr><tr><td>137</td><td><code><pre> return nil</pre></code></td></tr><tr><td>138</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_newLogRow">func newLogRow</div><div class="info"><a href="#s_fn_newLogRow">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>159</td><td><code><pre>func newLogRow(line interface{}) (logRow *LogRow) {</pre></code></td></tr><tr><td>160</td><td><code><pre> logRow = new(LogRow)</pre></code></td></tr><tr><td>161</td><td><code><pre> logRow.Date = time.Now()</pre></code></td></tr><tr><td>162</td><td><code><pre> logRow.Line = line</pre></code></td></tr><tr><td>163</td><td><code><pre> return</pre></code></td></tr><tr><td>164</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_RandomString">func RandomString</div><div class="info"><a href="#s_fn_RandomString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/encryption.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>47</td><td><code><pre>func RandomString(n int) string {</pre></code></td></tr><tr><td>48</td><td><code><pre> b := make([]rune, n)</pre></code></td></tr><tr><td>49</td><td><code><pre> for i := range b {</pre></code></td></tr><tr><td>50</td><td><code><pre> b[i] = characterRunes[rand.Intn(len(characterRunes))]</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr><td>52</td><td><code><pre> return string(b)</pre></code></td></tr><tr><td>53</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Timezoner">func Timezoner</div><div class="info"><a href="#s_fn_Timezoner">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>69</td><td><code><pre>func Timezoner(t time.Time, zone float32) time.Time {</pre></code></td></tr><tr><td>70</td><td><code><pre> zoneInt := float32(3600) * (zone + 1)</pre></code></td></tr><tr><td>71</td><td><code><pre> loc := time.FixedZone("", int(zoneInt))</pre></code></td></tr><tr><td>72</td><td><code><pre> timez := t.In(loc)</pre></code></td></tr><tr><td>73</td><td><code><pre> return timez</pre></code></td></tr><tr><td>74</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_rotate">func rotate</div><div class="info"><a href="#s_fn_rotate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>81</td><td><code><pre>func rotate() {</pre></code></td></tr><tr><td>82</td><td><code><pre> c := make(chan os.Signal, 1)</pre></code></td></tr><tr><td>83</td><td><code><pre> signal.Notify(c, syscall.SIGHUP)</pre></code></td></tr><tr><td>84</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>85</td><td><code><pre> for {</pre></code></td></tr><tr><td>86</td><td><code><pre> <-c</pre></code></td></tr><tr><td>87</td><td><code><pre> ljLogger.Rotate()</pre></code></td></tr><tr><td>88</td><td><code><pre> }</pre></code></td></tr><tr><td>89</td><td><code><pre> }()</pre></code></td></tr><tr><td>90</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@84:5">func @84:5</div><div class="info"><a href="#s_fn_@84:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>84</td><td><code><pre>func() {</pre></code></td></tr><tr><td>85</td><td><code><pre> for {</pre></code></td></tr><tr><td>86</td><td><code><pre> <-c</pre></code></td></tr><tr><td>87</td><td><code><pre> ljLogger.Rotate()</pre></code></td></tr><tr><td>88</td><td><code><pre> }</pre></code></td></tr><tr><td>89</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_HashPassword">func HashPassword</div><div class="info"><a href="#s_fn_HashPassword">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/encryption.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>26</td><td><code><pre>func HashPassword(password string) string {</pre></code></td></tr><tr><td>27</td><td><code><pre> bytes, _ := bcrypt.GenerateFromPassword([]byte(password), 14)</pre></code></td></tr><tr><td>28</td><td><code><pre> return string(bytes)</pre></code></td></tr><tr><td>29</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Timestamp.Ago">func Timestamp.Ago</div><div class="info"><a href="#s_fn_Timestamp.Ago">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>91</td><td><code><pre>func (t Timestamp) Ago() string {</pre></code></td></tr><tr><td>92</td><td><code><pre> got, _ := timeago.TimeAgoWithTime(time.Now(), time.Time(t))</pre></code></td></tr><tr><td>93</td><td><code><pre> return got</pre></code></td></tr><tr><td>94</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_StringInt">func StringInt</div><div class="info"><a href="#s_fn_StringInt">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>45</td><td><code><pre>func StringInt(s string) int64 {</pre></code></td></tr><tr><td>46</td><td><code><pre> num, _ := strconv.Atoi(s)</pre></code></td></tr><tr><td>47</td><td><code><pre> return int64(num)</pre></code></td></tr><tr><td>48</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DeleteDirectory">func DeleteDirectory</div><div class="info"><a href="#s_fn_DeleteDirectory">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>141</td><td><code><pre>func DeleteDirectory(directory string) error {</pre></code></td></tr><tr><td>142</td><td><code><pre> return os.RemoveAll(directory)</pre></code></td></tr><tr><td>143</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_rev">func rev</div><div class="info"><a href="#s_fn_rev">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/time.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>76</td><td><code><pre>func rev(f float64) float64 {</pre></code></td></tr><tr><td>77</td><td><code><pre> return f * -1</pre></code></td></tr><tr><td>78</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_pushLastLine">func pushLastLine</div><div class="info"><a href="#s_fn_pushLastLine">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>134</td><td><code><pre>func pushLastLine(line interface{}) {</pre></code></td></tr><tr><td>135</td><td><code><pre> LockLines.Lock()</pre></code></td></tr><tr><td>136</td><td><code><pre> defer LockLines.Unlock()</pre></code></td></tr><tr><td>137</td><td><code><pre> LastLines = append(LastLines, newLogRow(line))</pre></code></td></tr><tr><td>138</td><td><code><pre> // We want to store max 1000 lines in memory (for /logs page).</pre></code></td></tr><tr><td>139</td><td><code><pre> for len(LastLines) > 1000 {</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> LastLines = LastLines[1:]</pre></code></td></tr><tr><td>141</td><td><code><pre> }</pre></code></td></tr><tr><td>142</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_InitLogs">func InitLogs</div><div class="info"><a href="#s_fn_InitLogs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>58</td><td><code><pre>func InitLogs() error {</pre></code></td></tr><tr><td>59</td><td><code><pre> err := createLog(Directory)</pre></code></td></tr><tr><td>60</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> return err</pre></code></td></tr><tr><td>62</td><td><code><pre> }</pre></code></td></tr><tr><td>63</td><td><code><pre> logFile, err = os.OpenFile(Directory+"/logs/statup.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)</pre></code></td></tr><tr><td>64</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> log.Printf("ERROR opening file: %v", err)</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> return err</pre></code></td></tr><tr><td>67</td><td><code><pre> }</pre></code></td></tr><tr><td>68</td><td><code><pre> ljLogger = &lumberjack.Logger{</pre></code></td></tr><tr><td>69</td><td><code><pre> Filename: Directory + "/logs/statup.log",</pre></code></td></tr><tr><td>70</td><td><code><pre> MaxSize: 16,</pre></code></td></tr><tr><td>71</td><td><code><pre> MaxBackups: 3,</pre></code></td></tr><tr><td>72</td><td><code><pre> MaxAge: 28,</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> fmtLogs = log.New(logFile, "", log.Ldate|log.Ltime)</pre></code></td></tr><tr><td>75</td><td><code><pre> log.SetOutput(ljLogger)</pre></code></td></tr><tr><td>76</td><td><code><pre> rotate()</pre></code></td></tr><tr><td>77</td><td><code><pre> LastLines = make([]*LogRow, 0)</pre></code></td></tr><tr><td>78</td><td><code><pre> return err</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>36</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>37</td><td><code><pre> if os.Getenv("STATUP_DIR") != "" {</pre></code></td></tr><tr><td>38</td><td><code><pre> Directory = os.Getenv("STATUP_DIR")</pre></code></td></tr><tr><td>39</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>40</td><td><code><pre> Directory = dir()</pre></code></td></tr><tr><td>41</td><td><code><pre> }</pre></code></td></tr><tr><td>42</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_createLog">func createLog</div><div class="info"><a href="#s_fn_createLog">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>39</td><td><code><pre>func createLog(dir string) error {</pre></code></td></tr><tr><td>40</td><td><code><pre> var err error</pre></code></td></tr><tr><td>41</td><td><code><pre> _, err = os.Stat(dir + "/logs")</pre></code></td></tr><tr><td>42</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>43</td><td><code><pre> if os.IsNotExist(err) {</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> os.Mkdir(dir+"/logs", 0777)</pre></code></td></tr><tr><td>45</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>46</td><td><code><pre> return err</pre></code></td></tr><tr><td>47</td><td><code><pre> }</pre></code></td></tr><tr><td>48</td><td><code><pre> }</pre></code></td></tr><tr><td>49</td><td><code><pre> file, err := os.Create(dir + "/logs/statup.log")</pre></code></td></tr><tr><td>50</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> return err</pre></code></td></tr><tr><td>52</td><td><code><pre> }</pre></code></td></tr><tr><td>53</td><td><code><pre> defer file.Close()</pre></code></td></tr><tr><td>54</td><td><code><pre> return err</pre></code></td></tr><tr><td>55</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_FileExists">func FileExists</div><div class="info"><a href="#s_fn_FileExists">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>121</td><td><code><pre>func FileExists(name string) bool {</pre></code></td></tr><tr><td>122</td><td><code><pre> if _, err := os.Stat(name); err != nil {</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> if os.IsNotExist(err) {</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return false</pre></code></td></tr><tr><td>125</td><td><code><pre> }</pre></code></td></tr><tr><td>126</td><td><code><pre> }</pre></code></td></tr><tr><td>127</td><td><code><pre> return true</pre></code></td></tr><tr><td>128</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_DurationReadable">func DurationReadable</div><div class="info"><a href="#s_fn_DurationReadable">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>200</td><td><code><pre>func DurationReadable(d time.Duration) string {</pre></code></td></tr><tr><td>201</td><td><code><pre> if d.Hours() >= 1 {</pre></code></td></tr><tr class="miss"><td>202</td><td><code><pre> return fmt.Sprintf("%0.0f hours", d.Hours())</pre></code></td></tr><tr><td>203</td><td><code><pre> } else if d.Minutes() >= 1 {</pre></code></td></tr><tr><td>204</td><td><code><pre> return fmt.Sprintf("%0.0f minutes", d.Minutes())</pre></code></td></tr><tr class="miss"><td>205</td><td><code><pre> } else if d.Seconds() >= 1 {</pre></code></td></tr><tr class="miss"><td>206</td><td><code><pre> return fmt.Sprintf("%0.0f seconds", d.Seconds())</pre></code></td></tr><tr><td>207</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>208</td><td><code><pre> return d.String()</pre></code></td></tr><tr><td>209</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_FormatDuration">func FormatDuration</div><div class="info"><a href="#s_fn_FormatDuration">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/time.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>23</td><td><code><pre>func FormatDuration(d time.Duration) string {</pre></code></td></tr><tr><td>24</td><td><code><pre> var out string</pre></code></td></tr><tr><td>25</td><td><code><pre> if d.Hours() >= 24 {</pre></code></td></tr><tr class="miss"><td>26</td><td><code><pre> out = fmt.Sprintf("%0.0f day", d.Hours()/24)</pre></code></td></tr><tr class="miss"><td>27</td><td><code><pre> if (d.Hours() / 24) >= 2 {</pre></code></td></tr><tr class="miss"><td>28</td><td><code><pre> out += "s"</pre></code></td></tr><tr><td>29</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>30</td><td><code><pre> return out</pre></code></td></tr><tr><td>31</td><td><code><pre> } else if d.Hours() >= 1 {</pre></code></td></tr><tr class="miss"><td>32</td><td><code><pre> out = fmt.Sprintf("%0.0f hour", d.Hours())</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> if d.Hours() >= 2 {</pre></code></td></tr><tr class="miss"><td>34</td><td><code><pre> out += "s"</pre></code></td></tr><tr><td>35</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>36</td><td><code><pre> return out</pre></code></td></tr><tr><td>37</td><td><code><pre> } else if d.Minutes() >= 1 {</pre></code></td></tr><tr><td>38</td><td><code><pre> out = fmt.Sprintf("%0.0f minute", d.Minutes())</pre></code></td></tr><tr><td>39</td><td><code><pre> if d.Minutes() >= 2 {</pre></code></td></tr><tr><td>40</td><td><code><pre> out += "s"</pre></code></td></tr><tr><td>41</td><td><code><pre> }</pre></code></td></tr><tr><td>42</td><td><code><pre> return out</pre></code></td></tr><tr><td>43</td><td><code><pre> } else if d.Seconds() >= 1 {</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> out = fmt.Sprintf("%0.0f second", d.Seconds())</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> if d.Seconds() >= 2 {</pre></code></td></tr><tr class="miss"><td>46</td><td><code><pre> out += "s"</pre></code></td></tr><tr><td>47</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> return out</pre></code></td></tr><tr><td>49</td><td><code><pre> } else if rev(d.Hours()) >= 24 {</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> out = fmt.Sprintf("%0.0f day", rev(d.Hours()/24))</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> if rev(d.Hours()/24) >= 2 {</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> out += "s"</pre></code></td></tr><tr><td>53</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> return out</pre></code></td></tr><tr><td>55</td><td><code><pre> } else if rev(d.Hours()) >= 1 {</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> out = fmt.Sprintf("%0.0f hour", rev(d.Hours()))</pre></code></td></tr><tr class="miss"><td>57</td><td><code><pre> if rev(d.Hours()) >= 2 {</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> out += "s"</pre></code></td></tr><tr><td>59</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> return out</pre></code></td></tr><tr><td>61</td><td><code><pre> } else if rev(d.Minutes()) >= 1 {</pre></code></td></tr><tr><td>62</td><td><code><pre> out = fmt.Sprintf("%0.0f minute", rev(d.Minutes()))</pre></code></td></tr><tr><td>63</td><td><code><pre> if rev(d.Minutes()) >= 2 {</pre></code></td></tr><tr class="miss"><td
|
||
|
|
||
|
<div class="funcname" id="fn_ToString">func ToString</div><div class="info"><a href="#s_fn_ToString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>51</td><td><code><pre>func ToString(s interface{}) string {</pre></code></td></tr><tr><td>52</td><td><code><pre> switch v := s.(type) {</pre></code></td></tr><tr><td>53</td><td><code><pre> case int, int32, int64:</pre></code></td></tr><tr><td>54</td><td><code><pre> return fmt.Sprintf("%v", v)</pre></code></td></tr><tr><td>55</td><td><code><pre> case float32, float64:</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> return fmt.Sprintf("%v", v)</pre></code></td></tr><tr><td>57</td><td><code><pre> case []byte:</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> return string(v)</pre></code></td></tr><tr><td>59</td><td><code><pre> case bool:</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> if v {</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> return "true"</pre></code></td></tr><tr><td>62</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> return "false"</pre></code></td></tr><tr><td>64</td><td><code><pre> default:</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> return fmt.Sprintf("%v", v)</pre></code></td></tr><tr><td>66</td><td><code><pre> }</pre></code></td></tr><tr><td>67</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_Command">func Command</div><div class="info"><a href="#s_fn_Command">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>146</td><td><code><pre>func Command(cmd string) (string, string, error) {</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> Log(1, "running command: "+cmd)</pre></code></td></tr><tr class="miss"><td>148</td><td><code><pre> testCmd := exec.Command("sh", "-c", cmd)</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> var stdout, stderr []byte</pre></code></td></tr><tr class="miss"><td>150</td><td><code><pre> var errStdout, errStderr error</pre></code></td></tr><tr class="miss"><td>151</td><td><code><pre> stdoutIn, _ := testCmd.StdoutPipe()</pre></code></td></tr><tr class="miss"><td>152</td><td><code><pre> stderrIn, _ := testCmd.StderrPipe()</pre></code></td></tr><tr class="miss"><td>153</td><td><code><pre> testCmd.Start()</pre></code></td></tr><tr><td>154</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>155</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>156</td><td><code><pre> stdout, errStdout = copyAndCapture(os.Stdout, stdoutIn)</pre></code></td></tr><tr><td>157</td><td><code><pre> }()</pre></code></td></tr><tr><td>158</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>160</td><td><code><pre> stderr, errStderr = copyAndCapture(os.Stderr, stderrIn)</pre></code></td></tr><tr><td>161</td><td><code><pre> }()</pre></code></td></tr><tr><td>162</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>163</td><td><code><pre> err := testCmd.Wait()</pre></code></td></tr><tr class="miss"><td>164</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> return "", "", err</pre></code></td></tr><tr><td>166</td><td><code><pre> }</pre></code></td></tr><tr><td>167</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> if errStdout != nil || errStderr != nil {</pre></code></td></tr><tr class="miss"><td>169</td><td><code><pre> return "", "", errors.New("failed to capture stdout or stderr")</pre></code></td></tr><tr><td>170</td><td><code><pre> }</pre></code></td></tr><tr><td>171</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> outStr, errStr := string(stdout), string(stderr)</pre></code></td></tr><tr class="miss"><td>173</td><td><code><pre> return outStr, errStr, err</pre></code></td></tr><tr><td>174</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_copyAndCapture">func copyAndCapture</div><div class="info"><a href="#s_fn_copyAndCapture">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>177</td><td><code><pre>func copyAndCapture(w io.Writer, r io.Reader) ([]byte, error) {</pre></code></td></tr><tr class="miss"><td>178</td><td><code><pre> var out []byte</pre></code></td></tr><tr class="miss"><td>179</td><td><code><pre> buf := make([]byte, 1024, 1024)</pre></code></td></tr><tr class="miss"><td>180</td><td><code><pre> for {</pre></code></td></tr><tr class="miss"><td>181</td><td><code><pre> n, err := r.Read(buf[:])</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> if n > 0 {</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> d := buf[:n]</pre></code></td></tr><tr class="miss"><td>184</td><td><code><pre> out = append(out, d...)</pre></code></td></tr><tr class="miss"><td>185</td><td><code><pre> _, err := w.Write(d)</pre></code></td></tr><tr class="miss"><td>186</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>187</td><td><code><pre> return out, err</pre></code></td></tr><tr><td>188</td><td><code><pre> }</pre></code></td></tr><tr><td>189</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>190</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>191</td><td><code><pre> // Read returns io.EOF at the end of file, which is not an error for us</pre></code></td></tr><tr class="miss"><td>192</td><td><code><pre> if err == io.EOF {</pre></code></td></tr><tr class="miss"><td>193</td><td><code><pre> err = nil</pre></code></td></tr><tr><td>194</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>195</td><td><code><pre> return out, err</pre></code></td></tr><tr><td>196</td><td><code><pre> }</pre></code></td></tr><tr><td>197</td><td><code><pre> }</pre></code></td></tr><tr><td>198</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_GetLastLine">func GetLastLine</div><div class="info"><a href="#s_fn_GetLastLine">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>145</td><td><code><pre>func GetLastLine() *LogRow {</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> LockLines.Lock()</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> defer LockLines.Unlock()</pre></code></td></tr><tr class="miss"><td>148</td><td><code><pre> if len(LastLines) > 0 {</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> return LastLines[len(LastLines)-1]</pre></code></td></tr><tr><td>150</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>151</td><td><code><pre> return nil</pre></code></td></tr><tr><td>152</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_LogRow.lineAsString">func LogRow.lineAsString</div><div class="info"><a href="#s_fn_LogRow.lineAsString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>166</td><td><code><pre>func (o *LogRow) lineAsString() string {</pre></code></td></tr><tr class="miss"><td>167</td><td><code><pre> switch v := o.Line.(type) {</pre></code></td></tr><tr><td>168</td><td><code><pre> case string:</pre></code></td></tr><tr class="miss"><td>169</td><td><code><pre> return v</pre></code></td></tr><tr><td>170</td><td><code><pre> case error:</pre></code></td></tr><tr class="miss"><td>171</td><td><code><pre> return v.Error()</pre></code></td></tr><tr><td>172</td><td><code><pre> case []byte:</pre></code></td></tr><tr class="miss"><td>173</td><td><code><pre> return string(v)</pre></code></td></tr><tr><td>174</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>175</td><td><code><pre> return ""</pre></code></td></tr><tr><td>176</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_dir">func dir</div><div class="info"><a href="#s_fn_dir">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>77</td><td><code><pre>func dir() string {</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> dir, err := os.Getwd()</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> return "."</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> return dir</pre></code></td></tr><tr><td>83</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_LogRow.FormatForHtml">func LogRow.FormatForHtml</div><div class="info"><a href="#s_fn_LogRow.FormatForHtml">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>178</td><td><code><pre>func (o *LogRow) FormatForHtml() string {</pre></code></td></tr><tr class="miss"><td>179</td><td><code><pre> return fmt.Sprintf("%s: %s", o.Date.Format("2006-01-02 15:04:05"), o.lineAsString())</pre></code></td></tr><tr><td>180</td><td><code><pre>}</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@155:5">func @155:5</div><div class="info"><a href="#s_fn_@155:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>155</td><td><code><pre>func() {</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> stdout, errStdout = copyAndCapture(os.Stdout, stdoutIn)</pre></code></td></tr><tr><td>157</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<div class="funcname" id="fn_@159:5">func @159:5</div><div class="info"><a href="#s_fn_@159:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
|
||
|
<tr><td>159</td><td><code><pre>func() {</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> stderr, errStderr = copyAndCapture(os.Stderr, stderrIn)</pre></code></td></tr><tr><td>161</td><td><code><pre> }</pre></code></td></tr></table>
|
||
|
|
||
|
<!-- Can be parsed by external script
|
||
|
PACKAGE:github.com/hunterlong/statup/utils DONE:55.29
|
||
|
-->
|
||
|
|
||
|
<div id="summaryWrapper"><div class="package">Report Total</div>
|
||
|
<div id="totalcov">54.54%</div>
|
||
|
</div>
|
||
|
</body>
|