diff --git a/.gitignore b/.gitignore index daf913b..0e9448e 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ _testmain.go *.exe *.test *.prof + +.idea/ diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..1dd7b46 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +language: go + +sudo: false + +go: + - 1.6 + - 1.7 + +script: + - go test -v ./... \ No newline at end of file diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json new file mode 100644 index 0000000..d401d2b --- /dev/null +++ b/Godeps/Godeps.json @@ -0,0 +1,16 @@ +{ + "ImportPath": "github.com/mpmlj/http-traffic-monitor", + "GoVersion": "go1.7", + "GodepVersion": "v78", + "Deps": [ + { + "ImportPath": "github.com/daviddengcn/go-colortext", + "Rev": "805cee6e0d43c72ba1d4e3275965ff41e0da068a" + }, + { + "ImportPath": "github.com/satyrius/gonx", + "Comment": "v1.3.0-13-g1df230d", + "Rev": "1df230dfbb9d7262c1c9fe2715d74bcf155d982a" + } + ] +} diff --git a/Godeps/Readme b/Godeps/Readme new file mode 100644 index 0000000..4cdaa53 --- /dev/null +++ b/Godeps/Readme @@ -0,0 +1,5 @@ +This directory tree is generated automatically by godep. + +Please do not edit. + +See https://github.com/tools/godep for more information. diff --git a/README.md b/README.md index a35ac8e..5f54f62 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,180 @@ -# http-traffic-monitor -HTTP traffic monitor +# HTTP Traffic Monitor + +[![HTTP Traffic Monitor](https://goreportcard.com/badge/github.com/mpmlj/http-traffic-monitor)](https://goreportcard.com/report/github.com/mpmlj/http-traffic-monitor) [![Build Status](https://travis-ci.org/mpmlj/http-traffic-monitor.svg)](https://travis-ci.org/mpmlj/http-traffic-monitor) + +## Code Challenge + +Create a simple console program that monitors HTTP traffic on your machine: + +- Consume an actively written-to w3c-formatted HTTP access log (https://en.wikipedia.org/wiki/Common_Log_Format) + +- Every 10s, display in the console the sections of the web site with the most hits (a section is defined as being what's before the second '/' in a URL. i.e. the section for "http://my.site.com/pages/create' is "http://my.site.com/pages"), as well as interesting summary statistics on the traffic as a whole. + +- Make sure a user can keep the console app running and monitor traffic on their machine + +- Whenever total traffic for the past 2 minutes exceeds a certain number on average, add a message saying that “High traffic generated an alert - hits = {value}, triggered at {time}” + +- Whenever the total traffic drops again below that value on average for the past 2 minutes, add another message detailing when the alert recovered + +- Make sure all messages showing when alerting thresholds are crossed remain visible on the page for historical reasons. + +- Write a test for the alerting logic + +- Explain how you’d improve on this application design + +## General notes + +- The program streams information to stdout in chronological order. +- There are three types of messages:
+-- point, notification about data check at every log file poll
+-- report, traffic summary prepared at user-defined intervals
+-- alert, notification about traffic average exceeding crossing a threshold
+- Each of these message types can be silenced for testing or usability purposes. + +## Script arguments and defaults + +##### Available for configuration by user: + +` --log-file` - log file location, required. + +`--alert-threshold` - alert threshold, _hits/sec._, default 1000 hits, optional. + +`--poll-interval` - polling interval, _sec._, default 1 sec., optional. + +`--mtf` - monitoring time frame, _sec._, default 120 sec., optional. + +`--top-n` - # most visited sections, _sec._, default 10, optional. + +`--report-interval` - interval for showing traffic report, _sec., default 10, optional. + +Below - configuration for the code challenge (should be run from the repository root location): + +`./bin/http-traffic-monitor --log-file=log/server.log --alert-threshold=2 --poll-interval=1 --mtf=120 --top-n=5 --report-interval=10` + +It will run the monitor to: +- show a summary report every 10 seconds with top 5 most visited sections +- trigger an alert escalation and de-escalation based on a 2-minute moving average + +##### Unavailable for external configuration, used for testing and debugging: + +See Config struct in `config.go`: + +- `MaxPolls` (int) limits duration of the monitor via maximum number of ticks (= polls, 1 second minimum) it should make before exiting. By default it is set to maximum int32 number and I hope 68 years should be enough for majority of users... :) However, set to a lower number when configuring monitor tests. For example, to test escalation and deescalation I set it to 2-3 seconds as this is enough to accumulate data for these tests. + +- `SendAlerts`, `SendReports` and `SendTicks` (bool) flags are used to silence certain types of output messages. Required to remove noise when testing one specific behavior. For example, I silenced ticks and reports to be able to test alert messaging from the monitor. + + +## Testing + +##### Notes on manual testing + +- `"log"` folder contains a source log files for manual testing. + +- `server.log` is an (originally) empty file you can use to add records. + +- `src.log` is an example/source log file with 1000 entries of Common Log Format. + +- To test script behavior, append to file with `echo >>`, do not change the log file using vim, etc. and this will trigger `rename` OS event and the script will loose file handler and stop monitoring this particular file. + +- Example of a script configuration for testing, with low levels, to more easily trigger state changes:
+`./bin/http-traffic-monitor --log-file=log/server.log --alert-threshold=2 --poll-interval=1 --mtf=10 --top-n=5 --report-interval=3` + +##### Sample echo commands + +6 log entries with different response codes: + +```` +echo ' +165.13.14.55 - - [28/Jul/1995:13:17:00 -0400] "GET /history/apollo/apollo-17/apollo-17-info.html HTTP/1.0" 200 1457 +198.155.12.13 - - [28/Jul/1995:13:17:07 -0400] "GET /shuttle/countdown/liftoff.html HTTP/1.0" 200 5220 +182.200.120.1 - - [28/Jul/1995:13:17:08 -0400] "GET /shuttle/countdown/count.html HTTP/1.0" 500 65536 +198.155.12.16 - - [28/Jul/1995:13:17:09 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 400 786 +182.200.120.2 - - [28/Jul/1995:13:17:08 -0400] "GET /shuttle/countdown/count.html HTTP/1.0" 300 65536 +182.200.120.3 - - [28/Jul/1995:13:17:08 -0400] "GET /shuttle/countdown/count.html HTTP/1.0" 500 65536 +' >> server.log +```` + +20 log entries to trigger an alert: + +```` +echo ' +131.182.170.137 - - [28/Jul/1995:13:16:31 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +210.166.12.00 - - [28/Jul/1995:13:16:31 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +128.203.26.245 - - [28/Jul/1995:13:16:32 -0400] "GET /software HTTP/1.0" 302 1 +128.203.26.245 - - [28/Jul/1995:13:16:33 -0400] "GET /software/ HTTP/1.0" 200 816 +198.155.12.13 - - [28/Jul/1995:13:16:34 -0400] "GET /history/apollo/apollo-13/images/ HTTP/1.0" 200 1851 +128.203.26.245 - - [28/Jul/1995:13:16:35 -0400] "GET /icons/blank.xbm HTTP/1.0" 401 509 +128.203.26.245 - - [28/Jul/1995:13:16:35 -0400] "GET /icons/menu.xbm HTTP/1.0" 400 527 +131.182.170.137 - - [28/Jul/1995:13:16:36 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +198.240.108.240 - - [28/Jul/1995:13:16:37 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +198.240.108.240 - - [28/Jul/1995:13:16:40 -0400] "GET /icons/menu.xbm HTTP/1.0" 401 527 +131.182.170.137 - - [28/Jul/1995:13:16:40 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.240.108.240 - - [28/Jul/1995:13:16:43 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +128.203.26.245 - - [28/Jul/1995:13:16:43 -0400] "GET /software/winvn/ HTTP/1.0" 500 2244 +128.203.26.245 - - [28/Jul/1995:13:16:45 -0400] "GET /icons/image.xbm HTTP/1.0" 201 509 +128.203.26.245 - - [28/Jul/1995:13:16:45 -0400] "GET /icons/text.xbm HTTP/1.0" 200 527 +198.240.108.240 - - [28/Jul/1995:13:16:46 -0400] "GET /icons/unknown.xbm HTTP/1.0" 302 515 +182.198.120.1 - - [28/Jul/1995:13:16:47 -0400] "GET /shuttle/technology/sts-newsref/srb.html HTTP/1.0" 200 49553 +182.200.120.1 - - [28/Jul/1995:13:16:47 -0400] "GET /htbin/wais.pl?SAREX-II HTTP/1.0" 502 7111 +210.166.12.92 - - [28/Jul/1995:13:16:47 -0400] "GET /shuttle/missions/sts-71/sts-71-press-kit.txt HTTP/1.0" 502 78588 +198.155.12.13 - - [28/Jul/1995:13:19:30 -0400] "GET /shuttle/missions/sts-65/mission-sts-65.html HTTP/1.0" 200 131165 +' >> server.log +```` + +##### Notes on testing with "go test" + + To test alerting (de)escalation logic only, run `go test -v -run TestMonitor`. + + +## UI description + +#### Points + +` · hits avg: 4 / 2`
First number - average number of hits received since last tick. +Second - number alert threshold. +When average number of hits exceeds threshold, the number will marked in red. + +#### Report +```` +-------------------------------------------------------------------------------- +REPORT: 2017-02-06T01:44:41-05:00 + +Top 5 sections +| sections | count +-------------------------------------------------------------------------------- +| /shuttle | 24 +| /images | 6 +| /history | 6 + +Summary: +| hits total | hits/s | 2xx | 3xx | 4xx | 5xx +-------------------------------------------------------------------------------- +| 36 | 12 | 12 | 6 | 6 | 12 +```` + +#### Alerts + +```` + · High traffic generated an alert - hits = 2, triggered at 2017-02-06T01:48:10-05:00 +```` + + +```` + · High traffic alert recovered. Current hits = 0. At 2017-02-06T01:48:20-05:00 +```` + +## Improvement considerations + +- Introduce a warning threshold level, that would signal approaching to an actual alert level. +- Implement other senders, ex. SNS, Pager Duty, Slack, email. +- Other log formats (combined, extended, custom via regex expressions, etc.). +- Implement better logic for reaction on logrotate - currently loses file handler due to a rename event from OS. +- Remove dependencies, implement custom parser. +- Implement spike detection via stand deviation calculation. +- I would also like to revise data types used throughout the script as I feel like there can be some optimizations required. + +## Other... + +- Add average request size. +- Add request methods to report. +- Better test coverage. diff --git a/bin/http-traffic-monitor b/bin/http-traffic-monitor new file mode 100755 index 0000000..a43ee54 Binary files /dev/null and b/bin/http-traffic-monitor differ diff --git a/config.go b/config.go new file mode 100644 index 0000000..d1faf66 --- /dev/null +++ b/config.go @@ -0,0 +1,77 @@ +package main + +import ( + "flag" + "math" +) + +const ( + // Argument defaults. + defAlertThreshold = 1000 // hits per interval + defMTF = 120 // Monitoring time frame, sec + defPollInt = 1 // sec, 1sec - minimum + defReportInt = 10 // Default stat summary interval, sec + defTopN = 10 + defSendAlerts = true + defSendReports = true + defSendTicks = true +) + +// Config is a program configuration object. +type Config struct { + AlertThreshold int + File string + MaxPolls int + MTF int // sec + PollInt int // sec + ReportInt int // sec + SendAlerts bool + SendReports bool + SendTicks bool + TopN uint +} + +// NewConfig initializes program configuration and runs basic validation of user-defined arguments. +// By default, all properties are set to def* constants. +func NewConfig() *Config { + at := flag.Int("alert-threshold", defAlertThreshold, "Alert threshold") + lf := flag.String("log-file", "", "Log file.") + mtf := flag.Int("mtf", defMTF, "Monitoring time frame (seconds)") + pi := flag.Int("poll-interval", defPollInt, "Log polling interval (seconds). 1 sec - mim allowed value.") + ri := flag.Int("report-interval", defReportInt, "Report interval.") + sa := flag.Bool("send-alerts", defSendAlerts, "Send alerts") + sr := flag.Bool("send-reports", defSendReports, "Send reports") + st := flag.Bool("send-ticks", defSendTicks, "Send tick information") + tn := flag.Uint("top-n", defTopN, "Number of top section hits displayed during polls") + flag.Parse() + + if *lf == "" { + panic("Log file is not provided.") + } + + if *pi < 1 { + panic("Invalid polling interval set. Minimal allowed value is 1 second.") + } + + if *ri < *pi { + // via pollInt we also check for reportInt to be > 0 + panic("Report interval cannot be smaller than polling interval.") + } + + if *mtf < *pi { + panic("Monitoring time frame cannot be smaller than polling interval.") + } + + return &Config{ + MaxPolls: math.MaxInt32 - 1, + AlertThreshold: *at, + File: *lf, + MTF: *mtf, + PollInt: *pi, + ReportInt: *ri, + SendAlerts: *sa, + SendReports: *sr, + SendTicks: *st, + TopN: *tn, + } +} diff --git a/entry.go b/entry.go new file mode 100644 index 0000000..4c09712 --- /dev/null +++ b/entry.go @@ -0,0 +1,63 @@ +package main + +import ( + "fmt" + "strings" + + "github.com/satyrius/gonx" +) + +// Entry represents a request based on a log entry data: +// "GET /shuttle/technology/sts-newsref/srb.html HTTP/1.0" 200 +type Entry struct { + Method string + Path string + parser *gonx.Parser + Section string + Protocol string + StatusCode string // response code to a given request +} + +// NewEntry represents log entry. +func NewEntry(p *gonx.Parser) *Entry { + return &Entry{ + parser: p, + } +} + +// ParseLine validate and parses a request part of a log entry and creates a Request object on success. +func (r *Entry) ParseLine(line string) error { + + e, err := r.parser.ParseString(line) + if err != nil { + return fmt.Errorf(" Error parsing log entry %s \n Err: %s ", line, err.Error()) + } + + rStr, err := e.Field("request") + if err != nil { + return err + } + + parts := strings.Fields(rStr) + if len(parts) != 3 { + return fmt.Errorf("Invalid structure of request part: %s", rStr) + } + + r.Method = parts[0] + r.Path = parts[1] + r.Protocol = parts[2] + + partParts := strings.Split(r.Path, "/") + + r.Section = "/" + if len(partParts) > 0 { + r.Section += partParts[1] + } + + r.StatusCode, err = e.Field("status") + if err != nil { + return err + } + + return nil +} diff --git a/entry_test.go b/entry_test.go new file mode 100644 index 0000000..7da0494 --- /dev/null +++ b/entry_test.go @@ -0,0 +1,51 @@ +package main + +import ( + "testing" + + "github.com/satyrius/gonx" +) + +func TestRequest_ParseEntry(t *testing.T) { + + parser := gonx.NewParser(parserFormat) + + testString := `182.198.120.1 - - [28/Jul/1995:13:16:47 -0400] "GET /shuttle/technology/sts-newsref/srb.html HTTP/1.0" 200 49553` + + r := NewEntry(parser) + err := r.ParseLine(testString) + if err != nil { + t.Fatalf("ParseEntry should not fail. Error: %+v", err) + } + + expected := "GET" + actual := r.Method + if expected != actual { + t.Errorf("Expected %s, got %s", expected, actual) + } + + expected = "/shuttle/technology/sts-newsref/srb.html" + actual = r.Path + if expected != actual { + t.Errorf("Expected %s, got %s", expected, actual) + } + + expected = "HTTP/1.0" + actual = r.Protocol + if expected != actual { + t.Errorf("Expected %s, got %s", expected, actual) + } + + expected = "/shuttle" + actual = r.Section + if expected != actual { + t.Errorf("Expected %s, got %s", expected, actual) + } + + expected2 := "200" + actual2 := r.StatusCode + if expected2 != actual2 { + t.Errorf("Expected %d, got %d", expected2, actual2) + } + +} diff --git a/frame.go b/frame.go new file mode 100644 index 0000000..eabe93f --- /dev/null +++ b/frame.go @@ -0,0 +1,56 @@ +package main + +import ( + "math" +) + +// Frame provides data collected and processed during one poll interval. +type Frame struct { + PointHits []int // timeline of hits per each point during MTF + AvgTraffic int + PointsQty int +} + +// NewFrame returns a new Frame with a pre-calculated quantity of points per frame. +func NewFrame(mtf, pollInt int) *Frame { + + // We monitor last "mtf" seconds of traffic + // and checking this time window every pollInt seconds, i.e. + // we need to store floor(mtf/pollInt) points. + return &Frame{ + PointsQty: calcPointsPerFrame(mtf, pollInt), + } +} + +// Rec adds quantity of hits for one point. +func (f *Frame) Rec(qty int) { + f.PointHits = append(f.PointHits, qty) + if len(f.PointHits) > f.PointsQty { + // remove 1 element from its head to keep the frame length consistent + f.PointHits = f.PointHits[1:] + } + + f.recalcAvgTraffic() +} + +// recalcAvgTraffic calculates average traffic volume based on accumulated traffic levels +// for each poll during the user-defined attention span. +func (f *Frame) recalcAvgTraffic() { + sum := 0 + for _, p := range f.PointHits { + sum += p + } + + f.AvgTraffic = calcAvgTraffic(sum, f.PointsQty) +} + +// calcAvgTraffic calculates average traffic level per point. Rounded down to nearest int. +func calcAvgTraffic(total, points int) int { + return int(math.Ceil(float64(total / points))) +} + +// calcPointsPerFrame calculates amount of points we need to store for current time frame. +// Based on user configuration. Rounded down to nearest int. +func calcPointsPerFrame(mtf, pollInt int) int { + return int(math.Floor(float64(mtf / pollInt))) +} diff --git a/frame_test.go b/frame_test.go new file mode 100644 index 0000000..d2cb449 --- /dev/null +++ b/frame_test.go @@ -0,0 +1,61 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestNewFrame(t *testing.T) { + + expected := &Frame{ + PointsQty: 2, + } + + actual := NewFrame(5, 2) + + if !reflect.DeepEqual(expected, actual) { + t.Error("Failed GetTopHits test!") + t.Log("Expected:") + t.Logf("%+v\n", expected) + + t.Log("Actual:") + t.Logf("%+v\n", actual) + } +} + +func TestFrame_Rec(t *testing.T) { + f := NewFrame(6, 2) // frame of 3 items + f.Rec(6) // should be removed + f.Rec(5) + f.Rec(2) + f.Rec(1) + + expected := []int{5, 2, 1} + + actual := f.PointHits + + if !reflect.DeepEqual(expected, actual) { + t.Error("Failed GetTopHits test!") + t.Log("Expected:") + t.Logf("%+v\n", expected) + + t.Log("Actual:") + t.Logf("%+v\n", actual) + t.Logf("PointQty: %d", f.PointsQty) + } +} + +func TestFrame_recalcAvgTraffic(t *testing.T) { + f := NewFrame(6, 2) // frame of 3 items + f.Rec(6) // should be removed + f.Rec(5) + f.Rec(2) + f.Rec(1) + + expected := 2 // floor( ( 5+2+1 ) / 3 ) + actual := f.AvgTraffic + + if expected != actual { + t.Errorf("TestFrame_recalcAvgTraffic / (%d, %d): expected %d, actual %d", 6, 2, expected, actual) + } +} diff --git a/hitlist.go b/hitlist.go new file mode 100644 index 0000000..e28402b --- /dev/null +++ b/hitlist.go @@ -0,0 +1,48 @@ +package main + +import ( + "sort" +) + +// Pair is a k/v bucket for HitList. +type Pair struct { + Key string + Value int +} + +// HitList is a map for sorted data with struct value types. +type HitList map[int]Pair + +// CutTopN returns top n hit sections from an interval data. +func CutTopN(h HitList, n uint) HitList { + + if len(h) <= int(n) { + return h + } + + out := HitList{} + for i := 0; i < int(n); i++ { + out[i] = h[i] + } + + return out +} + +// RankByHits sorts HitList in reverse order based on Pair Value. +func RankByHits(sectionHits map[string]int) HitList { + pl := make(HitList, len(sectionHits)) + if len(sectionHits) == 0 { + return pl + } + i := 0 + for k, v := range sectionHits { + pl[i] = Pair{k, v} + i++ + } + sort.Sort(sort.Reverse(pl)) + return pl +} + +func (p HitList) Len() int { return len(p) } +func (p HitList) Less(i, j int) bool { return p[i].Value < p[j].Value } +func (p HitList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } diff --git a/hitlist_test.go b/hitlist_test.go new file mode 100644 index 0000000..de2cfed --- /dev/null +++ b/hitlist_test.go @@ -0,0 +1,62 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestRankSectionsByHits(t *testing.T) { + testHitsMap := map[string]int{ + "/foo": 2, + "/foobar": 5, + "/barbaz": 4, + "/baz": 3, + "/bar": 1, + } + + expected := HitList{ + 0: Pair{"/foobar", 5}, + 1: Pair{"/barbaz", 4}, + 2: Pair{"/baz", 3}, + 3: Pair{"/foo", 2}, + 4: Pair{"/bar", 1}, + } + + actual := RankByHits(testHitsMap) // *HitList + + if !reflect.DeepEqual(expected, actual) { + t.Error("Failed RankSectionsByHits test!") + t.Log("Expected:") + t.Logf("%+v\n", expected) + + t.Log("Actual:") + t.Logf("%+v\n", actual) + } +} + +func TestCutTopN(t *testing.T) { + testHitList := HitList{ + 0: Pair{"/foobar", 5}, + 1: Pair{"/barbaz", 4}, + 2: Pair{"/baz", 3}, + 3: Pair{"/foo", 2}, + 4: Pair{"/bar", 1}, + } + + expected := HitList{ + 0: Pair{"/foobar", 5}, + 1: Pair{"/barbaz", 4}, + 2: Pair{"/baz", 3}, + } + + actual := CutTopN(testHitList, 3) + + if !reflect.DeepEqual(expected, actual) { + t.Error("Failed CutTopN test!") + t.Log("Expected:") + t.Logf("%+v\n", expected) + + t.Log("Actual:") + t.Logf("%+v\n", actual) + } +} diff --git a/log/server.log b/log/server.log new file mode 100644 index 0000000..e69de29 diff --git a/log/src.log b/log/src.log new file mode 100644 index 0000000..1d1884b --- /dev/null +++ b/log/src.log @@ -0,0 +1,1000 @@ +198.155.12.13 - - [28/Jul/1995:13:16:12 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +198.155.12.13 - - [28/Jul/1995:13:16:12 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +198.155.12.13 - - [28/Jul/1995:13:16:13 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +131.182.170.137 - - [28/Jul/1995:13:16:16 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.203.26.245 - - [28/Jul/1995:13:16:20 -0400] "GET /software/winvn/winvn.html HTTP/1.0" 200 9866 +198.240.108.240 - - [28/Jul/1995:13:16:21 -0400] "GET /images/ HTTP/1.0" 200 17688 +128.203.26.245 - - [28/Jul/1995:13:16:21 -0400] "GET /software/winvn/winvn.gif HTTP/1.0" 304 0 +128.203.26.245 - - [28/Jul/1995:13:16:21 -0400] "GET /images/construct.gif HTTP/1.0" 304 0 +128.203.26.245 - - [28/Jul/1995:13:16:21 -0400] "GET /software/winvn/bluemarb.gif HTTP/1.0" 304 0 +128.203.26.245 - - [28/Jul/1995:13:16:21 -0400] "GET /software/winvn/wvsmall.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:16:22 -0400] "GET /history/apollo/apollo-13/ HTTP/1.0" 200 1732 +198.155.12.13 - - [28/Jul/1995:13:16:23 -0400] "GET /icons/text.xbm HTTP/1.0" 200 527 +131.182.170.137 - - [28/Jul/1995:13:16:25 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.203.26.245 - - [28/Jul/1995:13:16:25 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 304 0 +128.203.26.245 - - [28/Jul/1995:13:16:25 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 304 0 +128.203.26.245 - - [28/Jul/1995:13:16:25 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 304 0 +128.203.26.245 - - [28/Jul/1995:13:16:25 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:16:25 -0400] "GET /history/mercury/flight-summary.txt HTTP/1.0" 200 959 +182.200.120.1 - - [28/Jul/1995:13:16:26 -0400] "GET /shuttle/technology/sts-newsref/et.html HTTP/1.0" 200 20327 +182.200.120.1 - - [28/Jul/1995:13:16:26 -0400] "GET /history/astp/astp.html HTTP/1.0" 200 1157 +182.200.120.1 - - [28/Jul/1995:13:16:26 -0400] "GET /history/astp/astp-patch-small.gif HTTP/1.0" 200 18528 +182.200.120.1 - - [28/Jul/1995:13:16:26 -0400] "GET /history/apollo/images/apollo-logo.gif HTTP/1.0" 200 3047 +182.200.120.1 - - [28/Jul/1995:13:16:26 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +182.200.120.1 - - [28/Jul/1995:13:16:27 -0400] "GET /shuttle/missions/sts-67/images/KSC-95EC-0391.gif HTTP/1.0" 200 77406 +198.155.12.92 - - [28/Jul/1995:13:16:31 -0400] "GET /shuttle/technology/sts-newsref/stsover-launch.html HTTP/1.0" 200 90755 +131.182.170.137 - - [28/Jul/1995:13:16:31 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +210.166.12.00 - - [28/Jul/1995:13:16:31 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +128.203.26.245 - - [28/Jul/1995:13:16:32 -0400] "GET /software HTTP/1.0" 302 - +128.203.26.245 - - [28/Jul/1995:13:16:33 -0400] "GET /software/ HTTP/1.0" 200 816 +198.155.12.13 - - [28/Jul/1995:13:16:34 -0400] "GET /history/apollo/apollo-13/images/ HTTP/1.0" 200 1851 +128.203.26.245 - - [28/Jul/1995:13:16:35 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +128.203.26.245 - - [28/Jul/1995:13:16:35 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +131.182.170.137 - - [28/Jul/1995:13:16:36 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +198.240.108.240 - - [28/Jul/1995:13:16:37 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +198.240.108.240 - - [28/Jul/1995:13:16:40 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +131.182.170.137 - - [28/Jul/1995:13:16:40 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.240.108.240 - - [28/Jul/1995:13:16:43 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +128.203.26.245 - - [28/Jul/1995:13:16:43 -0400] "GET /software/winvn/ HTTP/1.0" 200 2244 +128.203.26.245 - - [28/Jul/1995:13:16:45 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +128.203.26.245 - - [28/Jul/1995:13:16:45 -0400] "GET /icons/text.xbm HTTP/1.0" 200 527 +198.240.108.240 - - [28/Jul/1995:13:16:46 -0400] "GET /icons/unknown.xbm HTTP/1.0" 200 515 +182.198.120.1 - - [28/Jul/1995:13:16:47 -0400] "GET /shuttle/technology/sts-newsref/srb.html HTTP/1.0" 200 49553 +182.200.120.1 - - [28/Jul/1995:13:16:47 -0400] "GET /htbin/wais.pl?SAREX-II HTTP/1.0" 200 7111 +210.166.12.92 - - [28/Jul/1995:13:16:47 -0400] "GET /shuttle/missions/sts-71/sts-71-press-kit.txt HTTP/1.0" 200 78588 +128.159.77.122 - - [28/Jul/1995:13:16:48 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +128.159.77.122 - - [28/Jul/1995:13:16:48 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +131.182.170.137 - - [28/Jul/1995:13:16:48 -0400] "GET /elv/elvpage.htm HTTP/1.0" 200 7838 +128.159.77.122 - - [28/Jul/1995:13:16:49 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.159.77.122 - - [28/Jul/1995:13:16:49 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +128.159.77.122 - - [28/Jul/1995:13:16:50 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +128.159.77.122 - - [28/Jul/1995:13:16:50 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +222.218.120.1 - - [28/Jul/1995:13:16:51 -0400] "GET /shuttle/technology/images/sts_spec_6-small.gif HTTP/1.0" 200 47145 +198.155.12.13 - - [28/Jul/1995:13:16:51 -0400] "GET /history/apollo/apollo-13/movies/ HTTP/1.0" 200 945 +210.166.12.00 - - [28/Jul/1995:13:16:53 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.13 - - [28/Jul/1995:13:16:53 -0400] "GET /icons/movie.xbm HTTP/1.0" 200 530 +180.176.12.00 - - [28/Jul/1995:13:16:53 -0400] "GET /cgi-bin/imagemap/astrohome?272,285 HTTP/1.0" 302 93 +182.200.120.1 - - [28/Jul/1995:13:16:54 -0400] "GET /shuttle/missions/sts-71/mission-sts-71.html HTTP/1.0" 200 13452 +180.176.12.00 - - [28/Jul/1995:13:16:56 -0400] "GET /msfc/onboard/onboard.html HTTP/1.0" 200 1301 +165.137.62.110 - - [28/Jul/1995:13:16:56 -0400] "HEAD /software/winvn/winvn.html HTTP/1.0" 200 0 +131.182.170.137 - - [28/Jul/1995:13:16:58 -0400] "GET /elv/elvhead3.gif HTTP/1.0" 200 9925 +198.240.108.240 - - [28/Jul/1995:13:17:00 -0400] "GET /images/NASA-logo.gif HTTP/1.0" 200 5268 +165.13.14.55 - - [28/Jul/1995:13:17:00 -0400] "GET /history/apollo/apollo-17/apollo-17-info.html HTTP/1.0" 200 1457 +198.155.12.13 - - [28/Jul/1995:13:17:07 -0400] "GET /shuttle/countdown/liftoff.html HTTP/1.0" 200 5220 +182.200.120.1 - - [28/Jul/1995:13:17:08 -0400] "GET /shuttle/countdown/count.html HTTP/1.0" 200 65536 +198.155.12.13 - - [28/Jul/1995:13:17:09 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +131.182.170.137 - - [28/Jul/1995:13:17:09 -0400] "GET /elv/endball.gif HTTP/1.0" 200 306 +182.200.120.1 - - [28/Jul/1995:13:17:13 -0400] "GET /shuttle/resources/orbiters/atlantis.html HTTP/1.0" 200 7025 +198.155.12.13 - - [28/Jul/1995:13:17:13 -0400] "GET /shuttle/countdown/video/livevideo2.gif HTTP/1.0" 200 71319 +210.166.12.00 - - [28/Jul/1995:13:17:14 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:17:15 -0400] "GET /shuttle/resources/orbiters/atlantis-logo.gif HTTP/1.0" 200 4179 +131.182.170.137 - - [28/Jul/1995:13:17:15 -0400] "GET /elv/hot.gif HTTP/1.0" 200 1007 +182.200.120.1 - - [28/Jul/1995:13:17:15 -0400] "GET /elv/DELTA/delta.htm HTTP/1.0" 200 809 +182.200.120.1 - - [28/Jul/1995:13:17:16 -0400] "GET /elv/elvhead2.gif HTTP/1.0" 200 1733 +182.200.120.1 - - [28/Jul/1995:13:17:16 -0400] "GET /shuttle/countdown/launch-team.html HTTP/1.0" 200 30037 +180.176.12.00 - - [28/Jul/1995:13:17:17 -0400] "GET /cgi-bin/imagemap/onboard?371,237 HTTP/1.0" 302 109 +182.200.120.1 - - [28/Jul/1995:13:17:18 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +222.218.120.1 - - [28/Jul/1995:13:17:18 -0400] "GET /images/ HTTP/1.0" 200 17688 +165.13.14.55 - - [28/Jul/1995:13:17:19 -0400] "GET /history/apollo/apollo-17/images/ HTTP/1.0" 200 1719 +165.13.14.55 - - [28/Jul/1995:13:17:20 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +170.166.12.00 - - [28/Jul/1995:13:17:20 -0400] "GET / HTTP/1.0" 200 7280 +182.200.120.1 - - [28/Jul/1995:13:17:21 -0400] "GET /shuttle/resources/orbiters/orbiters-logo.gif HTTP/1.0" 200 1932 +131.182.170.137 - - [28/Jul/1995:13:17:21 -0400] "GET /elv/PEGASUS/minpeg1.gif HTTP/1.0" 200 1055 +170.166.12.00 - - [28/Jul/1995:13:17:21 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +170.166.12.00 - - [28/Jul/1995:13:17:22 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +170.166.12.00 - - [28/Jul/1995:13:17:22 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +182.198.120.1 - - [28/Jul/1995:13:17:22 -0400] "GET /shuttle/missions/sts-73/sts-73-info.html HTTP/1.0" 200 1428 +170.166.12.00 - - [28/Jul/1995:13:17:22 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +170.166.12.00 - - [28/Jul/1995:13:17:23 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +182.200.120.1 - - [28/Jul/1995:13:17:23 -0400] "GET /history/astp/astp.html HTTP/1.0" 200 1157 +165.13.14.55 - - [28/Jul/1995:13:17:23 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +165.13.14.55 - - [28/Jul/1995:13:17:23 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +163.205.156.16 - - [28/Jul/1995:13:17:24 -0400] "GET /elv/elvpage.htm HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:26 -0400] "GET /elv/bakgro.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:26 -0400] "GET /elv/elvhead3.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:26 -0400] "GET /elv/endball.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:26 -0400] "GET /elv/hot.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:26 -0400] "GET /elv/PEGASUS/minpeg1.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:26 -0400] "GET /elv/SCOUT/scout.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:26 -0400] "GET /elv/DELTA/delta.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:26 -0400] "GET /elv/ATLAS_CENTAUR/atlas.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:27 -0400] "GET /elv/TITAN/titan.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:27 -0400] "GET /elv/struct.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:27 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:17:27 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 304 0 +131.182.170.137 - - [28/Jul/1995:13:17:27 -0400] "GET /elv/SCOUT/scout.gif HTTP/1.0" 200 1165 +131.182.170.137 - - [28/Jul/1995:13:17:33 -0400] "GET /elv/DELTA/delta.gif HTTP/1.0" 200 2244 +198.155.12.92 - - [28/Jul/1995:13:17:34 -0400] "GET /shuttle/technology/images/sts_spec_6-small.gif HTTP/1.0" 200 47145 +222.218.120.1 - - [28/Jul/1995:13:17:35 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +222.218.120.1 - - [28/Jul/1995:13:17:36 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +182.200.120.1 - - [28/Jul/1995:13:17:36 -0400] "GET /shuttle/missions/sts-67/images/KSC-95EC-0390.gif HTTP/1.0" 200 97220 +210.166.12.00 - - [28/Jul/1995:13:17:36 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +222.218.120.1 - - [28/Jul/1995:13:17:38 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +182.200.120.1 - - [28/Jul/1995:13:17:38 -0400] "GET /history/astp/astp-goals.txt HTTP/1.0" 200 305 +131.182.170.137 - - [28/Jul/1995:13:17:38 -0400] "GET /elv/ATLAS_CENTAUR/atlas.gif HTTP/1.0" 200 2286 +182.200.120.1 - - [28/Jul/1995:13:17:40 -0400] "GET /shuttle/resources/orbiters/orbiters.html HTTP/1.0" 200 2178 +182.200.120.1 - - [28/Jul/1995:13:17:42 -0400] "GET /images/landing-small.gif HTTP/1.0" 200 16966 +222.218.120.1 - - [28/Jul/1995:13:17:42 -0400] "GET /icons/unknown.xbm HTTP/1.0" 200 515 +198.155.12.13 - - [28/Jul/1995:13:17:43 -0400] "GET /history/apollo/apollo-13/movies/apo13damage.mpg HTTP/1.0" 200 297851 +198.240.108.240 - - [28/Jul/1995:13:17:44 -0400] "GET /images/KSC-94EC-412.jpg HTTP/1.0" 200 52759 +131.182.170.137 - - [28/Jul/1995:13:17:44 -0400] "GET /elv/TITAN/titan.gif HTTP/1.0" 200 3530 +182.198.120.1 - - [28/Jul/1995:13:17:46 -0400] "GET /shuttle/missions/sts-73/ HTTP/1.0" 200 1596 +182.200.120.1 - - [28/Jul/1995:13:17:47 -0400] "GET /shuttle/missions/sts-67/mission-sts-67.html HTTP/1.0" 200 21523 +182.200.120.1 - - [28/Jul/1995:13:17:48 -0400] "GET /shuttle/countdown/lps/ab/ab.html HTTP/1.0" 200 3933 +165.13.14.55 - - [28/Jul/1995:13:17:51 -0400] "GET /history/apollo/apollo-17/images/72HC971.GIF HTTP/1.0" 200 98304 +131.182.170.137 - - [28/Jul/1995:13:17:52 -0400] "GET /elv/struct.gif HTTP/1.0" 200 1318 +210.166.12.00 - - [28/Jul/1995:13:17:56 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:17:58 -0400] "GET /shuttle/resources/orbiters/enterprise.html HTTP/1.0" 200 9732 +182.198.120.1 - - [28/Jul/1995:13:17:59 -0400] "GET /shuttle/missions/sts-73/movies/ HTTP/1.0" 200 378 +131.182.170.137 - - [28/Jul/1995:13:17:59 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +165.13.14.55 - - [28/Jul/1995:13:18:00 -0400] "GET /history/apollo/apollo-13/apollo-13.html HTTP/1.0" 200 18556 +165.13.14.55 - - [28/Jul/1995:13:18:02 -0400] "GET /history/apollo/apollo-13/apollo-13-patch-small.gif HTTP/1.0" 200 12859 +182.200.120.1 - - [28/Jul/1995:13:18:03 -0400] "GET /shuttle/resources/orbiters/enterprise-logo.gif HTTP/1.0" 200 25257 +128.159.146.40 - - [28/Jul/1995:13:18:05 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +128.159.146.40 - - [28/Jul/1995:13:18:07 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +198.155.12.13 - - [28/Jul/1995:13:18:07 -0400] "GET /shuttle/countdown/countdown.html HTTP/1.0" 200 4324 +182.200.120.1 - - [28/Jul/1995:13:18:07 -0400] "GET /shuttle/missions/sts-71/sts-71-patch-small.gif HTTP/1.0" 200 12054 +198.155.12.13 - - [28/Jul/1995:13:18:10 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +198.155.12.92 - - [28/Jul/1995:13:18:10 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +198.155.12.92 - - [28/Jul/1995:13:18:11 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.159.146.40 - - [28/Jul/1995:13:18:11 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.159.146.40 - - [28/Jul/1995:13:18:12 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +128.159.146.40 - - [28/Jul/1995:13:18:12 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +128.159.146.40 - - [28/Jul/1995:13:18:12 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.13 - - [28/Jul/1995:13:18:12 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +198.155.12.92 - - [28/Jul/1995:13:18:13 -0400] "GET /shuttle/technology/sts-newsref/sts_overview.html HTTP/1.0" 200 65536 +198.155.12.92 - - [28/Jul/1995:13:18:14 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +182.200.120.1 - - [28/Jul/1995:13:18:15 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +182.200.120.1 - - [28/Jul/1995:13:18:16 -0400] "GET /shuttle/countdown/lps/ab/ab.html HTTP/1.0" 200 3933 +182.200.120.1 - - [28/Jul/1995:13:18:16 -0400] "GET /history/astp/flight-summary.txt HTTP/1.0" 200 509 +182.200.120.1 - - [28/Jul/1995:13:18:17 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 304 0 +210.166.12.00 - - [28/Jul/1995:13:18:17 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:18:17 -0400] "GET /images/launchmedium.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:18:18 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:18:18 -0400] "GET /images/landing-logo.gif HTTP/1.0" 200 2582 +198.155.12.92 - - [28/Jul/1995:13:18:18 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +198.155.12.92 - - [28/Jul/1995:13:18:18 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +182.200.120.1 - - [28/Jul/1995:13:18:19 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 304 0 +170.166.12.00 - - [28/Jul/1995:13:18:19 -0400] "GET /shuttle/missions/sts-68/ksc-srl-image.html HTTP/1.0" 200 1404 +198.155.12.92 - - [28/Jul/1995:13:18:20 -0400] "GET /shuttle/technology/images/launch_sites_8-small.gif HTTP/1.0" 200 65536 +182.200.120.1 - - [28/Jul/1995:13:18:24 -0400] "GET /shuttle/missions/sts-60/mission-sts-60.html HTTP/1.0" 200 25585 +198.155.12.92 - - [28/Jul/1995:13:18:24 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +165.13.14.55 - - [28/Jul/1995:13:18:24 -0400] "GET /history/apollo/apollo-13/apollo-13-patch.jpg HTTP/1.0" 200 98304 +182.200.120.1 - - [28/Jul/1995:13:18:25 -0400] "GET /shuttle/missions/sts-60/sts-60-patch-small.gif HTTP/1.0" 200 15522 +170.166.12.00 - - [28/Jul/1995:13:18:25 -0400] "GET /shuttle/missions/sts-68/images/ksc-upclose.gif HTTP/1.0" 200 86984 +170.166.12.00 - - [28/Jul/1995:13:18:28 -0400] "GET /shuttle/missions/sts-68/images/ksc.gif HTTP/1.0" 200 152676 +182.200.120.1 - - [28/Jul/1995:13:18:29 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +182.200.120.1 - - [28/Jul/1995:13:18:30 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +182.200.120.1- - [28/Jul/1995:13:18:32 -0400] "GET /shuttle/technology/sts-newsref/sts_sys.html HTTP/1.0" 200 43132 +182.200.120.1 - - [28/Jul/1995:13:18:32 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +182.200.120.1 - - [28/Jul/1995:13:18:32 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +182.200.120.1 - - [28/Jul/1995:13:18:34 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +202.244.227.68 - - [28/Jul/1995:13:18:37 -0400] "GET /history/apollo/apollo-13/apollo-13.html HTTP/1.0" 200 18556 +182.200.120.1 - - [28/Jul/1995:13:18:37 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +182.200.120.1 - - [28/Jul/1995:13:18:37 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +210.166.12.00 - - [28/Jul/1995:13:18:38 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:18:41 -0400] "GET /shuttle/missions/sts-74/mission-sts-74.html HTTP/1.0" 200 3790 +182.200.120.1 - - [28/Jul/1995:13:18:41 -0400] "GET /shuttle/missions/sts-74/sts-74-patch-small.gif HTTP/1.0" 200 5494 +198.155.12.92 - - [28/Jul/1995:13:18:41 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +182.200.120.1 - - [28/Jul/1995:13:18:42 -0400] "GET /shuttle/missions/sts-70/images/images.html HTTP/1.0" 200 8657 +182.200.120.1 - - [28/Jul/1995:13:18:42 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +182.200.120.1 - - [28/Jul/1995:13:18:42 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +182.200.120.1 - - [28/Jul/1995:13:18:46 -0400] "GET /images/launch-logo.gif HTTP/1.0" 304 0 +193.170.74.116 - - [28/Jul/1995:13:18:46 -0400] "HEAD /software/winvn/winvn.html HTTP/1.0" 200 0 +198.155.12.92 - - [28/Jul/1995:13:18:47 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +198.155.12.92 - - [28/Jul/1995:13:18:47 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +131.182.170.137 - - [28/Jul/1995:13:18:48 -0400] "GET /elv/uplink.htm HTTP/1.0" 200 1498 +182.200.120.1 - - [28/Jul/1995:13:18:50 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 304 0 +128.159.104.136 - - [28/Jul/1995:13:18:54 -0400] "GET / HTTP/1.0" 304 0 +131.182.170.137 - - [28/Jul/1995:13:18:54 -0400] "GET /elv/elvhead2.gif HTTP/1.0" 200 1733 +163.205.156.16 - - [28/Jul/1995:13:18:55 -0400] "GET /elv/whnew.htm HTTP/1.0" 200 3993 +199.183.150.10 - - [28/Jul/1995:13:18:56 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +163.205.156.16 - - [28/Jul/1995:13:18:57 -0400] "GET /elv/elvhead2.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:18:57 -0400] "GET / HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:18:58 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +182.200.120.1 - - [28/Jul/1995:13:18:58 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +210.166.12.00 - - [28/Jul/1995:13:18:58 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.13 - - [28/Jul/1995:13:18:59 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +198.155.12.13 - - [28/Jul/1995:13:18:59 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +199.183.150.10 - - [28/Jul/1995:13:18:59 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +182.200.120.1 - - [28/Jul/1995:13:18:59 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +198.155.12.13 - - [28/Jul/1995:13:19:00 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +182.200.120.1- - [28/Jul/1995:13:19:00 -0400] "GET /shuttle/technology/sts-newsref/sts_asm.html HTTP/1.0" 200 71654 +182.200.120.1 - - [28/Jul/1995:13:19:01 -0400] "GET /shuttle/missions/sts-70/images/KSC-95EC-1019.gif HTTP/1.0" 200 28728 +198.155.12.13 - - [28/Jul/1995:13:19:01 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +182.200.120.1- - [28/Jul/1995:13:19:01 -0400] "GET /shuttle/technology/images/srb_mod_compare_6-small.gif HTTP/1.0" 200 28219 +199.183.150.10 - - [28/Jul/1995:13:19:02 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +182.200.120.1- - [28/Jul/1995:13:19:02 -0400] "GET /shuttle/technology/images/srb_mod_compare_1-small.gif HTTP/1.0" 200 36902 +199.183.150.10 - - [28/Jul/1995:13:19:03 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +199.183.150.10 - - [28/Jul/1995:13:19:05 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +198.155.12.92 - - [28/Jul/1995:13:19:07 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:19:07 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +182.200.120.1 - - [28/Jul/1995:13:19:09 -0400] "GET /history/astp/astp-spacecraft.txt HTTP/1.0" 200 440 +182.200.120.1- - [28/Jul/1995:13:19:10 -0400] "GET /shuttle/technology/images/srb_mod_compare_3-small.gif HTTP/1.0" 200 55666 +198.155.12.13 - - [28/Jul/1995:13:19:12 -0400] "GET /shuttle/technology/sts-newsref/sts-msfc.html HTTP/1.0" 200 33360 +198.155.12.13 - - [28/Jul/1995:13:19:15 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +198.155.12.13 - - [28/Jul/1995:13:19:16 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +198.155.12.92 - - [28/Jul/1995:13:19:16 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 4324 +198.155.12.13 - - [28/Jul/1995:13:19:17 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +198.155.12.13 - - [28/Jul/1995:13:19:19 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +210.166.12.00 - - [28/Jul/1995:13:19:20 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.13 - - [28/Jul/1995:13:19:22 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +182.200.120.1- - [28/Jul/1995:13:19:23 -0400] "GET /images/shuttle-patch-small.gif HTTP/1.0" 200 4179 +198.155.12.13 - - [28/Jul/1995:13:19:24 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +182.200.120.1- - [28/Jul/1995:13:19:27 -0400] "GET /shuttle/technology/sts-newsref/stsref-toc.html HTTP/1.0" 200 84905 +198.155.12.13 - - [28/Jul/1995:13:19:30 -0400] "GET /shuttle/missions/sts-65/mission-sts-65.html HTTP/1.0" 200 131165 +182.200.120.1- - [28/Jul/1995:13:19:30 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +198.155.12.13 - - [28/Jul/1995:13:19:30 -0400] "GET /shuttle/missions/sts-65/sts-65-patch-small.gif HTTP/1.0" 200 11757 +198.155.12.13 - - [28/Jul/1995:13:19:32 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 4324 +163.205.156.61 - - [28/Jul/1995:13:19:32 -0400] "GET /elv/elvpage.htm HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:19:33 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +198.155.12.13 - - [28/Jul/1995:13:19:33 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +182.200.120.1 - - [28/Jul/1995:13:19:34 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +198.155.12.13 - - [28/Jul/1995:13:19:34 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +163.205.156.61 - - [28/Jul/1995:13:19:35 -0400] "GET /elv/endball.gif HTTP/1.0" 304 0 +163.205.156.61 - - [28/Jul/1995:13:19:35 -0400] "GET /elv/hot.gif HTTP/1.0" 304 0 +163.205.156.61 - - [28/Jul/1995:13:19:35 -0400] "GET /elv/bakgro.gif HTTP/1.0" 304 0 +163.205.156.61 - - [28/Jul/1995:13:19:35 -0400] "GET /elv/elvhead3.gif HTTP/1.0" 304 0 +170.166.12.00 - - [28/Jul/1995:13:19:39 -0400] "GET /shuttle/missions/sts-71/movies/movies.html HTTP/1.0" 200 3381 +198.155.12.13 - - [28/Jul/1995:13:19:39 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +198.155.12.13 - - [28/Jul/1995:13:19:40 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +170.166.12.00 - - [28/Jul/1995:13:19:41 -0400] "GET /shuttle/missions/sts-71/sts-71-patch-small.gif HTTP/1.0" 200 12054 +210.166.12.00 - - [28/Jul/1995:13:19:41 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.13 - - [28/Jul/1995:13:19:49 -0400] "GET /history/apollo/flight-summary.txt HTTP/1.0" 200 5086 +198.155.12.13 - - [28/Jul/1995:13:19:49 -0400] "GET /persons/astronauts/m-to-p/MukaiCN.txt HTTP/1.0" 200 1754 +198.155.12.13 - - [28/Jul/1995:13:19:52 -0400] "GET /cgi-bin/imagemap/countdown70?184,287 HTTP/1.0" 302 110 +163.205.156.16 - - [28/Jul/1995:13:19:52 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +163.205.156.16 - - [28/Jul/1995:13:19:53 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:19:53 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:19:53 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 304 0 +222.218.120.1 - - [28/Jul/1995:13:19:53 -0400] "GET /shuttle/technology/images/launch_sites_8-small.gif HTTP/1.0" 200 74267 +163.205.156.16 - - [28/Jul/1995:13:19:53 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:19:53 -0400] "GET /shuttle/missions/sts-70/movies/movies.html HTTP/1.0" 200 2864 +182.200.120.1- - [28/Jul/1995:13:19:54 -0400] "GET /shuttle/technology/images/mission_profile_2-small.gif HTTP/1.0" 200 35540 +198.155.12.13 - - [28/Jul/1995:13:19:57 -0400] "GET /shuttle/missions/sts-70/sts-70-patch-small.gif HTTP/1.0" 200 5978 +182.200.120.1- - [28/Jul/1995:13:19:57 -0400] "GET /shuttle/technology/sts-newsref/mission_profile.html HTTP/1.0" 200 58688 +182.200.120.1- - [28/Jul/1995:13:19:59 -0400] "GET /shuttle/technology/images/tal_abort_2-small.gif HTTP/1.0" 200 10099 +210.166.12.00 - - [28/Jul/1995:13:20:02 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:20:06 -0400] "GET /shuttle/missions/sts-70/images/KSC-95EC-0649.gif HTTP/1.0" 200 30043 +182.200.120.1 - - [28/Jul/1995:13:20:08 -0400] "GET /shuttle/missions/sts-74/sts-74-info.html HTTP/1.0" 200 1428 +198.155.12.92 - - [28/Jul/1995:13:20:10 -0400] "GET /shuttle/countdown/liftoff.html HTTP/1.0" 200 5220 +198.155.12.13 - - [28/Jul/1995:13:20:12 -0400] "GET /shuttle/missions/sts-70/movies/sts-70-launch-srbsep.mpg HTTP/1.0" 200 49152 +163.205.156.16 - - [28/Jul/1995:13:20:16 -0400] "GET /elv/DOCS/elvrole.htm HTTP/1.0" 304 0 +163.205.42.94 - - [28/Jul/1995:13:20:18 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +182.200.120.1 - - [28/Jul/1995:13:20:21 -0400] "GET /shuttle/missions/sts-74/images/ HTTP/1.0" 200 378 +182.200.120.1 - - [28/Jul/1995:13:20:22 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +182.200.120.1 - - [28/Jul/1995:13:20:22 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +163.205.42.94 - - [28/Jul/1995:13:20:22 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +210.166.12.00 - - [28/Jul/1995:13:20:23 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +163.205.42.94 - - [28/Jul/1995:13:20:26 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +163.205.42.94 - - [28/Jul/1995:13:20:28 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +182.200.120.1 - - [28/Jul/1995:13:20:28 -0400] "GET /shuttle/missions/sts-74/movies/ HTTP/1.0" 200 378 +163.205.42.94 - - [28/Jul/1995:13:20:29 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +163.205.42.94 - - [28/Jul/1995:13:20:30 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.92 - - [28/Jul/1995:13:20:31 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 40960 +182.200.120.1 - - [28/Jul/1995:13:20:35 -0400] "GET /shuttle/missions/sts-74/news/ HTTP/1.0" 200 374 +198.155.12.92 - - [28/Jul/1995:13:20:39 -0400] "GET /shuttle/missions/sts-70/images/images.html HTTP/1.0" 200 8657 +198.155.12.92 - - [28/Jul/1995:13:20:40 -0400] "GET /shuttle/countdown/video/livevideo2.gif HTTP/1.0" 200 40960 +150.148.199.70 - - [28/Jul/1995:13:20:42 -0400] "GET /shuttle/missions/sts-71/movies/sts-71-landing.mpg HTTP/1.0" 200 1013716 +210.166.12.00 - - [28/Jul/1995:13:20:43 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.13 - - [28/Jul/1995:13:20:51 -0400] "HEAD /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 0 +222.218.120.1 - - [28/Jul/1995:13:20:52 -0400] "GET /shuttle/technology/images/mission_profile_2-small.gif HTTP/1.0" 200 35540 +163.205.156.16 - - [28/Jul/1995:13:20:53 -0400] "GET /elv/uplink.htm HTTP/1.0" 304 0 +204.138.95.101 - - [28/Jul/1995:13:20:53 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +170.166.12.00 - - [28/Jul/1995:13:20:54 -0400] "GET /shuttle/missions/sts-71/movies/sts-71-mir-dock.mpg HTTP/1.0" 200 946425 +128.159.123.29 - - [28/Jul/1995:13:21:00 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +128.159.123.29 - - [28/Jul/1995:13:21:04 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +210.166.12.00 - - [28/Jul/1995:13:21:06 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.13 - - [28/Jul/1995:13:21:10 -0400] "GET /history/apollo/images/ HTTP/1.0" 200 3271 +128.159.123.29 - - [28/Jul/1995:13:21:12 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +198.155.12.13 - - [28/Jul/1995:13:21:12 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +128.159.123.29 - - [28/Jul/1995:13:21:12 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +128.159.123.29 - - [28/Jul/1995:13:21:13 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +128.159.123.29 - - [28/Jul/1995:13:21:13 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.13 - - [28/Jul/1995:13:21:16 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +198.155.12.13 - - [28/Jul/1995:13:21:17 -0400] "GET / HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:21:19 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +198.155.12.13 - - [28/Jul/1995:13:21:19 -0400] "GET / HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:21:20 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:21:20 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +198.155.12.13 - - [28/Jul/1995:13:21:20 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +198.155.12.13 - - [28/Jul/1995:13:21:20 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +198.155.12.13 - - [28/Jul/1995:13:21:20 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +198.155.12.13 - - [28/Jul/1995:13:21:21 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.13 - - [28/Jul/1995:13:21:22 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +192.112.239.11 - - [28/Jul/1995:13:21:23 -0400] "GET / HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:21:25 -0400] "GET / HTTP/1.0" 200 7280 +210.166.12.00 - - [28/Jul/1995:13:21:26 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +192.112.239.11 - - [28/Jul/1995:13:21:26 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +163.205.156.16 - - [28/Jul/1995:13:21:27 -0400] "GET /elv/uplink2.htm HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:21:29 -0400] "GET /msfc/onboard/onboard.html HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:21:29 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +198.155.12.13 - - [28/Jul/1995:13:21:29 -0400] "GET /msfc/onboard/redball.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:21:30 -0400] "GET / HTTP/1.0" 200 7280 +192.112.239.11 - - [28/Jul/1995:13:21:30 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +198.155.12.13 - - [28/Jul/1995:13:21:31 -0400] "GET /msfc/onboard/come_aboard.gif HTTP/1.0" 200 48682 +128.138.137.47 - - [28/Jul/1995:13:21:31 -0400] "GET /shuttle/missions/sts-74/mission-sts-74.html HTTP/1.0" 200 3790 +198.155.12.13 - - [28/Jul/1995:13:21:31 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +198.155.12.13 - - [28/Jul/1995:13:21:32 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +165.13.14.55 - - [28/Jul/1995:13:21:32 -0400] "GET /history/apollo/apollo-13/apollo-13-info.html HTTP/1.0" 200 1583 +198.155.12.13 - - [28/Jul/1995:13:21:33 -0400] "GET /msfc/onboard/colorbar.gif HTTP/1.0" 304 0 +128.138.137.47 - - [28/Jul/1995:13:21:33 -0400] "GET /shuttle/missions/sts-74/sts-74-patch-small.gif HTTP/1.0" 200 5494 +198.155.12.13 - - [28/Jul/1995:13:21:33 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +192.112.239.11 - - [28/Jul/1995:13:21:33 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +128.138.137.47 - - [28/Jul/1995:13:21:34 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +128.138.137.47 - - [28/Jul/1995:13:21:34 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +198.155.12.13 - - [28/Jul/1995:13:21:34 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.138.137.47 - - [28/Jul/1995:13:21:34 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +198.155.12.13 - - [28/Jul/1995:13:21:35 -0400] "HEAD /images/NASA-logosmall.gif HTTP/1.0" 200 0 +192.112.239.11 - - [28/Jul/1995:13:21:36 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +198.155.12.13 - - [28/Jul/1995:13:21:36 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +198.155.12.13 - - [28/Jul/1995:13:21:36 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +198.155.12.13 - - [28/Jul/1995:13:21:36 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +198.155.12.13 - - [28/Jul/1995:13:21:37 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +198.155.12.13 - - [28/Jul/1995:13:21:39 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.92 - - [28/Jul/1995:13:21:39 -0400] "GET /shuttle/missions/sts-70/images/KSC-95EC-0515.jpg HTTP/1.0" 200 57344 +198.155.12.13 - - [28/Jul/1995:13:21:39 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +192.112.239.11 - - [28/Jul/1995:13:21:41 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.13 - - [28/Jul/1995:13:21:42 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +182.200.120.1 - - [28/Jul/1995:13:21:42 -0400] "GET /shuttle/missions/sts-49/mission-sts-49.html HTTP/1.0" 200 9273 +198.155.12.13 - - [28/Jul/1995:13:21:44 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +182.200.120.1 - - [28/Jul/1995:13:21:44 -0400] "GET /shuttle/missions/sts-49/sts-49-patch-small.gif HTTP/1.0" 200 11628 +210.166.12.92 - - [28/Jul/1995:13:21:46 -0400] "GET /history/history.html HTTP/1.0" 200 1602 +210.166.12.00 - - [28/Jul/1995:13:21:46 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +165.137.30.52 - - [28/Jul/1995:13:21:47 -0400] "GET /history/apollo/apollo-13/apollo-13.html HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:21:48 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +210.166.12.92 - - [28/Jul/1995:13:21:48 -0400] "GET /history/apollo/images/apollo-small.gif HTTP/1.0" 200 9630 +182.200.120.1 - - [28/Jul/1995:13:21:49 -0400] "GET /shuttle/missions/sts-71/sts-71-press-kit.txt HTTP/1.0" 200 78588 +182.200.120.1- - [28/Jul/1995:13:21:49 -0400] "GET /shuttle/technology/sts-newsref/sts_mes.html HTTP/1.0" 200 175619 +182.200.120.1 - - [28/Jul/1995:13:21:51 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 4324 +198.155.12.13 - - [28/Jul/1995:13:21:52 -0400] "GET /whats-new.html HTTP/1.0" 200 18936 +163.205.156.16 - - [28/Jul/1995:13:21:55 -0400] "GET /elv/PEGASUS/pegdesc.htm HTTP/1.0" 304 0 +192.112.239.11 - - [28/Jul/1995:13:21:56 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 4324 +198.155.12.92 - - [28/Jul/1995:13:21:56 -0400] "GET /shuttle/missions/sts-70/images/KSC-95EC-1015.gif HTTP/1.0" 200 55442 +192.112.239.11 - - [28/Jul/1995:13:21:58 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +210.166.12.92 - - [28/Jul/1995:13:22:01 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +198.155.12.13 - - [28/Jul/1995:13:22:01 -0400] "GET /images/whatsnew.gif HTTP/1.0" 200 651 +198.155.12.13 - - [28/Jul/1995:13:22:01 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +163.205.156.16 - - [28/Jul/1995:13:22:04 -0400] "GET /elv/SCOUT/scout.htm HTTP/1.0" 200 769 +210.166.12.92 - - [28/Jul/1995:13:22:05 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +198.240.108.240 - - [28/Jul/1995:13:22:07 -0400] "GET /images/IMPACT.JPG HTTP/1.0" 200 169883 +210.166.12.00 - - [28/Jul/1995:13:22:07 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:22:08 -0400] "GET /shuttle/missions/sts-71/movies/movies.html HTTP/1.0" 200 3381 +182.200.120.1 - - [28/Jul/1995:13:22:08 -0400] "GET /shuttle/missions/sts-71/sts-71-patch-small.gif HTTP/1.0" 200 12054 +192.112.239.11 - - [28/Jul/1995:13:22:09 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +198.155.12.13 - - [28/Jul/1995:13:22:12 -0400] "GET /cgi-bin/imagemap/onboard?103,226 HTTP/1.0" 302 91 +210.166.12.92 - - [28/Jul/1995:13:22:13 -0400] "GET /shuttle/missions/sts-78/mission-sts-78.html HTTP/1.0" 200 4713 +210.166.12.92 - - [28/Jul/1995:13:22:16 -0400] "GET /shuttle/missions/sts-78/sts-78-patch-small.gif HTTP/1.0" 200 4179 +165.13.14.55 - - [28/Jul/1995:13:22:22 -0400] "GET /facilities/tour.html HTTP/1.0" 200 3723 +182.200.120.1 - - [28/Jul/1995:13:22:27 -0400] "GET /history/mercury/mercury.html HTTP/1.0" 200 1871 +210.166.12.00 - - [28/Jul/1995:13:22:28 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:22:28 -0400] "GET /images/mercury-logo.gif HTTP/1.0" 200 6588 +182.200.120.1 - - [28/Jul/1995:13:22:29 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +182.200.120.1 - - [28/Jul/1995:13:22:29 -0400] "GET /history/apollo/images/apollo-logo.gif HTTP/1.0" 200 3047 +182.200.120.1 - - [28/Jul/1995:13:22:36 -0400] "GET /history/mercury/mercury-spacecraft.txt HTTP/1.0" 200 761 +128.159.77.122 - - [28/Jul/1995:13:22:45 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +128.159.77.122 - - [28/Jul/1995:13:22:46 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.159.77.122 - - [28/Jul/1995:13:22:47 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.159.77.122 - - [28/Jul/1995:13:22:47 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +128.159.77.122 - - [28/Jul/1995:13:22:47 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +128.159.77.122 - - [28/Jul/1995:13:22:47 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +210.166.12.00 - - [28/Jul/1995:13:22:48 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.92 - - [28/Jul/1995:13:22:54 -0400] "GET /shuttle/countdown/video/livevideo2.gif HTTP/1.0" 200 40960 +198.155.12.92 - - [28/Jul/1995:13:22:54 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.92 - - [28/Jul/1995:13:23:00 -0400] "GET /shuttle/countdown/countdown.html HTTP/1.0" 200 4324 +182.200.120.1 - - [28/Jul/1995:13:23:01 -0400] "GET /shuttle/missions/sts-54/mission-sts-54.html HTTP/1.0" 200 5690 +163.205.156.16 - - [28/Jul/1995:13:23:02 -0400] "GET /elv/vidpicp.htm HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:03 -0400] "GET /elv/TITAN/mars1s.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:03 -0400] "GET /elv/TITAN/mars2s.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:03 -0400] "GET /elv/TITAN/mars3s.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:03 -0400] "GET /elv/ATLAS_CENTAUR/atc69s.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:03 -0400] "GET /elv/ATLAS_CENTAUR/acsuns.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:03 -0400] "GET /elv/ATLAS_CENTAUR/goess.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:03 -0400] "GET /elv/DELTA/dsolidss.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:03 -0400] "GET /elv/DELTA/del181s.gif HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:03 -0400] "GET /elv/DELTA/rosats.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:04 -0400] "GET /elv/DELTA/euves.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:04 -0400] "GET /elv/SCOUT/radcals.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:04 -0400] "GET /elv/SCOUT/s_216s.jpg HTTP/1.0" 304 0 +163.205.156.16 - - [28/Jul/1995:13:23:04 -0400] "GET /elv/SCOUT/sampexs.jpg HTTP/1.0" 304 0 +210.166.12.00 - - [28/Jul/1995:13:23:09 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +163.205.156.16 - - [28/Jul/1995:13:23:16 -0400] "GET /elv/TITAN/mars1.jpg HTTP/1.0" 200 15014 +161.130.55.23 - - [28/Jul/1995:13:23:16 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +161.130.55.23 - - [28/Jul/1995:13:23:17 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +161.130.55.23 - - [28/Jul/1995:13:23:17 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +161.130.55.23 - - [28/Jul/1995:13:23:18 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +128.159.53.131 - - [28/Jul/1995:13:23:18 -0400] "GET /images/ksclogo.gif HTTP/1.0" 200 14298 +182.200.120.1 - - [28/Jul/1995:13:23:20 -0400] "GET /images/ HTTP/1.0" 200 17688 +163.205.156.16 - - [28/Jul/1995:13:23:22 -0400] "GET /elv/TITAN/mars3.jpg HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:23:26 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +163.205.156.16 - - [28/Jul/1995:13:23:28 -0400] "GET /elv/TITAN/mars2.jpg HTTP/1.0" 200 20361 +182.200.120.1 - - [28/Jul/1995:13:23:28 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +210.166.12.00 - - [28/Jul/1995:13:23:29 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:23:30 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +193.81.242.40 - - [28/Jul/1995:13:23:32 -0400] "GET /shuttle/technology/sts-newsref/sts-apu.html HTTP/1.0" 200 161920 +182.200.120.1 - - [28/Jul/1995:13:23:32 -0400] "GET /icons/unknown.xbm HTTP/1.0" 200 515 +182.200.120.1 - - [28/Jul/1995:13:23:37 -0400] "GET / HTTP/1.0" 200 7280 +204.241.117.12 - - [28/Jul/1995:13:23:39 -0400] "GET / HTTP/1.0" 200 7280 +204.241.117.12 - - [28/Jul/1995:13:23:41 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +182.200.120.1 - - [28/Jul/1995:13:23:41 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +182.200.120.1 - - [28/Jul/1995:13:23:42 -0400] "GET /facts/faq04.html HTTP/1.0" 200 27063 +204.241.117.12 - - [28/Jul/1995:13:23:43 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +163.205.156.16 - - [28/Jul/1995:13:23:43 -0400] "GET /elv/SCOUT/radcal.jpg HTTP/1.0" 200 26478 +193.81.242.40 - - [28/Jul/1995:13:23:43 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +204.241.117.12 - - [28/Jul/1995:13:23:43 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +193.81.242.40 - - [28/Jul/1995:13:23:43 -0400] "GET /images/shuttle-patch-logo.gif HTTP/1.0" 200 891 +204.241.117.12 - - [28/Jul/1995:13:23:44 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +182.200.120.1 - - [28/Jul/1995:13:23:44 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +182.200.120.1 - - [28/Jul/1995:13:23:45 -0400] "GET /images/faq.gif HTTP/1.0" 200 263 +204.241.117.12 - - [28/Jul/1995:13:23:46 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +182.200.120.1 - - [28/Jul/1995:13:23:47 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +182.200.120.1 - - [28/Jul/1995:13:23:48 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +182.200.120.1 - - [28/Jul/1995:13:23:49 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +210.166.12.00 - - [28/Jul/1995:13:23:49 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +163.205.156.16 - - [28/Jul/1995:13:23:51 -0400] "GET /elv/SCOUT/s_216.jpg HTTP/1.0" 200 27109 +182.200.120.1 - - [28/Jul/1995:13:23:51 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +182.200.120.1 - - [28/Jul/1995:13:23:58 -0400] "GET /history/apollo/apollo-13/apollo-13.html HTTP/1.0" 200 18556 +128.159.77.122 - - [28/Jul/1995:13:24:06 -0400] "GET /history/history.html HTTP/1.0" 200 1602 +128.159.77.122 - - [28/Jul/1995:13:24:07 -0400] "GET /history/apollo/images/apollo-small.gif HTTP/1.0" 200 9630 +128.159.77.122 - - [28/Jul/1995:13:24:07 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +182.200.120.1 - - [28/Jul/1995:13:24:09 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +182.200.120.1 - - [28/Jul/1995:13:24:09 -0400] "GET /images/launchmedium.gif HTTP/1.0" 304 0 +210.166.12.00 - - [28/Jul/1995:13:24:11 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:24:11 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:24:11 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:24:20 -0400] "GET /shuttle/missions/sts-57/mission-sts-57.html HTTP/1.0" 200 11510 +182.200.120.1 - - [28/Jul/1995:13:24:20 -0400] "GET /shuttle/missions/sts-69/mission-sts-69.html HTTP/1.0" 200 10136 +182.200.120.1 - - [28/Jul/1995:13:24:21 -0400] "GET /shuttle/missions/sts-69/sts-69-patch-small.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:24:23 -0400] "GET /images/launch-logo.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:24:23 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 304 0 +198.155.12.92 - - [28/Jul/1995:13:24:25 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 40960 +182.200.120.1 - - [28/Jul/1995:13:24:26 -0400] "GET /software/winvn/winvn.html HTTP/1.0" 200 9866 +222.218.120.1 - - [28/Jul/1995:13:24:27 -0400] "GET /shuttle/technology/images/mission_profile_2-small.gif HTTP/1.0" 200 35540 +163.205.56.149 - - [28/Jul/1995:13:24:27 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +182.200.120.1 - - [28/Jul/1995:13:24:30 -0400] "GET /shuttle/resources/orbiters/endeavour.html HTTP/1.0" 200 6168 +182.200.120.1 - - [28/Jul/1995:13:24:31 -0400] "GET /shuttle/resources/orbiters/endeavour-logo.gif HTTP/1.0" 200 5052 +210.166.12.00 - - [28/Jul/1995:13:24:31 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +199.242.69.156 - - [28/Jul/1995:13:24:31 -0400] "GET /images/construct.gif HTTP/1.0" 200 1414 +182.200.120.1 - - [28/Jul/1995:13:24:33 -0400] "GET /software/winvn/winvn.gif HTTP/1.0" 200 25218 +182.200.120.1 - - [28/Jul/1995:13:24:33 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +182.200.120.1 - - [28/Jul/1995:13:24:33 -0400] "GET /shuttle/resources/orbiters/orbiters-logo.gif HTTP/1.0" 200 1932 +182.200.120.1 - - [28/Jul/1995:13:24:33 -0400] "GET /images/construct.gif HTTP/1.0" 200 1414 +182.200.120.1 - - [28/Jul/1995:13:24:33 -0400] "GET /software/winvn/bluemarb.gif HTTP/1.0" 200 4441 +222.218.120.1 - - [28/Jul/1995:13:24:34 -0400] "GET /shuttle/technology/images/sts_spec_6-small.gif HTTP/1.0" 200 47145 +182.200.120.1 - - [28/Jul/1995:13:24:35 -0400] "GET /history/apollo/apollo-13/apollo-13-patch-small.gif HTTP/1.0" 200 12859 +182.200.120.1 - - [28/Jul/1995:13:24:36 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +128.159.77.122 - - [28/Jul/1995:13:24:36 -0400] "GET /history/early-astronauts.txt HTTP/1.0" 200 3850 +182.200.120.1 - - [28/Jul/1995:13:24:37 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +182.200.120.1 - - [28/Jul/1995:13:24:40 -0400] "GET /shuttle/missions/sts-71/sts-71-press-kit.txt HTTP/1.0" 200 78588 +182.200.120.1 - - [28/Jul/1995:13:24:40 -0400] "GET /software/winvn/wvsmall.gif HTTP/1.0" 200 13372 +182.200.120.1 - - [28/Jul/1995:13:24:41 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +192.112.239.11 - - [28/Jul/1995:13:24:42 -0400] "GET /cgi-bin/imagemap/countdown70?397,276 HTTP/1.0" 302 68 +182.200.120.1 - - [28/Jul/1995:13:24:44 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +182.200.120.1 - - [28/Jul/1995:13:24:47 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +182.200.120.1 - - [28/Jul/1995:13:24:47 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +210.166.12.00 - - [28/Jul/1995:13:24:52 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +222.218.120.1 - - [28/Jul/1995:13:24:53 -0400] "GET /shuttle/technology/images/launch_sites_8-small.gif HTTP/1.0" 200 73728 +199.242.69.156 - - [28/Jul/1995:13:24:53 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +198.155.12.13 - - [28/Jul/1995:13:24:53 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +199.242.69.156 - - [28/Jul/1995:13:24:55 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +182.200.120.1 - - [28/Jul/1995:13:24:55 -0400] "GET /history/apollo/images/footprint-logo.gif HTTP/1.0" 200 4209 +198.155.12.13 - - [28/Jul/1995:13:24:55 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +182.200.120.1 - - [28/Jul/1995:13:24:55 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +198.155.12.13 - - [28/Jul/1995:13:24:57 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +198.155.12.13 - - [28/Jul/1995:13:24:58 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +199.242.69.156 - - [28/Jul/1995:13:24:59 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +198.155.12.13 - - [28/Jul/1995:13:24:59 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +222.218.120.1 - - [28/Jul/1995:13:25:00 -0400] "GET /history/history.html HTTP/1.0" 200 1602 +198.155.12.13 - - [28/Jul/1995:13:25:00 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +222.218.120.1 - - [28/Jul/1995:13:25:03 -0400] "GET /history/apollo/images/apollo-small.gif HTTP/1.0" 200 9630 +199.242.69.156 - - [28/Jul/1995:13:25:03 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.13 - - [28/Jul/1995:13:25:11 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 4324 +210.166.12.00 - - [28/Jul/1995:13:25:12 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +222.218.120.1 - - [28/Jul/1995:13:25:13 -0400] "GET /shuttle/missions/sts-71/movies/movies.html HTTP/1.0" 200 3381 +198.155.12.13 - - [28/Jul/1995:13:25:13 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +198.155.12.13 - - [28/Jul/1995:13:25:16 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +182.200.120.1 - - [28/Jul/1995:13:25:18 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +182.200.120.1 - - [28/Jul/1995:13:25:23 -0400] "GET /facts/facts.html HTTP/1.0" 200 4722 +180.176.12.00 - - [28/Jul/1995:13:25:24 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:25:24 -0400] "GET / HTTP/1.0" 200 7280 +180.176.12.00 - - [28/Jul/1995:13:25:25 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +182.200.120.1 - - [28/Jul/1995:13:25:25 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +182.200.120.1 - - [28/Jul/1995:13:25:26 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +180.176.12.00 - - [28/Jul/1995:13:25:27 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +180.176.12.00 - - [28/Jul/1995:13:25:27 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +180.176.12.00 - - [28/Jul/1995:13:25:28 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +180.176.12.00 - - [28/Jul/1995:13:25:28 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.13 - - [28/Jul/1995:13:25:28 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 304 0 +210.166.12.00 - - [28/Jul/1995:13:25:32 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.13 - - [28/Jul/1995:13:25:33 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:25:34 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:25:34 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 304 0 +222.218.120.1 - - [28/Jul/1995:13:25:36 -0400] "GET / HTTP/1.0" 200 7280 +222.218.120.1 - - [28/Jul/1995:13:25:36 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +198.155.12.13 - - [28/Jul/1995:13:25:37 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +222.218.120.1 - - [28/Jul/1995:13:25:38 -0400] "GET /shuttle/technology/images/srb_16-small.gif HTTP/1.0" 200 42732 +222.218.120.1 - - [28/Jul/1995:13:25:38 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +222.218.120.1 - - [28/Jul/1995:13:25:38 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +222.218.120.1 - - [28/Jul/1995:13:25:38 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +222.218.120.1 - - [28/Jul/1995:13:25:39 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.13 - - [28/Jul/1995:13:25:39 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +198.155.12.13 - - [28/Jul/1995:13:25:43 -0400] "GET /cgi-bin/imagemap/countdown70?71,194 HTTP/1.0" 302 96 +128.159.122.45 - - [28/Jul/1995:13:25:46 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:25:47 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 304 0 +128.159.122.45 - - [28/Jul/1995:13:25:48 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.159.122.45 - - [28/Jul/1995:13:25:49 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.159.122.45 - - [28/Jul/1995:13:25:49 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +128.159.122.45 - - [28/Jul/1995:13:25:49 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +128.159.122.45 - - [28/Jul/1995:13:25:50 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +182.200.120.1 - - [28/Jul/1995:13:25:50 -0400] "GET /facts/faq03.html HTTP/1.0" 200 44449 +182.200.120.1 - - [28/Jul/1995:13:25:50 -0400] "GET / HTTP/1.0" 200 7280 +210.166.12.00 - - [28/Jul/1995:13:25:54 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:25:54 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +198.155.12.13 - - [28/Jul/1995:13:25:58 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:26:00 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +222.218.120.1 - - [28/Jul/1995:13:26:01 -0400] "GET /htbin/wais.pl HTTP/1.0" 200 308 +198.155.12.13 - - [28/Jul/1995:13:26:03 -0400] "GET /history/history.html HTTP/1.0" 200 1602 +198.155.12.13 - - [28/Jul/1995:13:26:04 -0400] "GET /history/apollo/images/apollo-small.gif HTTP/1.0" 200 9630 +222.218.120.1 - - [28/Jul/1995:13:26:08 -0400] "GET /htbin/wais.pl?winvn HTTP/1.0" 200 6212 +128.159.77.122 - - [28/Jul/1995:13:26:11 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +152.140.45.108 - - [28/Jul/1995:13:26:15 -0400] "HEAD /shuttle/missions/sts-61/mission-sts-61.html HTTP/1.0" 200 0 +210.166.12.00 - - [28/Jul/1995:13:26:16 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +193.81.242.40 - - [28/Jul/1995:13:26:17 -0400] "GET /shuttle/technology/sts-newsref/sts-gear.html HTTP/1.0" 200 65575 +198.155.12.13 - - [28/Jul/1995:13:26:18 -0400] "GET /history/skylab/skylab.html HTTP/1.0" 200 1687 +198.155.12.13 - - [28/Jul/1995:13:26:19 -0400] "GET /history/skylab/skylab-small.gif HTTP/1.0" 200 9202 +198.155.12.13 - - [28/Jul/1995:13:26:20 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:26:20 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:26:21 -0400] "GET / HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:26:22 -0400] "GET /history/apollo/images/apollo-logo.gif HTTP/1.0" 200 3047 +198.155.12.13 - - [28/Jul/1995:13:26:22 -0400] "GET / HTTP/1.0" 304 0 +128.159.122.118 - - [28/Jul/1995:13:26:22 -0400] "GET / HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:26:24 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:26:24 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:26:25 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:26:29 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 304 0 +222.218.120.1 - - [28/Jul/1995:13:26:29 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 4324 +198.155.12.13 - - [28/Jul/1995:13:26:32 -0400] "GET /images/launchmedium.gif HTTP/1.0" 304 0 +198.155.12.13 - - [28/Jul/1995:13:26:36 -0400] "GET /history/skylab/skylab-4.html HTTP/1.0" 200 1165 +210.166.12.00 - - [28/Jul/1995:13:26:36 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.13 - - [28/Jul/1995:13:26:37 -0400] "GET /history/skylab/skylab-4-small.gif HTTP/1.0" 200 13775 +222.218.120.1 - - [28/Jul/1995:13:26:37 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +198.155.12.13 - - [28/Jul/1995:13:26:39 -0400] "GET /history/skylab/skylab-logo.gif HTTP/1.0" 200 3274 +222.218.120.1 - - [28/Jul/1995:13:26:41 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +222.218.120.1 - - [28/Jul/1995:13:26:41 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 304 0 +222.218.120.1 - - [28/Jul/1995:13:26:42 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +193.81.242.40 - - [28/Jul/1995:13:26:42 -0400] "GET /shuttle/technology/sts-newsref/sts_asm.html HTTP/1.0" 200 71654 +222.218.120.1 - - [28/Jul/1995:13:26:43 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +222.218.120.1 - - [28/Jul/1995:13:26:43 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +222.218.120.1 - - [28/Jul/1995:13:26:44 -0400] "GET /statistics/statistics.html HTTP/1.0" 200 2813 +222.218.120.1 - - [28/Jul/1995:13:26:45 -0400] "GET /statistics/images/getstats_big.gif HTTP/1.0" 200 6777 +222.218.120.1 - - [28/Jul/1995:13:26:45 -0400] "GET /statistics/images/statsm.gif HTTP/1.0" 200 4413 +222.218.120.1 - - [28/Jul/1995:13:26:45 -0400] "GET /icon/new01.gif HTTP/1.0" 200 1016 +222.218.120.1 - - [28/Jul/1995:13:26:47 -0400] "GET / HTTP/1.0" 200 7280 +198.155.12.92 - - [28/Jul/1995:13:26:49 -0400] "GET /shuttle/countdown/video/livevideo2.gif HTTP/1.0" 200 49152 +222.218.120.1 - - [28/Jul/1995:13:26:49 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +198.155.12.13 - - [28/Jul/1995:13:26:50 -0400] "GET /facts/faq04.html HTTP/1.0" 200 27063 +193.81.242.40 - - [28/Jul/1995:13:26:51 -0400] "GET /shuttle/technology/images/srb_mod_compare_1-small.gif HTTP/1.0" 200 36902 +222.218.120.1 - - [28/Jul/1995:13:26:51 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +222.218.120.1 - - [28/Jul/1995:13:26:51 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +193.81.242.40 - - [28/Jul/1995:13:26:52 -0400] "GET /shuttle/technology/images/srb_mod_compare_6-small.gif HTTP/1.0" 200 28219 +222.218.120.1 - - [28/Jul/1995:13:26:52 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +128.159.77.122 - - [28/Jul/1995:13:26:53 -0400] "GET /facts/facts.html HTTP/1.0" 200 4722 +222.218.120.1 - - [28/Jul/1995:13:26:54 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.159.77.122 - - [28/Jul/1995:13:26:54 -0400] "GET /images/faq.gif HTTP/1.0" 200 263 +193.81.242.40 - - [28/Jul/1995:13:26:56 -0400] "GET /shuttle/technology/images/srb_mod_compare_3-small.gif HTTP/1.0" 200 49152 +222.218.120.1 - - [28/Jul/1995:13:26:56 -0400] "GET /facts/facts.html HTTP/1.0" 200 4722 +210.166.12.00 - - [28/Jul/1995:13:26:57 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +222.218.120.1 - - [28/Jul/1995:13:26:57 -0400] "GET /images/faq.gif HTTP/1.0" 200 263 +222.218.120.1 - - [28/Jul/1995:13:26:57 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +198.155.12.92 - - [28/Jul/1995:13:26:59 -0400] "GET /shuttle/missions/sts-69/mission-sts-69.html HTTP/1.0" 200 10136 +198.155.12.92 - - [28/Jul/1995:13:27:00 -0400] "GET /shuttle/missions/sts-69/sts-69-patch-small.gif HTTP/1.0" 200 8083 +128.159.77.122 - - [28/Jul/1995:13:27:00 -0400] "GET /facts/faq06.html HTTP/1.0" 200 12686 +128.159.77.122 - - [28/Jul/1995:13:27:01 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +222.218.120.1 - - [28/Jul/1995:13:27:12 -0400] "GET /history/history.html HTTP/1.0" 200 1602 +222.218.120.1 - - [28/Jul/1995:13:27:14 -0400] "GET /history/apollo/images/apollo-small.gif HTTP/1.0" 200 9630 +210.166.12.00 - - [28/Jul/1995:13:27:18 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +222.218.120.1 - - [28/Jul/1995:13:27:19 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +222.218.120.1 - - [28/Jul/1995:13:27:19 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +222.218.120.1 - - [28/Jul/1995:13:27:21 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +198.155.12.13 - - [28/Jul/1995:13:27:21 -0400] "GET /history/apollo/apollo.html HTTP/1.0" 200 3260 +198.155.12.13 - - [28/Jul/1995:13:27:22 -0400] "GET /history/apollo/images/footprint-small.gif HTTP/1.0" 200 18149 +198.155.12.13 - - [28/Jul/1995:13:27:22 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +198.155.12.13 - - [28/Jul/1995:13:27:22 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +222.218.120.1 - - [28/Jul/1995:13:27:25 -0400] "GET /facilities/tour.html HTTP/1.0" 200 3723 +222.218.120.1 - - [28/Jul/1995:13:27:26 -0400] "GET /images/kscmap-small.gif HTTP/1.0" 200 39017 +222.218.120.1 - - [28/Jul/1995:13:27:26 -0400] "GET /history/history.html HTTP/1.0" 304 0 +222.218.120.1 - - [28/Jul/1995:13:27:28 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:27:30 -0400] "GET /shuttle/missions/sts-37/mission-sts-37.html HTTP/1.0" 200 5864 +222.218.120.1 - - [28/Jul/1995:13:27:31 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 304 0 +222.218.120.1 - - [28/Jul/1995:13:27:32 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +182.200.120.1 - - [28/Jul/1995:13:27:32 -0400] "GET /shuttle/missions/sts-37/sts-37-patch-small.gif HTTP/1.0" 200 10371 +222.218.120.1 - - [28/Jul/1995:13:27:33 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +222.218.120.1 - - [28/Jul/1995:13:27:34 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +222.218.120.1 - - [28/Jul/1995:13:27:34 -0400] "GET /history/apollo/images/apollo-small.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:27:35 -0400] "GET /history/history.html HTTP/1.0" 200 1602 +222.218.120.1 - - [28/Jul/1995:13:27:37 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +222.218.120.1 - - [28/Jul/1995:13:27:38 -0400] "GET /cgi-bin/imagemap/countdown70?57,183 HTTP/1.0" 302 96 +210.166.12.00 - - [28/Jul/1995:13:27:38 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +128.159.77.122 - - [28/Jul/1995:13:27:38 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +128.159.122.45 - - [28/Jul/1995:13:27:39 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +222.218.120.1 - - [28/Jul/1995:13:27:42 -0400] "GET /shuttle/missions/sts-71/movies/sts-71-mir-dock.mpg HTTP/1.0" 200 946425 +222.218.120.1 - - [28/Jul/1995:13:27:42 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +222.218.120.1 - - [28/Jul/1995:13:27:43 -0400] "GET /shuttle/technology/sts-newsref/stsref-toc.html HTTP/1.0" 200 84905 +128.159.122.45 - - [28/Jul/1995:13:27:43 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.159.122.45 - - [28/Jul/1995:13:27:48 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.159.122.45 - - [28/Jul/1995:13:27:48 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +222.218.120.1 - - [28/Jul/1995:13:27:48 -0400] "GET /shuttle/technology/images/srb_16.jpg HTTP/1.0" 200 107593 +128.159.122.45 - - [28/Jul/1995:13:27:48 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +128.159.122.45 - - [28/Jul/1995:13:27:49 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +128.159.77.122 - - [28/Jul/1995:13:27:50 -0400] "GET /facilities/tour.html HTTP/1.0" 200 3723 +128.159.77.122 - - [28/Jul/1995:13:27:51 -0400] "GET /images/kscmap-small.gif HTTP/1.0" 200 39017 +222.218.120.1 - - [28/Jul/1995:13:27:52 -0400] "GET /history/apollo/apollo.html HTTP/1.0" 304 0 +222.218.120.1 - - [28/Jul/1995:13:27:54 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 304 0 +222.218.120.1 - - [28/Jul/1995:13:27:54 -0400] "GET /history/apollo/images/footprint-small.gif HTTP/1.0" 304 0 +182.200.120.1 - - [28/Jul/1995:13:27:54 -0400] "GET /history/apollo/apollo-13/apollo-13-info.html HTTP/1.0" 200 1583 +210.166.12.00 - - [28/Jul/1995:13:27:58 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.13 - - [28/Jul/1995:13:28:01 -0400] "GET /history/skylab/skylab-station.txt HTTP/1.0" 200 286 +222.218.120.1 - - [28/Jul/1995:13:28:03 -0400] "GET /htbin/wais.pl HTTP/1.0" 200 308 +182.200.120.1 - - [28/Jul/1995:13:28:03 -0400] "GET /history/apollo/images/apollo-small.gif HTTP/1.0" 200 9630 +180.176.12.00 - - [28/Jul/1995:13:28:08 -0400] "GET /software/winvn/winvn.html HTTP/1.0" 200 9866 +128.159.77.122 - - [28/Jul/1995:13:28:11 -0400] "GET /images/kscmap.gif HTTP/1.0" 200 177415 +180.176.12.00 - - [28/Jul/1995:13:28:11 -0400] "GET /history/apollo/apollo-13/apollo-13.html HTTP/1.0" 200 18556 +180.176.12.00 - - [28/Jul/1995:13:28:12 -0400] "GET /history/apollo/apollo-13/apollo-13-patch-small.gif HTTP/1.0" 200 12859 +198.155.12.13 - - [28/Jul/1995:13:28:12 -0400] "GET /history/apollo/apollo-spacecraft.txt HTTP/1.0" 200 2261 +128.217.61.99 - - [28/Jul/1995:13:28:13 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +180.176.12.00 - - [28/Jul/1995:13:28:13 -0400] "GET /history/apollo/images/footprint-logo.gif HTTP/1.0" 200 4209 +180.176.12.00 - - [28/Jul/1995:13:28:13 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +128.217.61.99 - - [28/Jul/1995:13:28:13 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.217.61.99 - - [28/Jul/1995:13:28:14 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.217.61.99 - - [28/Jul/1995:13:28:15 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +128.217.61.99 - - [28/Jul/1995:13:28:15 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +222.218.120.1 - - [28/Jul/1995:13:28:16 -0400] "GET /htbin/wais.pl?camp HTTP/1.0" 200 5660 +128.217.61.99 - - [28/Jul/1995:13:28:17 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +210.166.12.00 - - [28/Jul/1995:13:28:18 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +180.176.12.00 - - [28/Jul/1995:13:28:20 -0400] "GET /facts/faq05.html HTTP/1.0" 200 38485 +198.209.221.200 - - [28/Jul/1995:13:28:21 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +128.159.121.64 - - [28/Jul/1995:13:28:21 -0400] "GET /finance/main.htm HTTP/1.0" 200 1974 +198.155.12.13 - - [28/Jul/1995:13:28:22 -0400] "GET /history/skylab/skylab-operations.txt HTTP/1.0" 200 13586 +128.159.121.64 - - [28/Jul/1995:13:28:24 -0400] "GET /finance/collsm1.gif HTTP/1.0" 200 52781 +128.159.121.64 - - [28/Jul/1995:13:28:25 -0400] "GET /finance/suit.gif HTTP/1.0" 200 1294 +128.159.121.64 - - [28/Jul/1995:13:28:25 -0400] "GET /finance/links.gif HTTP/1.0" 200 1069 +128.159.121.64 - - [28/Jul/1995:13:28:26 -0400] "GET /finance/ref_btn.gif HTTP/1.0" 200 2582 +128.159.121.64 - - [28/Jul/1995:13:28:26 -0400] "GET /finance/webserch.gif HTTP/1.0" 200 2682 +180.176.12.00 - - [28/Jul/1995:13:28:26 -0400] "GET /shuttle/missions/sts-71/images/images.html HTTP/1.0" 200 8529 +198.209.221.200 - - [28/Jul/1995:13:28:26 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.159.121.64 - - [28/Jul/1995:13:28:26 -0400] "GET /finance/toairpla.gif HTTP/1.0" 200 2498 +128.159.121.64 - - [28/Jul/1995:13:28:27 -0400] "GET /finance/book.gif HTTP/1.0" 200 3203 +128.159.121.64 - - [28/Jul/1995:13:28:27 -0400] "GET /finance/tour.gif HTTP/1.0" 200 2845 +128.159.121.64 - - [28/Jul/1995:13:28:27 -0400] "GET /finance/brrow_1t.gif HTTP/1.0" 200 632 +198.209.221.200 - - [28/Jul/1995:13:28:28 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +222.218.120.1 - - [28/Jul/1995:13:28:30 -0400] "GET /history/gemini/gemini.html HTTP/1.0" 200 2522 +182.200.120.1 - - [28/Jul/1995:13:28:31 -0400] "GET /shuttle/missions/sts-37/news HTTP/1.0" 302 - +182.200.120.1 - - [28/Jul/1995:13:28:31 -0400] "GET /shuttle/missions/sts-37/news/ HTTP/1.0" 200 374 +182.200.120.1 - - [28/Jul/1995:13:28:32 -0400] "GET /history/apollo/apollo-13/images/ HTTP/1.0" 200 1851 +222.218.120.1 - - [28/Jul/1995:13:28:32 -0400] "GET /images/gemini-logo.gif HTTP/1.0" 200 4452 +222.218.120.1 - - [28/Jul/1995:13:28:33 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +222.218.120.1 - - [28/Jul/1995:13:28:33 -0400] "GET /history/apollo/images/apollo-logo.gif HTTP/1.0" 200 3047 +222.218.120.1 - - [28/Jul/1995:13:28:33 -0400] "GET / HTTP/1.0" 200 7280 +198.209.221.200 - - [28/Jul/1995:13:28:33 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +198.209.221.200 - - [28/Jul/1995:13:28:34 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +180.176.12.00 - - [28/Jul/1995:13:28:35 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +180.176.12.00 - - [28/Jul/1995:13:28:36 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +198.209.221.200 - - [28/Jul/1995:13:28:36 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +180.176.12.00 - - [28/Jul/1995:13:28:38 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +180.176.12.00 - - [28/Jul/1995:13:28:38 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +180.176.12.00 - - [28/Jul/1995:13:28:38 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +180.176.12.00 - - [28/Jul/1995:13:28:38 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +210.166.12.00 - - [28/Jul/1995:13:28:39 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +180.176.12.00 - - [28/Jul/1995:13:28:40 -0400] "GET /software/winvn/wvlarge.gif HTTP/1.0" 200 23416 +180.176.12.00 - - [28/Jul/1995:13:28:41 -0400] "GET /shuttle/missions/sts-62/sts-62-patch-small.gif HTTP/1.0" 200 14385 +222.218.120.1 - - [28/Jul/1995:13:28:42 -0400] "GET /shuttle/technology/images/sts_spec_6-small.gif HTTP/1.0" 200 47145 +222.218.120.1 - - [28/Jul/1995:13:28:42 -0400] "GET /shuttle/technology/images/launch_sites_8-small.gif HTTP/1.0" 200 40960 +163.205.53.14 - - [28/Jul/1995:13:28:49 -0400] "GET /images/shuttle-patch-small.gif HTTP/1.0" 200 4179 +163.205.53.14 - - [28/Jul/1995:13:28:51 -0400] "GET /shuttle/technology/sts-newsref/stsref-toc.html HTTP/1.0" 200 84905 +222.218.120.1 - - [28/Jul/1995:13:28:52 -0400] "GET /history/gemini/flight-summary.txt HTTP/1.0" 200 2794 +163.205.53.14 - - [28/Jul/1995:13:28:53 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +163.205.53.14 - - [28/Jul/1995:13:28:53 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +180.176.12.00 - - [28/Jul/1995:13:28:55 -0400] "GET /shuttle/missions/sts-62/mission-sts-62.html HTTP/1.0" 200 64619 +222.218.120.1 - - [28/Jul/1995:13:28:58 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 4324 +222.218.120.1 - - [28/Jul/1995:13:28:59 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +180.176.12.00 - - [28/Jul/1995:13:29:00 -0400] "GET /shuttle/missions/sts-69/mission-sts-69.html HTTP/1.0" 304 0 +210.166.12.00 - - [28/Jul/1995:13:29:00 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +182.200.120.1 - - [28/Jul/1995:13:29:01 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +180.176.12.00 - - [28/Jul/1995:13:29:01 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +180.176.12.00 - - [28/Jul/1995:13:29:02 -0400] "GET /shuttle/missions/sts-69/sts-69-patch-small.gif HTTP/1.0" 304 0 +180.176.12.00 - - [28/Jul/1995:13:29:02 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 304 0 +180.176.12.00 - - [28/Jul/1995:13:29:02 -0400] "GET /images/launch-logo.gif HTTP/1.0" 304 0 +180.176.12.00 - - [28/Jul/1995:13:29:02 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +180.176.12.00 - - [28/Jul/1995:13:29:03 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 304 0 +163.205.53.14 - - [28/Jul/1995:13:29:04 -0400] "GET /shuttle/technology/sts-newsref/sts_asm.html HTTP/1.0" 200 71654 +180.176.12.00 - - [28/Jul/1995:13:29:04 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +180.176.12.00 - - [28/Jul/1995:13:29:04 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +163.205.53.14 - - [28/Jul/1995:13:29:06 -0400] "GET /shuttle/technology/images/srb_mod_compare_1-small.gif HTTP/1.0" 200 36902 +163.205.53.14 - - [28/Jul/1995:13:29:06 -0400] "GET /shuttle/technology/images/srb_mod_compare_6-small.gif HTTP/1.0" 200 28219 +182.200.120.1 - - [28/Jul/1995:13:29:06 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +163.205.53.14 - - [28/Jul/1995:13:29:06 -0400] "GET /shuttle/technology/images/srb_mod_compare_3-small.gif HTTP/1.0" 200 55666 +163.205.53.14 - - [28/Jul/1995:13:29:06 -0400] "GET /images/shuttle-patch-logo.gif HTTP/1.0" 200 891 +182.200.120.1 - - [28/Jul/1995:13:29:08 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +182.200.120.1 - - [28/Jul/1995:13:29:12 -0400] "GET /history/apollo/apollo.html HTTP/1.0" 200 3260 +180.176.12.00 - - [28/Jul/1995:13:29:12 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +180.176.12.00 - - [28/Jul/1995:13:29:12 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +180.176.12.00 - - [28/Jul/1995:13:29:12 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +130.151.90.75 - - [28/Jul/1995:13:29:13 -0400] "GET /history/apollo/apollo-13/apollo-13.html HTTP/1.0" 200 18556 +128.158.57.20 - - [28/Jul/1995:13:29:14 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 4324 +130.151.90.75 - - [28/Jul/1995:13:29:15 -0400] "GET /history/apollo/apollo-13/apollo-13-patch-small.gif HTTP/1.0" 200 12859 +128.158.57.20 - - [28/Jul/1995:13:29:15 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +130.151.90.75 - - [28/Jul/1995:13:29:16 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +130.151.90.75 - - [28/Jul/1995:13:29:16 -0400] "GET /history/apollo/images/footprint-logo.gif HTTP/1.0" 200 4209 +128.158.57.20 - - [28/Jul/1995:13:29:18 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +222.218.120.1 - - [28/Jul/1995:13:29:18 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +180.176.12.00 - - [28/Jul/1995:13:29:18 -0400] "GET /shuttle/missions/sts-69/mission-sts-69.html HTTP/1.0" 200 10136 +128.158.57.20 - - [28/Jul/1995:13:29:19 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +180.176.12.00 - - [28/Jul/1995:13:29:19 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +180.176.12.00 - - [28/Jul/1995:13:29:19 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +194.166.2.31 - - [28/Jul/1995:13:29:20 -0400] "GET / HTTP/1.0" 200 7280 +210.166.12.00 - - [28/Jul/1995:13:29:21 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.209.221.200 - - [28/Jul/1995:13:29:23 -0400] "GET /shuttle/missions/sts-69/mission-sts-69.html HTTP/1.0" 200 10136 +180.176.12.00 - - [28/Jul/1995:13:29:24 -0400] "GET /shuttle/missions/sts-69/sts-69-patch-small.gif HTTP/1.0" 200 8083 +192.138.199.30 - - [28/Jul/1995:13:29:24 -0400] "GET /elv/uplink.htm HTTP/1.0" 200 1498 +192.138.199.30 - - [28/Jul/1995:13:29:26 -0400] "GET /elv/elvhead2.gif HTTP/1.0" 200 1733 +180.176.12.00- - [28/Jul/1995:13:29:27 -0400] "GET /shuttle/countdown/countdown.html HTTP/1.0" 200 4324 +182.198.120.1 - - [28/Jul/1995:13:29:27 -0400] "GET /images/ HTTP/1.0" 200 17688 +128.159.77.122 - - [28/Jul/1995:13:29:28 -0400] "GET /facilities/crawler.html HTTP/1.0" 200 3601 +182.198.120.1 - - [28/Jul/1995:13:29:28 -0400] "GET /icons/blank.xbm HTTP/1.0" 200 509 +182.198.120.1 - - [28/Jul/1995:13:29:28 -0400] "GET /icons/menu.xbm HTTP/1.0" 200 527 +128.159.77.122 - - [28/Jul/1995:13:29:29 -0400] "GET /images/crawler-logo.gif HTTP/1.0" 200 14108 +194.166.2.31 - - [28/Jul/1995:13:29:29 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.159.77.122 - - [28/Jul/1995:13:29:29 -0400] "GET /images/kscmap-tiny.gif HTTP/1.0" 200 2537 +180.176.12.00- - [28/Jul/1995:13:29:31 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +182.200.120.1 - - [28/Jul/1995:13:29:31 -0400] "GET /history/apollo/images/footprint-small.gif HTTP/1.0" 200 18149 +180.176.12.00- - [28/Jul/1995:13:29:32 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +180.176.12.00 - - [28/Jul/1995:13:29:32 -0400] "GET /msfc/astro_home.html HTTP/1.0" 200 2938 +163.205.53.14 - - [28/Jul/1995:13:29:33 -0400] "GET /shuttle/technology/images/srb_mod_compare_6-small.gif HTTP/1.0" 200 28219 +163.205.53.14 - - [28/Jul/1995:13:29:33 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +163.205.53.14 - - [28/Jul/1995:13:29:33 -0400] "GET /shuttle/technology/images/srb_mod_compare_1-small.gif HTTP/1.0" 200 36902 +163.205.53.14 - - [28/Jul/1995:13:29:34 -0400] "GET /shuttle/technology/images/srb_mod_compare_3-small.gif HTTP/1.0" 200 55666 +182.198.120.1 - - [28/Jul/1995:13:29:35 -0400] "GET /icons/unknown.xbm HTTP/1.0" 200 515 +222.218.120.1 - - [28/Jul/1995:13:29:36 -0400] "GET /history/apollo/apollo.html HTTP/1.0" 200 3260 +182.198.120.1 - - [28/Jul/1995:13:29:36 -0400] "GET /icons/image.xbm HTTP/1.0" 200 509 +222.218.120.1 - - [28/Jul/1995:13:29:37 -0400] "GET /cgi-bin/imagemap/countdown70?11,351 HTTP/1.0" 302 102 +222.218.120.1 - - [28/Jul/1995:13:29:37 -0400] "GET /history/apollo/images/footprint-small.gif HTTP/1.0" 200 18149 +222.218.120.1 - - [28/Jul/1995:13:29:38 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +222.218.120.1 - - [28/Jul/1995:13:29:38 -0400] "GET /shuttle/countdown/countdown70.html HTTP/1.0" 200 4247 +180.166.12.00 - - [28/Jul/1995:13:29:38 -0400] "GET / HTTP/1.0" 200 7280 +222.218.120.1 - - [28/Jul/1995:13:29:38 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +128.217.63.13 - - [28/Jul/1995:13:29:41 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +210.166.12.00 - - [28/Jul/1995:13:29:41 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +128.217.63.13 - - [28/Jul/1995:13:29:43 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.158.57.20 - - [28/Jul/1995:13:29:43 -0400] "GET /htbin/cdt_main.pl HTTP/1.0" 200 3674 +128.158.57.20 - - [28/Jul/1995:13:29:44 -0400] "GET /shuttle/countdown/images/countclock.gif HTTP/1.0" 200 13994 +128.217.63.13 - - [28/Jul/1995:13:29:45 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +163.205.53.14 - - [28/Jul/1995:13:29:46 -0400] "GET /images/shuttle-patch-logo.gif HTTP/1.0" 200 891 +194.166.2.31 - - [28/Jul/1995:13:29:46 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.217.63.13 - - [28/Jul/1995:13:29:47 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +194.166.2.31 - - [28/Jul/1995:13:29:47 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +194.166.2.31 - - [28/Jul/1995:13:29:47 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +128.217.63.13 - - [28/Jul/1995:13:29:47 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +222.218.120.1 - - [28/Jul/1995:13:29:48 -0400] "GET /history/apollo/flight-summary.txt HTTP/1.0" 200 5086 +128.217.63.13 - - [28/Jul/1995:13:29:48 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +180.176.12.00- - [28/Jul/1995:13:29:51 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +180.166.12.00 - - [28/Jul/1995:13:29:51 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +194.166.2.31 - - [28/Jul/1995:13:29:51 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +222.218.120.1 - - [28/Jul/1995:13:29:53 -0400] "GET /cgi-bin/imagemap/countdown70?277,289 HTTP/1.0" 302 85 +180.176.12.00 - - [28/Jul/1995:13:29:53 -0400] "GET /msfc/astro_home3.gif HTTP/1.0" 200 106535 +182.200.120.1 - - [28/Jul/1995:13:29:54 -0400] "GET /history/apollo/apollo-13/images/index.gif HTTP/1.0" 200 99942 +222.218.120.1 - - [28/Jul/1995:13:29:55 -0400] "GET /htbin/cdt_main.pl HTTP/1.0" 200 3674 +198.209.221.200 - - [28/Jul/1995:13:29:56 -0400] "GET /shuttle/missions/sts-69/sts-69-patch-small.gif HTTP/1.0" 200 8083 +222.218.120.1 - - [28/Jul/1995:13:29:56 -0400] "GET /shuttle/countdown/images/countclock.gif HTTP/1.0" 200 13994 +128.217.63.13 - - [28/Jul/1995:13:29:57 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +128.159.77.122 - - [28/Jul/1995:13:29:57 -0400] "GET /facilities/slf.html HTTP/1.0" 200 3995 +128.159.77.122 - - [28/Jul/1995:13:29:57 -0400] "GET /images/slf-logo.gif HTTP/1.0" 200 10966 +180.166.12.00 - - [28/Jul/1995:13:30:02 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +210.166.12.00 - - [28/Jul/1995:13:30:02 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.209.221.200 - - [28/Jul/1995:13:30:05 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +180.166.12.00 - - [28/Jul/1995:13:30:05 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +180.166.12.00 - - [28/Jul/1995:13:30:07 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +222.218.120.1 - - [28/Jul/1995:13:30:09 -0400] "GET /history/apollo/apollo-goals.txt HTTP/1.0" 200 712 +180.166.12.00 - - [28/Jul/1995:13:30:09 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.209.221.200 - - [28/Jul/1995:13:30:10 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +192.138.199.30 - - [28/Jul/1995:13:30:10 -0400] "GET /elv/elvpage.htm HTTP/1.0" 200 7838 +128.159.77.122 - - [28/Jul/1995:13:30:12 -0400] "GET /facilities/opf.html HTTP/1.0" 200 2355 +192.138.199.30 - - [28/Jul/1995:13:30:12 -0400] "GET /elv/bakgro.gif HTTP/1.0" 200 526 +128.159.77.122 - - [28/Jul/1995:13:30:12 -0400] "GET /images/opf-logo.gif HTTP/1.0" 200 32511 +192.138.199.30 - - [28/Jul/1995:13:30:12 -0400] "GET /elv/elvhead3.gif HTTP/1.0" 200 9925 +192.138.199.30 - - [28/Jul/1995:13:30:13 -0400] "GET /elv/endball.gif HTTP/1.0" 200 306 +222.218.120.1 - - [28/Jul/1995:13:30:13 -0400] "GET /news/sci.space.news/archive/sci-space-news-1-feb-1995-80.txt HTTP/1.0" 200 241853 +180.176.12.00 - - [28/Jul/1995:13:30:14 -0400] "GET /shuttle/missions/sts-71/images/KSC-95EC-0613.jpg HTTP/1.0" 200 61716 +180.176.12.00 - - [28/Jul/1995:13:30:15 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +198.209.221.200 - - [28/Jul/1995:13:30:15 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +192.138.199.30 - - [28/Jul/1995:13:30:15 -0400] "GET /elv/hot.gif HTTP/1.0" 200 1007 +192.138.199.30 - - [28/Jul/1995:13:30:16 -0400] "GET /elv/PEGASUS/minpeg1.gif HTTP/1.0" 200 1055 +182.200.120.1 - - [28/Jul/1995:13:30:17 -0400] "GET /images/ HTTP/1.0" 200 17688 +192.138.199.30 - - [28/Jul/1995:13:30:17 -0400] "GET /elv/SCOUT/scout.gif HTTP/1.0" 200 1165 +180.176.12.00 - - [28/Jul/1995:13:30:19 -0400] "GET /elv/elvpage.htm HTTP/1.0" 200 7838 +180.176.12.00 - - [28/Jul/1995:13:30:20 -0400] "GET /elv/elvhead3.gif HTTP/1.0" 200 9925 +180.176.12.00 - - [28/Jul/1995:13:30:20 -0400] "GET /elv/endball.gif HTTP/1.0" 200 306 +180.176.12.00 - - [28/Jul/1995:13:30:21 -0400] "GET /elv/hot.gif HTTP/1.0" 200 1007 +180.176.12.00 - - [28/Jul/1995:13:30:21 -0400] "GET /elv/SCOUT/scout.gif HTTP/1.0" 200 1165 +180.176.12.00 - - [28/Jul/1995:13:30:21 -0400] "GET /elv/PEGASUS/minpeg1.gif HTTP/1.0" 200 1055 +180.176.12.00 - - [28/Jul/1995:13:30:22 -0400] "GET /elv/ATLAS_CENTAUR/atlas.gif HTTP/1.0" 200 2286 +180.176.12.00 - - [28/Jul/1995:13:30:22 -0400] "GET /elv/DELTA/delta.gif HTTP/1.0" 200 2244 +210.166.12.00 - - [28/Jul/1995:13:30:22 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +131.110.55.100 - - [28/Jul/1995:13:30:23 -0400] "GET /history/history.html HTTP/1.0" 200 1602 +180.176.12.00 - - [28/Jul/1995:13:30:23 -0400] "GET /elv/TITAN/titan.gif HTTP/1.0" 200 3530 +131.110.55.100 - - [28/Jul/1995:13:30:24 -0400] "GET /history/apollo/images/apollo-small.gif HTTP/1.0" 200 9630 +180.176.12.00 - - [28/Jul/1995:13:30:25 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +180.176.12.00 - - [28/Jul/1995:13:30:25 -0400] "GET /elv/struct.gif HTTP/1.0" 200 1318 +192.138.199.30 - - [28/Jul/1995:13:30:25 -0400] "GET /elv/DELTA/delta.gif HTTP/1.0" 200 2244 +192.138.199.30 - - [28/Jul/1995:13:30:25 -0400] "GET /elv/ATLAS_CENTAUR/atlas.gif HTTP/1.0" 200 2286 +192.138.199.30 - - [28/Jul/1995:13:30:25 -0400] "GET /elv/TITAN/titan.gif HTTP/1.0" 200 3530 +198.155.12.92 - - [28/Jul/1995:13:30:26 -0400] "GET /shuttle/technology/images/launch_sites_8-small.gif HTTP/1.0" 200 65536 +131.110.55.100 - - [28/Jul/1995:13:30:26 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +192.138.199.30 - - [28/Jul/1995:13:30:26 -0400] "GET /elv/struct.gif HTTP/1.0" 200 1318 +131.110.55.100 - - [28/Jul/1995:13:30:27 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +180.176.12.00 - - [28/Jul/1995:13:30:27 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +222.218.120.1 - - [28/Jul/1995:13:30:33 -0400] "GET /history/apollo/apollo-spacecraft.txt HTTP/1.0" 200 2261 +131.110.55.100 - - [28/Jul/1995:13:30:33 -0400] "GET /history/apollo/apollo.html HTTP/1.0" 200 3260 +192.138.199.30 - - [28/Jul/1995:13:30:33 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +128.159.77.122 - - [28/Jul/1995:13:30:33 -0400] "GET /facilities/vab.html HTTP/1.0" 200 4045 +128.159.77.122 - - [28/Jul/1995:13:30:34 -0400] "GET /images/vab-small.gif HTTP/1.0" 200 35709 +192.138.199.30 - - [28/Jul/1995:13:30:34 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +198.155.12.13 - - [28/Jul/1995:13:30:36 -0400] "GET /shuttle/missions/sts-73/mission-sts-73.html HTTP/1.0" 200 4101 +193.81.242.40 - - [28/Jul/1995:13:30:37 -0400] "GET /shuttle/technology/images/sts_body_2-small.gif HTTP/1.0" 200 30067 +180.166.12.00 - - [28/Jul/1995:13:30:38 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 4324 +131.110.55.100 - - [28/Jul/1995:13:30:38 -0400] "GET /history/apollo/images/footprint-small.gif HTTP/1.0" 200 18149 +198.155.12.13 - - [28/Jul/1995:13:30:38 -0400] "GET /shuttle/missions/sts-73/sts-73-patch-small.gif HTTP/1.0" 200 4179 +180.176.12.00 - - [28/Jul/1995:13:30:39 -0400] "GET /elv/uplink.htm HTTP/1.0" 200 1498 +198.155.12.13 - - [28/Jul/1995:13:30:41 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +194.166.2.31 - - [28/Jul/1995:13:30:42 -0400] "GET /shuttle/missions/sts-71/images/images.html HTTP/1.0" 200 8529 +198.155.12.13 - - [28/Jul/1995:13:30:42 -0400] "GET /history/apollo/apollo.html HTTP/1.0" 200 3260 +180.176.12.00 - - [28/Jul/1995:13:30:42 -0400] "GET /elv/elvhead2.gif HTTP/1.0" 200 1733 +210.166.12.00 - - [28/Jul/1995:13:30:43 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +198.155.12.92 - - [28/Jul/1995:13:30:43 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +131.110.55.100 - - [28/Jul/1995:13:30:43 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +198.155.12.13 - - [28/Jul/1995:13:30:43 -0400] "GET /history/apollo/images/footprint-small.gif HTTP/1.0" 200 18149 +198.155.12.92 - - [28/Jul/1995:13:30:43 -0400] "GET /images/launchmedium.gif HTTP/1.0" 200 11853 +198.155.12.13 - - [28/Jul/1995:13:30:46 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +180.176.12.00 - - [28/Jul/1995:13:30:46 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +180.166.12.00 - - [28/Jul/1995:13:30:47 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +128.159.77.122 - - [28/Jul/1995:13:30:50 -0400] "GET /facilities/lcc.html HTTP/1.0" 200 2489 +128.159.77.122 - - [28/Jul/1995:13:30:50 -0400] "GET /images/lcc-small2.gif HTTP/1.0" 200 58026 +131.110.55.100 - - [28/Jul/1995:13:30:50 -0400] "GET /history/apollo/flight-summary.txt HTTP/1.0" 200 5086 +198.155.12.13 - - [28/Jul/1995:13:30:55 -0400] "GET /shuttle/resources/orbiters/columbia.html HTTP/1.0" 200 6922 +180.176.12.00 - - [28/Jul/1995:13:30:56 -0400] "GET /history/apollo/flight-summary.txt HTTP/1.0" 200 5086 +128.217.63.13 - - [28/Jul/1995:13:30:58 -0400] "GET /shuttle/missions/sts-70/mission-sts-70.html HTTP/1.0" 200 20226 +198.155.12.13 - - [28/Jul/1995:13:30:59 -0400] "GET /shuttle/resources/orbiters/columbia-logo.gif HTTP/1.0" 200 11417 +163.205.53.14 - - [28/Jul/1995:13:31:01 -0400] "GET /shuttle/technology/images/srb_mod_compare_6-small.gif HTTP/1.0" 200 28219 +163.205.53.14 - - [28/Jul/1995:13:31:01 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +163.205.53.14 - - [28/Jul/1995:13:31:01 -0400] "GET /shuttle/technology/images/srb_mod_compare_1-small.gif HTTP/1.0" 200 36902 +163.205.53.14 - - [28/Jul/1995:13:31:01 -0400] "GET /shuttle/technology/images/srb_mod_compare_3-small.gif HTTP/1.0" 200 55666 +128.217.63.13 - - [28/Jul/1995:13:31:02 -0400] "GET /shuttle/missions/sts-70/sts-70-patch-small.gif HTTP/1.0" 200 5978 +210.166.12.00 - - [28/Jul/1995:13:31:03 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +128.217.63.13 - - [28/Jul/1995:13:31:04 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +128.217.63.13 - - [28/Jul/1995:13:31:05 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +163.205.53.14 - - [28/Jul/1995:13:31:05 -0400] "GET /images/shuttle-patch-logo.gif HTTP/1.0" 200 891 +198.155.12.92 - - [28/Jul/1995:13:31:05 -0400] "GET /shuttle/missions/sts-73/mission-sts-73.html HTTP/1.0" 200 4101 +180.176.12.00 - - [28/Jul/1995:13:31:06 -0400] "GET /htbin/cdt_main.pl HTTP/1.0" 200 3674 +198.155.12.13 - - [28/Jul/1995:13:31:06 -0400] "GET /history/apollo/apollo-7/apollo-7.html HTTP/1.0" 200 14440 +180.176.12.00 - - [28/Jul/1995:13:31:06 -0400] "GET /shuttle/countdown/images/countclock.gif HTTP/1.0" 200 13994 +128.217.63.13 - - [28/Jul/1995:13:31:07 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +180.176.12.00 - - [28/Jul/1995:13:31:07 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +180.176.12.00 - - [28/Jul/1995:13:31:07 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +180.176.12.00 - - [28/Jul/1995:13:31:07 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +180.176.12.00 - - [28/Jul/1995:13:31:07 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +198.155.12.13 - - [28/Jul/1995:13:31:08 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +198.155.12.13 - - [28/Jul/1995:13:31:09 -0400] "GET /history/apollo/apollo-7/apollo-7-patch-small.gif HTTP/1.0" 200 13218 +128.159.77.122 - - [28/Jul/1995:13:31:09 -0400] "GET /facilities/crawlerway.html HTTP/1.0" 200 1921 +128.159.77.122 - - [28/Jul/1995:13:31:10 -0400] "GET /images/crawlerway-logo.gif HTTP/1.0" 404 - +180.176.12.00 - - [28/Jul/1995:13:31:10 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.13 - - [28/Jul/1995:13:31:11 -0400] "GET /shuttle/resources/orbiters/orbiters-logo.gif HTTP/1.0" 200 1932 +198.155.12.92 - - [28/Jul/1995:13:31:12 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +198.155.12.92 - - [28/Jul/1995:13:31:12 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 200 1173 +193.81.242.40 - - [28/Jul/1995:13:31:13 -0400] "GET /shuttle/technology/sts-newsref/sts_coord.html HTTP/1.0" 200 136804 +198.155.12.92 - - [28/Jul/1995:13:31:17 -0400] "GET /shuttle/missions/sts-73/sts-73-patch-small.gif HTTP/1.0" 200 4179 +193.81.242.40 - - [28/Jul/1995:13:31:18 -0400] "GET /shuttle/technology/images/crew_compartment_13-small.gif HTTP/1.0" 200 79088 +182.200.120.1 - - [28/Jul/1995:13:31:19 -0400] "GET /history/apollo/apollo-13/apollo-13.html HTTP/1.0" 200 18556 +182.200.120.1 - - [28/Jul/1995:13:31:20 -0400] "GET /history/apollo/apollo-13/apollo-13-patch-small.gif HTTP/1.0" 200 12859 +182.200.120.1 - - [28/Jul/1995:13:31:21 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +182.200.120.1 - - [28/Jul/1995:13:31:21 -0400] "GET /history/apollo/images/footprint-logo.gif HTTP/1.0" 200 4209 +128.159.77.122 - - [28/Jul/1995:13:31:22 -0400] "GET /facilities/mlp.html HTTP/1.0" 200 2653 +128.159.77.122 - - [28/Jul/1995:13:31:23 -0400] "GET /images/mlp-logo.gif HTTP/1.0" 200 28426 +194.166.2.31 - - [28/Jul/1995:13:31:23 -0400] "GET /shuttle/missions/sts-71/images/KSC-95EC-0876.gif HTTP/1.0" 200 51398 +128.158.57.20 - - [28/Jul/1995:13:31:24 -0400] "GET /htbin/cdt_main.pl HTTP/1.0" 200 3674 +210.166.12.00 - - [28/Jul/1995:13:31:24 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +128.159.144.47 - - [28/Jul/1995:13:31:25 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +128.159.144.47 - - [28/Jul/1995:13:31:26 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +128.159.144.47 - - [28/Jul/1995:13:31:27 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +180.176.12.00 - - [28/Jul/1995:13:31:27 -0400] "GET /shuttle/countdown/countdown.html HTTP/1.0" 200 4324 +128.159.144.47 - - [28/Jul/1995:13:31:27 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +128.159.144.47 - - [28/Jul/1995:13:31:28 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +128.159.144.47 - - [28/Jul/1995:13:31:28 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +180.176.12.00 - - [28/Jul/1995:13:31:29 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +182.200.120.1 - - [28/Jul/1995:13:31:29 -0400] "GET /history/apollo/apollo-13/apollo-13.html HTTP/1.0" 200 18556 +222.218.120.1 - - [28/Jul/1995:13:31:31 -0400] "GET /shuttle/technology/sts-newsref/stsover-prep.html HTTP/1.0" 200 142213 +170.166.12.00 - - [28/Jul/1995:13:31:33 -0400] "GET /software/winvn/winvn.html HTTP/1.0" 200 9866 +180.176.12.00 - - [28/Jul/1995:13:31:33 -0400] "GET /shuttle/countdown/count70.gif HTTP/1.0" 200 46573 +180.176.12.00 - - [28/Jul/1995:13:31:34 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +128.159.77.122 - - [28/Jul/1995:13:31:36 -0400] "GET /facilities/osb.html HTTP/1.0" 200 636 +128.159.77.122 - - [28/Jul/1995:13:31:36 -0400] "GET /images/construct.gif HTTP/1.0" 200 1414 +170.166.12.00 - - [28/Jul/1995:13:31:37 -0400] "GET /software/winvn/winvn.gif HTTP/1.0" 200 25218 +170.166.12.00 - - [28/Jul/1995:13:31:37 -0400] "GET /images/construct.gif HTTP/1.0" 200 1414 +198.155.12.13 - - [28/Jul/1995:13:31:41 -0400] "GET /history/apollo/apollo-8/apollo-8.html HTTP/1.0" 200 3625 +198.155.12.13 - - [28/Jul/1995:13:31:43 -0400] "GET /history/apollo/apollo-8/apollo-8-patch-small.gif HTTP/1.0" 200 11326 +193.81.242.40 - - [28/Jul/1995:13:31:43 -0400] "GET /shuttle/technology/images/aft_fuselage_2-small.gif HTTP/1.0" 200 45632 +198.155.12.92 - - [28/Jul/1995:13:31:44 -0400] "GET /shuttle/missions/sts-69/mission-sts-69.html HTTP/1.0" 200 10136 +210.166.12.00 - - [28/Jul/1995:13:31:46 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +222.218.120.1 - - [28/Jul/1995:13:31:46 -0400] "GET /software/winvn/winvn.html HTTP/1.0" 200 9866 +222.218.120.1 - - [28/Jul/1995:13:31:46 -0400] "GET /software/winvn/winvn.gif HTTP/1.0" 200 25218 +222.218.120.1 - - [28/Jul/1995:13:31:46 -0400] "GET /images/construct.gif HTTP/1.0" 200 1414 +170.166.12.00 - - [28/Jul/1995:13:31:47 -0400] "GET /software/winvn/bluemarb.gif HTTP/1.0" 200 4441 +180.176.12.00 - - [28/Jul/1995:13:31:47 -0400] "GET /history/apollo/apollo.html HTTP/1.0" 200 3260 +222.218.120.1 - - [28/Jul/1995:13:31:47 -0400] "GET /software/winvn/bluemarb.gif HTTP/1.0" 200 4441 +222.218.120.1 - - [28/Jul/1995:13:31:49 -0400] "GET /software/winvn/wvsmall.gif HTTP/1.0" 200 13372 +163.205.46.54 - - [28/Jul/1995:13:31:49 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +222.218.120.1 - - [28/Jul/1995:13:31:49 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +222.218.120.1 - - [28/Jul/1995:13:31:49 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +163.205.46.54 - - [28/Jul/1995:13:31:49 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +222.218.120.1 - - [28/Jul/1995:13:31:49 -0400] "GET /history/history.html HTTP/1.0" 200 1602 +163.205.46.54 - - [28/Jul/1995:13:31:50 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +222.218.120.1 - - [28/Jul/1995:13:31:50 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +222.218.120.1 - - [28/Jul/1995:13:31:50 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +163.205.46.54 - - [28/Jul/1995:13:31:50 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +180.176.12.00 - - [28/Jul/1995:13:31:50 -0400] "GET /history/apollo/images/footprint-small.gif HTTP/1.0" 200 18149 +163.205.46.54 - - [28/Jul/1995:13:31:51 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +222.218.120.1 - - [28/Jul/1995:13:31:51 -0400] "GET /history/apollo/images/apollo-small.gif HTTP/1.0" 200 9630 +163.205.46.54 - - [28/Jul/1995:13:31:51 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +222.218.120.1 - - [28/Jul/1995:13:31:52 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +222.218.120.1 - - [28/Jul/1995:13:31:52 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +180.176.12.00 - - [28/Jul/1995:13:31:53 -0400] "GET /history/apollo/images/apollo-logo1.gif HTTP/1.0" 304 0 +180.176.12.00 - - [28/Jul/1995:13:31:53 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 304 0 +218.166.12.92 - - [28/Jul/1995:13:31:54 -0400] "GET /images/shuttle-patch-small.gif HTTP/1.0" 200 4179 +163.205.56.149 - - [28/Jul/1995:13:31:55 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +182.200.120.1 - - [28/Jul/1995:13:31:55 -0400] "GET /history/apollo/apollo-13/apollo-13-patch-small.gif HTTP/1.0" 200 12859 +218.166.12.92 - - [28/Jul/1995:13:31:57 -0400] "GET /shuttle/technology/sts-newsref/stsref-toc.html HTTP/1.0" 200 84905 +128.159.122.45 - - [28/Jul/1995:13:31:57 -0400] "GET /ksc.html HTTP/1.0" 200 7280 +128.159.122.45 - - [28/Jul/1995:13:31:58 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +170.166.12.00 - - [28/Jul/1995:13:31:59 -0400] "GET /software/winvn/wvsmall.gif HTTP/1.0" 200 13372 +128.159.122.45 - - [28/Jul/1995:13:31:59 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +128.159.122.45 - - [28/Jul/1995:13:32:00 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +128.159.122.45 - - [28/Jul/1995:13:32:00 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +128.159.122.45 - - [28/Jul/1995:13:32:00 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +182.200.120.1 - - [28/Jul/1995:13:32:01 -0400] "GET /images/p263_100.jpg HTTP/1.0" 200 49152 +170.166.12.00 - - [28/Jul/1995:13:32:03 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +180.176.12.00 - - [28/Jul/1995:13:32:04 -0400] "GET /history/apollo/apollo-spacecraft.txt HTTP/1.0" 200 2261 +218.166.12.92 - - [28/Jul/1995:13:32:04 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +218.166.12.92 - - [28/Jul/1995:13:32:04 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +180.166.12.00 - - [28/Jul/1995:13:32:06 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +210.166.12.00 - - [28/Jul/1995:13:32:06 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 +128.159.77.122 - - [28/Jul/1995:13:32:11 -0400] "GET /facilities/lf.html HTTP/1.0" 200 1214 +128.159.77.122 - - [28/Jul/1995:13:32:11 -0400] "GET /images/lf-logo.gif HTTP/1.0" 404 - +192.138.199.30 - - [28/Jul/1995:13:32:11 -0400] "GET /elv/uplink2.htm HTTP/1.0" 200 2031 +139.169.210.47 - - [28/Jul/1995:13:32:11 -0400] "GET /shuttle/technology/images/srb_mod_compare_1-small.gif HTTP/1.0" 200 36902 +163.205.53.14 - - [28/Jul/1995:13:32:12 -0400] "GET /images/shuttle-patch-small.gif HTTP/1.0" 200 4179 +182.198.120.1 - - [28/Jul/1995:13:32:12 -0400] "GET /images/launch.gif HTTP/1.0" 200 240458 +180.176.12.00 - - [28/Jul/1995:13:32:13 -0400] "GET /history/apollo/images/footprint-small.gif HTTP/1.0" 200 18149 +180.166.12.00 - - [28/Jul/1995:13:32:14 -0400] "GET /shuttle/countdown/liftoff.html HTTP/1.0" 200 5220 +170.166.12.00 - - [28/Jul/1995:13:32:16 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +163.205.53.14 - - [28/Jul/1995:13:32:16 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +163.205.53.14 - - [28/Jul/1995:13:32:16 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1713 +218.166.12.92 - - [28/Jul/1995:13:32:17 -0400] "GET /shuttle/technology/sts-newsref/sts_egress.html HTTP/1.0" 200 86379 +139.169.210.47 - - [28/Jul/1995:13:32:18 -0400] "GET /shuttle/technology/images/srb_mod_compare_3-small.gif HTTP/1.0" 200 55666 +198.155.12.92 - - [28/Jul/1995:13:32:18 -0400] "GET /shuttle/missions/sts-74/mission-sts-74.html HTTP/1.0" 200 3790 +199.0.2.27 - - [28/Jul/1995:13:32:19 -0400] "GET / HTTP/1.0" 200 7280 +198.155.12.13 - - [28/Jul/1995:13:32:19 -0400] "GET /facts/faq.html HTTP/1.0" 200 18290 +182.200.120.1 - - [28/Jul/1995:13:32:20 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +199.0.2.27 - - [28/Jul/1995:13:32:20 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 +199.0.2.27 - - [28/Jul/1995:13:32:20 -0400] "GET /images/MOSAIC-logosmall.gif HTTP/1.0" 200 363 +199.0.2.27 - - [28/Jul/1995:13:32:20 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +199.0.2.27 - - [28/Jul/1995:13:32:21 -0400] "GET /images/WORLD-logosmall.gif HTTP/1.0" 200 669 +198.155.12.13 - - [28/Jul/1995:13:32:21 -0400] "GET /images/faq.gif HTTP/1.0" 200 263 +198.155.12.13 - - [28/Jul/1995:13:32:21 -0400] "GET /images/ksclogosmall.gif HTTP/1.0" 200 3635 +170.166.12.00 - - [28/Jul/1995:13:32:22 -0400] "GET /images/USA-logosmall.gif HTTP/1.0" 200 234 +163.205.53.14 - - [28/Jul/1995:13:32:22 -0400] "GET /shuttle/technology/images/srb_mod_compare_1-small.gif HTTP/1.0" 200 36902 +218.166.12.92 - - [28/Jul/1995:13:32:22 -0400] "GET /images/shuttle-patch-logo.gif HTTP/1.0" 200 891 +163.205.53.14 - - [28/Jul/1995:13:32:22 -0400] "GET /shuttle/technology/images/srb_mod_compare_3-small.gif HTTP/1.0" 200 55666 +163.205.53.14 - - [28/Jul/1995:13:32:22 -0400] "GET /shuttle/technology/images/srb_mod_compare_6-small.gif HTTP/1.0" 200 28219 +163.205.53.14 - - [28/Jul/1995:13:32:23 -0400] "GET /images/KSC-logosmall.gif HTTP/1.0" 200 1204 +198.155.12.13 - - [28/Jul/1995:13:32:23 -0400] "GET /shuttle/missions/missions.html HTTP/1.0" 200 8677 +199.0.2.27 - - [28/Jul/1995:13:32:23 -0400] "GET /images/ksclogo-medium.gif HTTP/1.0" 200 5866 +198.155.12.92 - - [28/Jul/1995:13:32:25 -0400] "GET /shuttle/missions/sts-74/sts-74-patch-small.gif HTTP/1.0" 200 5494 +198.155.12.92 - - [28/Jul/1995:13:33:00 -0400] "GET /shuttle/missions/sts-74/sts-74-patch-small.gif HTTP/1.0" 200 5494 diff --git a/main.go b/main.go new file mode 100644 index 0000000..ac9f1db --- /dev/null +++ b/main.go @@ -0,0 +1,52 @@ +package main + +import ( + "fmt" + "os" + "os/signal" + + "github.com/satyrius/gonx" +) + +const ( + // https://en.wikipedia.org/wiki/Common_Log_Format + // 127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 + parserFormat = "$remote_addr $user_identifier $remote_user [$time_local] \"$request\" $status $bytes_sent" +) + +var ( + cfg *Config +) + +func main() { + cfg = NewConfig() + + s := NewSession(cfg.AlertThreshold, cfg.PollInt, gonx.NewParser(parserFormat)) + err := s.SetLog(cfg.File) + if err != nil { + panic(err) + } + defer s.Close() + + doneChan := make(chan struct{}) + msgChan := make(chan msg) + + go Monitor(cfg, s, doneChan, msgChan) + + go Ctrl(doneChan) + + go Printer(cfg, doneChan, msgChan) + + <-doneChan + + fmt.Print("\nMonitor stopped.\n") +} + +// Ctrl handles monitor shutdown actions. +func Ctrl(doneChan chan<- struct{}) { + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, os.Interrupt, os.Kill) + for range sigChan { + doneChan <- struct{}{} + } +} diff --git a/monitor.go b/monitor.go new file mode 100644 index 0000000..7e5f6f0 --- /dev/null +++ b/monitor.go @@ -0,0 +1,98 @@ +package main + +import ( + "bufio" + "time" +) + +// Monitor is a monitoring routine that tracks changes to a log file, +// calculates metrics based on accumulated data +// and issues messages based on changes to a log file and/or metrics. +func Monitor(cfg *Config, s *Session, doneChan chan struct{}, msgChan chan<- msg) { + + f := NewFrame(cfg.MTF, cfg.PollInt) + r := bufio.NewReader(s.File) + + stat, err := s.File.Stat() + if err != nil { + panic(err) + } + + prevSize := stat.Size() // starting file read position + + // Move reader's needle to the position where we stopped reading last time or to the initial position. + if _, err := s.File.Seek(prevSize, 0); err != nil { + panic(err) + } + + // Start tickers + tickerPolling := time.NewTicker(time.Second * time.Duration(cfg.PollInt)) + tickerReporting := time.NewTicker(time.Second * time.Duration(cfg.ReportInt)) + + polls := 0 + +monitorLoop: + for { + select { + + // Main completion handler. + case <-doneChan: + tickerPolling.Stop() + tickerReporting.Stop() + break monitorLoop + + // Poll ticker. + case t := <-tickerPolling.C: + { + polls++ + + // Capture point data. + p := NewPoint(s.File, r, prevSize) + err := p.GetChange() + if err != nil { + msgChan <- msgErr(err) + } + + // Register current level of traffic, i.e. + // quantity of log entries since last poll. + f.Rec(p.linesQty) + + // Pass entries to the session storage. + err = s.ConsumeLines(p.lines) + if err != nil { + msgChan <- msgErr(err) + } + + // Print out current point data. + if cfg.SendTicks { + msgChan <- msgPoint(f.AvgTraffic, s.AlertThreshold) + } + + // Monitor alert threshold. + if cfg.SendAlerts { + if s.ShouldEscalate(f.AvgTraffic) { + msgChan <- msgAlertEsc(f.AvgTraffic, t) + } + + if s.ShouldDeescalate(f.AvgTraffic) { + msgChan <- msgAlertDeesc(f.AvgTraffic, t) + } + } + + if polls == cfg.MaxPolls { + doneChan <- struct{}{} + } + } + + // Reporting ticker. + case t := <-tickerReporting.C: + { + if cfg.SendReports { + // Get data accumulated during report interval and clean report buffer. + msgChan <- msgReport(s.FlushReport(cfg, &t)) + } + } + } + + } +} diff --git a/monitor_test.go b/monitor_test.go new file mode 100644 index 0000000..d4ec8bd --- /dev/null +++ b/monitor_test.go @@ -0,0 +1,209 @@ +package main + +import ( + "os" + "strings" + "testing" + "time" + + "github.com/satyrius/gonx" +) + +// Test logic for alert escalation case: +// +// 1. Initial state is OK (default). +// 2. Run for the MTF duration. In this test: 2 seconds. +// 3. Imitate incoming traffic adding several lines to the temporary log file once per second. +// 4. To trigger an alert, we set alert threshold level to 2 hits/s and add 2 entries per second. +// +// 5. Expected result: +// - by the end of MTF avg. traffic will be 2 hits/sec, +// - monitor will register that traffic reached a threshold level, +// - monitor will set an alert state, +// - alert escalation message will be sent to msgChan. +func TestMonitor_AlertEscalation(t *testing.T) { + var err error + tempLogFile := getTempLoc(".TestMonitor_AlertEscalation.log") + alertThreshold := 2 + pollInt := 1 + + cfg := &Config{ + AlertThreshold: alertThreshold, + File: tempLogFile, + MTF: 2, + MaxPolls: 2, // As poll interval 1 sec, thus we limit test to 3 sec length. + TopN: 3, + PollInt: pollInt, // Poll once per second. + ReportInt: 2, // Irrelevant, as reports are off for this test. + SendAlerts: true, + SendReports: false, + SendTicks: false, + } + + s := NewSession(alertThreshold, pollInt, gonx.NewParser(parserFormat)) + + // Ensure test log file is in place. + f, err := os.Create(tempLogFile) + if err != nil { + t.Fatalf("\n\nCannot open test file: %s\n", err.Error()) + } + defer f.Close() + + err = s.SetLog(cfg.File) + if err != nil { + // Suppress error as a test log file can be absent + } + // Also, not deferring a Close method, as the file will be created later. + + doneChan := make(chan struct{}) + msgChan := make(chan msg) + + go Monitor(cfg, s, doneChan, msgChan) + + // Handler for monitor closing. + go Ctrl(doneChan) + + expected := 1 + actual := 0 + + logUpdateTicker := time.NewTicker(time.Second * 1) + + // str mimics one-time entry of 2 log lines + // In this case, with 1 poll per second, this equals to a traffic of 2 hits/s, while threshold is 2 hits/s. + // To trigger an alert, number of lines should be equal or higher than the "AlertThreshold" value. + str := ` + 210.166.12.00 - - [28/Jul/1995:13:17:36 -0400] "GET /htbin/cdt_clock.pl HTTP/1.0" 200 503 + 198.155.12.16 - - [28/Jul/1995:13:17:09 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 400 786 + ` + + // Intercept message channel. + // Instead of a printer we receive messages here to assert results based on message type. +selectLoop: + for { + select { + case <-logUpdateTicker.C: + { + if _, err = f.WriteString(str); err != nil { + t.Fatalf("\n\nCannot writing to test log: %s\n\n", err.Error()) + } + } + + case msg := <-msgChan: + if msg.msgType == msgTypeAlertEsc { + actual++ + } + + case <-doneChan: + break selectLoop + } + } + + if actual != 1 { + t.Errorf("Expected %d message, got %d", expected, actual) + } + + if !s.IsAlert() { + t.Errorf("Expected %d state, got %d", stateAlert, s.State) + } + + // Cleanup + err = os.Remove(tempLogFile) + if err != nil { + t.Errorf("Could not delete temp file: %s", err.Error()) + } +} + +// Test logic for alert deescalation: +// +// 1. Set initial state to Alert. +// 2. Run for the MTF duration. In this test: 2 seconds. +// 3. Do no additions to the log file imitating no traffic to the system. +// +// 4. Expected result: +// - by the end of MTF avg. traffic will be 0 hits/sec, +// - monitor will register that traffic dropped below a threshold level, +// - monitor will set an OK state, +// - alert deescalation message will be sent to msgChan. +func TestMonitor_AlertDeescalation(t *testing.T) { + var err error + tempLogFile := getTempLoc(".TestMonitor_AlertDeescalation.log") + alertThreshold := 2 + pollInt := 1 + + cfg := &Config{ + AlertThreshold: alertThreshold, + File: tempLogFile, + MTF: 2, + MaxPolls: 2, // As poll interval 1 sec, thus we limit test to 3 sec length. + TopN: 3, + PollInt: pollInt, // Poll once per second. + ReportInt: 2, // Irrelevant, as reports are off for this test. + SendAlerts: true, + SendReports: false, + SendTicks: false, + } + + s := NewSession(alertThreshold, pollInt, gonx.NewParser(parserFormat)) + s.SetAlert() + + // Ensure test log file is in place. + f, err := os.Create(tempLogFile) + if err != nil { + t.Fatalf("\n\nCannot open test file: %s\n", err.Error()) + } + defer f.Close() + + err = s.SetLog(cfg.File) + if err != nil { + // Suppress error as a test log file can be absent + } + // Also, not deferring a Close method, as the file will be created later. + + doneChan := make(chan struct{}) + msgChan := make(chan msg) + + go Monitor(cfg, s, doneChan, msgChan) + + // Handler for monitor closing. + go Ctrl(doneChan) + + expected := 1 + actual := 0 + + // Intercept message channel. +selectLoop: + for { + select { + + case msg := <-msgChan: + if msg.msgType == msgTypeAlertDeesc { + actual++ + } + + case <-doneChan: + break selectLoop + } + } + + if actual != 1 { + t.Errorf("Expected %d message, got %d", expected, actual) + } + + if s.IsAlert() { + t.Errorf("Expected %d state, got %d", stateOK, s.State) + } + + // Cleanup + err = os.Remove(tempLogFile) + if err != nil { + t.Errorf("Could not delete temp file: %s", err.Error()) + } +} + +// getTempLoc prepares full temporary file location. +// One of the purposes - workaround between differences of MacOS temp folder ending with a slash, +// and Debian TMPDIR env var being empty and thus os.TempDir() was creating a temp dir +// without an ending slash. +func getTempLoc(filename string) string { + return strings.TrimRight(os.TempDir(), "/") + "/" + filename +} diff --git a/msg.go b/msg.go new file mode 100644 index 0000000..bfd1b41 --- /dev/null +++ b/msg.go @@ -0,0 +1,62 @@ +package main + +import "time" + +type msg struct { + msgType string + body string + report *Report + time time.Time + traffic int + threshold int +} + +const ( + // Message types. + + msgTypeAlertEsc = "alertEsc" + msgTypeAlertDeesc = "alertDeesc" + msgTypeError = "err" + msgTypePoint = "point" + msgTypeReport = "report" +) + +// Message objects. + +func msgAlertEsc(tr int, t time.Time) msg { + return msg{ + msgType: msgTypeAlertEsc, + traffic: tr, + time: t, + } +} + +func msgAlertDeesc(tr int, t time.Time) msg { + return msg{ + msgType: msgTypeAlertDeesc, + traffic: tr, + time: t, + } +} + +func msgErr(err error) msg { + return msg{ + msgType: msgTypeError, + body: err.Error(), + } +} + +func msgPoint(tr, th int) msg { + return msg{ + msgType: msgTypePoint, + threshold: th, + traffic: tr, + } +} + +func msgReport(r *Report) msg { + return msg{ + msgType: msgTypeReport, + report: r, + } +} diff --git a/point.go b/point.go new file mode 100644 index 0000000..11279d0 --- /dev/null +++ b/point.go @@ -0,0 +1,86 @@ +package main + +import ( + "bufio" + "fmt" + "io" + "os" + "strings" +) + +// Point represents data accumulated during last log check. +type Point struct { + prevSize int64 + size int64 + diff int64 + lines []string + linesQty int + reader *bufio.Reader + file *os.File +} + +// NewPoint returns a new Point object. +func NewPoint(f *os.File, r *bufio.Reader, prevSize int64) *Point { + return &Point{ + file: f, + prevSize: prevSize, + reader: r, + } +} + +// GetChange checks log file for size changes and reads added data into log entry strings. +func (p *Point) GetChange() error { + + stat, err := p.file.Stat() + if err != nil { + return err + } + + p.size = stat.Size() + p.diff = p.size - p.prevSize + + // If truncated, adjust for a new size and continue from beginning. + if p.diff > 0 { + p.lines, err = readIncrement(p.reader) + if err != nil { + return fmt.Errorf(" Error reading log chunk: %s ", err.Error()) + } + + p.linesQty = len(p.lines) + } + + p.prevSize = p.size + + return nil +} + +// readIncrement reads a log file from a start position to EOF +// returning result as a slice of (string) log entries. +func readIncrement(r *bufio.Reader) ([]string, error) { + + var data []byte + var err error + var out []string + + for { + data, err = r.ReadBytes('\n') + + if err == nil || err == io.EOF { + line := strings.TrimSpace(string(data)) + if line != "" { + out = append(out, line) + } + } + + if err != nil { + if err != io.EOF { + return out, err + } + + // EOF + break + } + } + + return out, nil +} diff --git a/printer.go b/printer.go new file mode 100644 index 0000000..75afea0 --- /dev/null +++ b/printer.go @@ -0,0 +1,205 @@ +package main + +import ( + "fmt" + "math" + "strconv" + "strings" + "time" + + ct "github.com/daviddengcn/go-colortext" +) + +var ( + reportTimeFormat = time.RFC3339 +) + +// Printer is a handler for stdout outputs. +func Printer(cfg *Config, doneChan <-chan struct{}, msgChan <-chan msg) { + +printerLoop: + for { + select { + case <-doneChan: + break printerLoop + + case m := <-msgChan: + switch m.msgType { + case msgTypeError: + printErr(m.body) + case msgTypeAlertEsc: + printAlertEsc(m.traffic, m.time) + case msgTypeAlertDeesc: + printAlertDeesc(m.traffic, m.time) + case msgTypePoint: + printPoint(m.traffic, m.threshold) + case msgTypeReport: + printReport(cfg, m.report) + } + } + } + +} + +// printAlertEsc prints alert escalation message. +func printAlertEsc(tr int, t time.Time) { + printBigMsg("\u00B7 High traffic generated an alert - hits = %d, triggered at %s", tr, t, ct.Red) + +} + +// printAlertDeesc prints alert de-escalation message. +func printAlertDeesc(tr int, t time.Time) { + printBigMsg("\u00B7 High traffic alert recovered. Current hits = %d. At %s", tr, t, ct.Green) +} + +// printReport prints out a report block. +func printReport(cfg *Config, r *Report) { + if len(r.TopSectionHits) == 0 && len(r.StatusCodes) == 0 && r.TotalHits == 0 { + fmt.Print("REPORT: no changes\n\n") + } else { + fmt.Print("\n\n") + printHR() + + fmt.Printf("REPORT: %s\n\n", r.Time.Format(reportTimeFormat)) + + printSections(cfg.TopN, r.TopSectionHits) + + printSummary(cfg, r) + + fmt.Print("\n\n") + } +} + +// printPoint prints out a point data. +func printPoint(traffic, threshold int) { + fmt.Print(" \u00B7 hits avg: ") + if traffic >= threshold { + printRed("%6d", traffic) + } else { + fmt.Printf("%6d", traffic) + } + fmt.Printf(" / %2d\n", threshold) +} + +func printErr(s string, a ...interface{}) { + fmt.Print("\n") + labelYellow(s, a...) + fmt.Print("\n") +} + +// printHR prints a horizontal ruler to stdout. +func printHR() { + ct.ChangeColor(ct.White, false, ct.Black, false) + fmt.Print(strings.Repeat("-", 80)) + ct.ResetColor() + fmt.Print("\n") +} + +// Labels (fg & bg). + +// labelRed - white fg, red bg. +func labelRed(s string, a ...interface{}) { + ct.ChangeColor(ct.White, true, ct.Red, true) + fmt.Printf(s, a...) + ct.ResetColor() +} + +// labelYellow - black fg, yellow bg. +func labelYellow(s string, a ...interface{}) { + ct.ChangeColor(ct.Black, false, ct.Yellow, false) + fmt.Printf(s, a...) + ct.ResetColor() +} + +// Foreground text coloring only. + +// printRed - red fg. +func printRed(s string, a ...interface{}) { + ct.ChangeColor(ct.Red, true, ct.Black, false) + fmt.Printf(s, a...) + ct.ResetColor() +} + +// printSections prints out a top sections block of a report. +func printSections(n uint, s map[int]Pair) { + if len(s) == 0 { + fmt.Printf("Top %d sections: no entries\n", n) + } else { + fmt.Printf("Top %d sections\n", n) + fmt.Print("| sections | count") + fmt.Print("\n") + printHR() + for i := 0; i < len(s); i++ { + fmt.Print("| " + rightPad2Len(s[i].Key, " ", 63)) + fmt.Print("| " + rightPad2Len(strconv.Itoa(s[i].Value), " ", 10)) + fmt.Print("\n") + } + } + fmt.Print("\n") +} + +// printSummary prints out a summary part of a report. +func printSummary(cfg *Config, r *Report) { + + fmt.Print("Summary:\n") + fmt.Print("| hits total | hits/s | 2xx | 3xx | 4xx | 5xx ") + fmt.Print("\n") + printHR() + fmt.Print("| " + rightPad2Len(strconv.Itoa(r.TotalHits), " ", 11)) + + // total hits / seconds for this interval + hits := int(math.Ceil(float64(r.TotalHits / cfg.ReportInt))) + fmt.Print("| " + rightPad2Len(strconv.Itoa(hits), " ", 11)) + + fmt.Print("| " + rightPad2Len(strconv.Itoa(r.StatusCodes[2]), " ", 11)) + fmt.Print("| " + rightPad2Len(strconv.Itoa(r.StatusCodes[3]), " ", 11)) + + if r.StatusCodes[4] > 0 { + fmt.Print("| ") + labelYellow("%s", rightPad2Len(strconv.Itoa(r.StatusCodes[4]), " ", 11)) + } else { + fmt.Print("| 0 ") + } + + if r.StatusCodes[5] > 0 { + fmt.Print("| ") + labelRed("%s", rightPad2Len(strconv.Itoa(r.StatusCodes[5]), " ", 11)) + } else { + fmt.Print("| 0 ") + } + + fmt.Print("\n") +} + +func rightPad2Len(s string, padStr string, overallLen int) string { + var padCountInt int + padCountInt = 1 + ((overallLen - len(padStr)) / len(padStr)) + var retStr = s + strings.Repeat(padStr, padCountInt) + return retStr[:overallLen] +} + +func printBigMsg(s string, tr int, t time.Time, bg ct.Color) { + fmt.Print("\n") + + ct.ChangeColor(ct.White, true, bg, true) + fmt.Printf("%87s", " ") + ct.ResetColor() + + fmt.Print("\n") + + str := fmt.Sprintf(s, tr, t.Format(time.RFC3339)) + size := len(str) + remaining := strconv.Itoa(86 - size) + + ct.ChangeColor(ct.White, true, bg, true) + fmt.Printf(` %s %`+remaining+`s`, str, " ") + ct.ResetColor() + + fmt.Print("\n") + + ct.ChangeColor(ct.White, true, bg, true) + fmt.Printf("%87s", " ") + ct.ResetColor() + + fmt.Print("\n\n") +} diff --git a/session.go b/session.go new file mode 100644 index 0000000..165f1bd --- /dev/null +++ b/session.go @@ -0,0 +1,214 @@ +package main + +import ( + "errors" + "fmt" + "os" + "strconv" + "time" + + "github.com/satyrius/gonx" +) + +// Session represents a monitoring session and handles all accumulated data. +type Session struct { + AlertThreshold int + Entries []*Entry + File *os.File + Parser *gonx.Parser + PollInt int + Report *Report + State uint8 +} + +// Report accumulates data for reports. +type Report struct { + StatusCodes map[uint8]int // 4 status code groups: 2xx, 3xx, 4xx, 5xx + Time *time.Time + TopSectionHits map[int]Pair + TotalHits int +} + +// NewSession returns a new Session object. +func NewSession(threshold, pollInt int, p *gonx.Parser) *Session { + return &Session{ + AlertThreshold: threshold, + Parser: p, + PollInt: pollInt, + Report: NewReport(nil), + State: stateOK, + } +} + +// SetLog adds file to the session. +func (s *Session) SetLog(f string) error { + var err error + if f == "" { + return errors.New("No file provided") + } + s.File, err = os.Open(f) + if err != nil { + return err + } + + return nil +} + +// Close closes log file opened for this session. +func (s *Session) Close() { + if s.File != nil { + s.File.Close() + } +} + +// NewReport represents traffic summary for a user-defined report period. +func NewReport(t *time.Time) *Report { + return &Report{ + StatusCodes: map[uint8]int{ + 5: 0, + 4: 0, + 3: 0, + 2: 0, + }, + Time: t, + TopSectionHits: make(map[int]Pair), + } +} + +// ConsumeLines receives log entries accumulated since last poll, +// converts them into Entry objects and adds to the session buffer. +func (s *Session) ConsumeLines(l []string) error { + for _, line := range l { + + err := s.AddLine(line) + if err != nil { + return fmt.Errorf(" Error adding log entry %s \n Err: %s ", line, err.Error()) + } + } + + return nil +} + +// AddLine adds a log entry as an Entry object to the session buffer. +func (s *Session) AddLine(line string) error { + + r := NewEntry(s.Parser) + err := r.ParseLine(line) + if err != nil { + return err + } + + s.Entries = append(s.Entries, r) + s.Report.TotalHits++ + + return nil +} + +// FlushReport returns interval report and resets accumulated stats. +func (s *Session) FlushReport(cfg *Config, t *time.Time) *Report { + + s.GetSectionHits(cfg.TopN) // sets i.Summary.TopSectionHits + + s.GetStatusCodes() // sets i.Summary.StatusCodes + + out := NewReport(t) + + out.TotalHits = s.Report.TotalHits + + for k, v := range s.Report.StatusCodes { + out.StatusCodes[k] = v + } + + for k, v := range s.Report.TopSectionHits { + out.TopSectionHits[k] = v + } + + s.reset() + + return out +} + +// reset nullifies traffic data accumulated since last report. +func (s *Session) reset() { + s.Report = NewReport(nil) + s.Entries = []*Entry{} +} + +// GetStatusCodes calculates status code summary. +func (s *Session) GetStatusCodes() { + + for _, e := range s.Entries { + i, err := strconv.Atoi(e.StatusCode[0:1]) + if err != nil { + // todo: add error-logging + continue + } + codeGroup := uint8(i) + _, ok := s.Report.StatusCodes[codeGroup] + if !ok { + s.Report.StatusCodes[codeGroup] = 1 + } else { + s.Report.StatusCodes[codeGroup]++ + } + } +} + +// GetSectionHits calculates top n section hits during the interval poll time. +func (s *Session) GetSectionHits(n uint) { + + sectionHits := make(map[string]int, len(s.Entries)) + + // Get hits by section. + for _, e := range s.Entries { + + _, ok := sectionHits[e.Section] + if !ok { + sectionHits[e.Section] = 1 + } else { + sectionHits[e.Section]++ + } + } + + // Sort. + sorted := RankByHits(sectionHits) + + // Limit to top n. + s.Report.TopSectionHits = CutTopN(sorted, n) +} + +// ShouldEscalate returns escalation action code. +func (s *Session) ShouldEscalate(traffic int) bool { + + if !s.IsAlert() && traffic >= s.AlertThreshold { + s.SetAlert() + return true + } + + return false +} + +// ShouldDeescalate returns escalation action code. +func (s *Session) ShouldDeescalate(traffic int) bool { + + if s.IsAlert() && traffic < s.AlertThreshold { + s.SetOK() + return true + } + + return false +} + +// IsAlert checks for alert state. +func (s *Session) IsAlert() bool { + return s.State == stateAlert +} + +// SetAlert sets current sta te to Alert. +func (s *Session) SetAlert() { + s.State = stateAlert +} + +// SetOK sets current sta te to OK. +func (s *Session) SetOK() { + s.State = stateOK +} diff --git a/session_test.go b/session_test.go new file mode 100644 index 0000000..aaf5893 --- /dev/null +++ b/session_test.go @@ -0,0 +1,202 @@ +package main + +import ( + "reflect" + "testing" + + "github.com/satyrius/gonx" +) + +func TestNewInterval(t *testing.T) { + + actual := NewSession(2, 2, nil) + expected := &Session{ + AlertThreshold: 2, + PollInt: 2, + Report: &Report{ + StatusCodes: map[uint8]int{ + 5: 0, + 4: 0, + 3: 0, + 2: 0, + }, + TopSectionHits: make(map[int]Pair), + }, + State: stateOK, + } + + if !reflect.DeepEqual(expected, actual) { + t.Error("Failed NewInterval test!") + t.Log("Expected:") + t.Logf("%+v\n", expected) + + t.Log("Actual:") + t.Logf("%+v\n", actual) + } +} + +func TestInterval_AddEntry(t *testing.T) { + + parser := gonx.NewParser(parserFormat) + s := NewSession(2, 2, parser) + + testString := `182.198.120.1 - - [28/Jul/1995:13:16:47 -0400] "GET /shuttle/technology/sts-newsref/srb.html HTTP/1.0" 200 49553` + + err := s.AddLine(testString) + if err != nil { + t.Fatalf("AddEntry should not fail. Error: %+v", err) + } + err = s.AddLine(testString) + if err != nil { + t.Fatalf("AddEntry should not fail. Error: %+v", err) + } + + expected := 2 + actual := len(s.Entries) + + if expected != actual { + t.Errorf("Should have %d entries, got %v", expected, actual) + } +} + +func TestInterval_GetSectionHits(t *testing.T) { + + parser := gonx.NewParser(parserFormat) + s := NewSession(2, 2, parser) + var err error + + // Section: /shuttle + // Hist: 2 + for n := 0; n < 2; n++ { + err = s.AddLine(`182.198.120.1 - - [28/Jul/1995:13:16:47 -0400] "GET /shuttle/technology/sts-newsref/srb.html HTTP/1.0" 200 49553`) + if err != nil { + t.Fatalf("AddEntry should not fail. Error: %+v", err) + } + } + + // Section: /images + // Hist: 3 + for n := 0; n < 3; n++ { + err = s.AddLine(`198.155.12.13 - - [28/Jul/1995:13:17:09 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786`) + if err != nil { + t.Fatalf("AddEntry should not fail. Error: %+v", err) + } + } + + // Section: /history + // Hist: 1 + err = s.AddLine(`165.13.14.55 - - [28/Jul/1995:13:17:00 -0400] "GET /history/apollo/apollo-17/apollo-17-info.html HTTP/1.0" 200 1457`) + if err != nil { + t.Fatalf("AddEntry should not fail. Error: %+v", err) + } + + expectedTopN := uint(3) + s.GetSectionHits(expectedTopN) + + expected := map[int]Pair{ + 0: {"/images", 3}, + 1: {"/shuttle", 2}, + 2: {"/history", 1}, + } + + actual := s.Report.TopSectionHits + actualTopN := uint(len(s.Report.TopSectionHits)) + + if expectedTopN != actualTopN { + t.Errorf("Expected Top N %d, got %d.", expectedTopN, actualTopN) + } + + if !reflect.DeepEqual(expected, actual) { + t.Error("Failed GetTopHits test!") + t.Log("Expected:") + t.Logf("%+v\n", expected) + + t.Log("Actual:") + t.Logf("%+v\n", actual) + } +} + +func TestInterval_GetStatusCodes(t *testing.T) { + + parser := gonx.NewParser(parserFormat) + s := NewSession(2, 2, parser) + var err error + + // Code: 200 + // Hits: 2 + for n := 0; n < 2; n++ { + err = s.AddLine(`182.198.120.1 - - [28/Jul/1995:13:16:47 -0400] "GET /shuttle/technology/sts-newsref/srb.html HTTP/1.0" 200 49553`) + if err != nil { + t.Fatalf("AddEntry should not fail. Error: %+v", err) + } + } + + // Code: 500 + // Hits: 3 + for n := 0; n < 3; n++ { + err = s.AddLine(`198.155.12.13 - - [28/Jul/1995:13:17:09 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 500 786`) + if err != nil { + t.Fatalf("AddEntry should not fail. Error: %+v", err) + } + } + + // Code: 401 + // Hits: 1 + err = s.AddLine(`165.13.14.55 - - [28/Jul/1995:13:17:00 -0400] "GET /history/apollo/apollo-17/apollo-17-info.html HTTP/1.0" 401 1457`) + if err != nil { + t.Fatalf("AddEntry should not fail. Error: %+v", err) + } + + expected := map[uint8]int{ + 5: 3, + 4: 1, + 3: 0, + 2: 2, + } + + s.GetStatusCodes() + actual := s.Report.StatusCodes + + if !reflect.DeepEqual(expected, actual) { + t.Error("Failed GetStatusCodes test!") + t.Log("Expected:") + t.Logf("%+v\n", expected) + + t.Log("Actual:") + t.Logf("%+v\n", actual) + } +} + +func TestSession_ShouldEscalate_True(t *testing.T) { + + threshold := 1 + s := NewSession(threshold, 2, nil) + s.SetOK() + + expected := true + + traffic := 2 + + actual := s.ShouldEscalate(traffic) // traffic = 2, threshold = 1 + + if actual != expected { + t.Errorf("UpdateState(%d, %d): expected %d, actual %d", traffic, threshold, expected, actual) + } +} + +func TestSession_ShouldEscalate_False(t *testing.T) { + + threshold := 3 + s := NewSession(threshold, 2, nil) + s.SetOK() + + expected := false + + traffic := 2 + + actual := s.ShouldEscalate(traffic) // traffic = 2, threshold = 1 + + if actual != expected { + t.Errorf("UpdateState(%d, %d): expected %t, actual %t", traffic, threshold, expected, actual) + } +} diff --git a/state.go b/state.go new file mode 100644 index 0000000..1308d5b --- /dev/null +++ b/state.go @@ -0,0 +1,9 @@ +package main + +const ( + // State severity levels. + + stateAlert uint8 = 2 + //StateWarning uint8 = 1 + stateOK uint8 = 0 +) diff --git a/vendor/github.com/daviddengcn/go-colortext/.gitignore b/vendor/github.com/daviddengcn/go-colortext/.gitignore new file mode 100644 index 0000000..0026861 --- /dev/null +++ b/vendor/github.com/daviddengcn/go-colortext/.gitignore @@ -0,0 +1,22 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe diff --git a/vendor/github.com/daviddengcn/go-colortext/LICENSE b/vendor/github.com/daviddengcn/go-colortext/LICENSE new file mode 100644 index 0000000..62ca9ee --- /dev/null +++ b/vendor/github.com/daviddengcn/go-colortext/LICENSE @@ -0,0 +1,54 @@ +BSD License +=========== + +Copyright (c) 2016, David Deng +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of go-colortext nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +MIT License +=========== + +Copyright (c) 2016 David Deng + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/daviddengcn/go-colortext/README.md b/vendor/github.com/daviddengcn/go-colortext/README.md new file mode 100644 index 0000000..f7feca8 --- /dev/null +++ b/vendor/github.com/daviddengcn/go-colortext/README.md @@ -0,0 +1,21 @@ +go-colortext package [![GoSearch](http://go-search.org/badge?id=github.com%2Fdaviddengcn%2Fgo-colortext)](http://go-search.org/view?id=github.com%2Fdaviddengcn%2Fgo-colortext) +==================== + +This is a package to change the color of the text and background in the console, working both under Windows and other systems. + +Under Windows, the console APIs are used. Otherwise, ANSI texts are output. + +Docs: http://godoc.org/github.com/daviddengcn/go-colortext ([packages that import ct](http://go-search.org/view?id=github.com%2fdaviddengcn%2fgo-colortext)) + +Usage: +```go +ct.Foreground(Green, false) +fmt.Println("Green text starts here...") +ct.ChangeColor(Red, true, White, false) +fmt.Println(...) +ct.ResetColor() +``` + +LICENSE +======= +BSD/MIT license diff --git a/vendor/github.com/daviddengcn/go-colortext/ct.go b/vendor/github.com/daviddengcn/go-colortext/ct.go new file mode 100644 index 0000000..d93bc88 --- /dev/null +++ b/vendor/github.com/daviddengcn/go-colortext/ct.go @@ -0,0 +1,45 @@ +/* +ct package provides functions to change the color of console text. + +Under windows platform, the Console API is used. Under other systems, ANSI text mode is used. +*/ +package ct + +// Color is the type of color to be set. +type Color int + +const ( + // No change of color + None = Color(iota) + Black + Red + Green + Yellow + Blue + Magenta + Cyan + White +) + +// ResetColor resets the foreground and background to original colors +func ResetColor() { + resetColor() +} + +// ChangeColor sets the foreground and background colors. If the value of the color is None, +// the corresponding color keeps unchanged. +// If fgBright or bgBright is set true, corresponding color use bright color. bgBright may be +// ignored in some OS environment. +func ChangeColor(fg Color, fgBright bool, bg Color, bgBright bool) { + changeColor(fg, fgBright, bg, bgBright) +} + +// Foreground changes the foreground color. +func Foreground(cl Color, bright bool) { + ChangeColor(cl, bright, None, false) +} + +// Background changes the background color. +func Background(cl Color, bright bool) { + ChangeColor(None, false, cl, bright) +} diff --git a/vendor/github.com/daviddengcn/go-colortext/ct_ansi.go b/vendor/github.com/daviddengcn/go-colortext/ct_ansi.go new file mode 100644 index 0000000..861e82d --- /dev/null +++ b/vendor/github.com/daviddengcn/go-colortext/ct_ansi.go @@ -0,0 +1,51 @@ +// +build !windows + +package ct + +import ( + "fmt" + "os" + "strconv" +) + +func isDumbTerm() bool { + return os.Getenv("TERM") == "dumb" +} + +func resetColor() { + if isDumbTerm() { + return + } + fmt.Print("\x1b[0m") +} + +func ansiText(fg Color, fgBright bool, bg Color, bgBright bool) string { + if fg == None && bg == None { + return "" + } + s := []byte("\x1b[0") + if fg != None { + s = strconv.AppendUint(append(s, ";"...), 30+(uint64)(fg-Black), 10) + if fgBright { + s = append(s, ";1"...) + } + } + if bg != None { + s = strconv.AppendUint(append(s, ";"...), 40+(uint64)(bg-Black), 10) + if bgBright { + s = append(s, ";1"...) + } + } + s = append(s, "m"...) + return string(s) +} + +func changeColor(fg Color, fgBright bool, bg Color, bgBright bool) { + if isDumbTerm() { + return + } + if fg == None && bg == None { + return + } + fmt.Print(ansiText(fg, fgBright, bg, bgBright)) +} diff --git a/vendor/github.com/daviddengcn/go-colortext/ct_win.go b/vendor/github.com/daviddengcn/go-colortext/ct_win.go new file mode 100644 index 0000000..2b267f4 --- /dev/null +++ b/vendor/github.com/daviddengcn/go-colortext/ct_win.go @@ -0,0 +1,133 @@ +// +build windows + +package ct + +import ( + "syscall" + "unsafe" +) + +var fg_colors = []uint16{ + 0, + 0, + foreground_red, + foreground_green, + foreground_red | foreground_green, + foreground_blue, + foreground_red | foreground_blue, + foreground_green | foreground_blue, + foreground_red | foreground_green | foreground_blue} + +var bg_colors = []uint16{ + 0, + 0, + background_red, + background_green, + background_red | background_green, + background_blue, + background_red | background_blue, + background_green | background_blue, + background_red | background_green | background_blue} + +const ( + foreground_blue = uint16(0x0001) + foreground_green = uint16(0x0002) + foreground_red = uint16(0x0004) + foreground_intensity = uint16(0x0008) + background_blue = uint16(0x0010) + background_green = uint16(0x0020) + background_red = uint16(0x0040) + background_intensity = uint16(0x0080) + + foreground_mask = foreground_blue | foreground_green | foreground_red | foreground_intensity + background_mask = background_blue | background_green | background_red | background_intensity +) + +var ( + kernel32 = syscall.NewLazyDLL("kernel32.dll") + + procGetStdHandle = kernel32.NewProc("GetStdHandle") + procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute") + procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") + + hStdout uintptr + initScreenInfo *console_screen_buffer_info +) + +func setConsoleTextAttribute(hConsoleOutput uintptr, wAttributes uint16) bool { + ret, _, _ := procSetConsoleTextAttribute.Call( + hConsoleOutput, + uintptr(wAttributes)) + return ret != 0 +} + +type coord struct { + X, Y int16 +} + +type small_rect struct { + Left, Top, Right, Bottom int16 +} + +type console_screen_buffer_info struct { + DwSize coord + DwCursorPosition coord + WAttributes uint16 + SrWindow small_rect + DwMaximumWindowSize coord +} + +func getConsoleScreenBufferInfo(hConsoleOutput uintptr) *console_screen_buffer_info { + var csbi console_screen_buffer_info + if ret, _, _ := procGetConsoleScreenBufferInfo.Call(hConsoleOutput, uintptr(unsafe.Pointer(&csbi))); ret == 0 { + return nil + } + return &csbi +} + +const ( + std_output_handle = uint32(-11 & 0xFFFFFFFF) +) + +func init() { + kernel32 := syscall.NewLazyDLL("kernel32.dll") + + procGetStdHandle = kernel32.NewProc("GetStdHandle") + + hStdout, _, _ = procGetStdHandle.Call(uintptr(std_output_handle)) + + initScreenInfo = getConsoleScreenBufferInfo(hStdout) + + syscall.LoadDLL("") +} + +func resetColor() { + if initScreenInfo == nil { // No console info - Ex: stdout redirection + return + } + setConsoleTextAttribute(hStdout, initScreenInfo.WAttributes) +} + +func changeColor(fg Color, fgBright bool, bg Color, bgBright bool) { + attr := uint16(0) + if fg == None || bg == None { + cbufinfo := getConsoleScreenBufferInfo(hStdout) + if cbufinfo == nil { // No console info - Ex: stdout redirection + return + } + attr = cbufinfo.WAttributes + } + if fg != None { + attr = attr & ^foreground_mask | fg_colors[fg] + if fgBright { + attr |= foreground_intensity + } + } + if bg != None { + attr = attr & ^background_mask | bg_colors[bg] + if bgBright { + attr |= background_intensity + } + } + setConsoleTextAttribute(hStdout, attr) +}