You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by to...@apache.org on 2015/08/03 22:30:45 UTC
[01/21] incubator-usergrid git commit: USERGRID-871: refactor Gatling
load testing code
Repository: incubator-usergrid
Updated Branches:
refs/heads/two-dot-o-dev 151527f63 -> c99fe385f
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PushNotificationTargetUserSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PushNotificationTargetUserSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PushNotificationTargetUserSimulation.scala
deleted file mode 100644
index 6a55ace..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PushNotificationTargetUserSimulation.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.simulations
-
-import com.ning.http.client.AsyncHttpClient
-import io.gatling.core.Predef._
-import io.gatling.http.Predef._
-import org.apache.usergrid.scenarios._
-import org.apache.usergrid.settings.Settings
-import scala.concurrent.duration._
-import org.apache.usergrid.helpers.Setup
-
-class PushNotificationTargetUserSimulation extends Simulation {
-
-
- before{
- Setup.setupOrg()
- Setup.setupApplication()
- Setup.setupNotifier()
- Setup.setupUsers()
- }
- setUp(
- NotificationScenarios.createScenario
- .inject(
- rampUsers(Settings.maxPossibleUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.maxPossibleUsers) during Settings.duration)
- .protocols( Settings.httpConf.acceptHeader("application/json"))
- )
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PutCustomEntitySimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PutCustomEntitySimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PutCustomEntitySimulation.scala
deleted file mode 100644
index 2b129fc..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PutCustomEntitySimulation.scala
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import io.gatling.core.scenario.Simulation
-import org.apache.usergrid.datagenerators.FeederGenerator
-import org.apache.usergrid.scenarios.EntityScenarios
-import org.apache.usergrid.settings.Settings
-
-/**
- * PostCustomEntitySimulation - creates lots of custom entities
- *
- * Run this way:
- * mvn gatling:execute -DrampTime=10 -DmaxPossibleUsers=10 -Dduration=120 -Dorg=yourorgname -Dapp=sandbox -Dbaseurl=https://api.usergrid.com -DadminUser=yourusername -DadminPassword='yourpassword' -Dgatling.simulationClass=org.apache.usergrid.simulations.PostCustomEntitySimulation -DcollectionType=yourcollection
- *
- *
- */
-class PutCustomEntitySimulation extends Simulation {
-
- if(!Settings.skipSetup) {
- println("Begin setup")
- println("These aren't the droids you are looking for...")
- //exec(TokenScenarios.getManagementToken)
- println("End Setup")
- }else{
- println("Skipping Setup")
- }
-
- val numEntities:Int = Settings.numEntities
- val collectionType = Settings.collectionType
- println("collection type = " + collectionType)
- val rampTime:Int = Settings.rampTime
- val throttle:Int = Settings.throttle
- val feeder = FeederGenerator.generateCustomEntityPutInfinite(0)
- val httpConf = Settings.httpConf
-
- val scnToRun = scenario("PUT custom entities")
- .feed(feeder)
- .exec(EntityScenarios.putEntity)
-
- /*
- val scnToRun = scenario("POST custom entities")
- .feed(feeder)
- .doIfOrElse(session => session("token").as[String].nonEmpty(session)) {
- exec(EntityScenarios.postEntityWithToken)
- } {
- exec(EntityScenarios.postEntity)
- }
-*/
-
-
- setUp(scnToRun.inject(
- rampUsers(Settings.maxPossibleUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.maxPossibleUsers) during Settings.duration
- ).protocols(httpConf)).maxDuration(Settings.duration)
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PutUsersSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PutUsersSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PutUsersSimulation.scala
deleted file mode 100644
index f89952c..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PutUsersSimulation.scala
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *
- * * Licensed to the Apache Software Foundation (ASF) under one or more
- * * contributor license agreements. The ASF licenses this file to You
- * * under the Apache License, Version 2.0 (the "License"); you may not
- * * use this file except in compliance with the License.
- * * You may obtain a copy of the License at
- * *
- * * http://www.apache.org/licenses/LICENSE-2.0
- * *
- * * Unless required by applicable law or agreed to in writing, software
- * * distributed under the License is distributed on an "AS IS" BASIS,
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * * See the License for the specific language governing permissions and
- * * limitations under the License. For additional information regarding
- * * copyright in this work, please see the NOTICE file in the top level
- * * directory of this distribution.
- *
- */
-
-package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import io.gatling.core.scenario.Simulation
-import org.apache.usergrid.helpers.Setup
-import org.apache.usergrid.scenarios.UserScenarios
-import org.apache.usergrid.settings.Settings
-
-/**
- * PUTS application users continually to an application. Expects the following parameters
- *
- * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
- * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
- * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
- */
-class PutUsersSimulation extends Simulation {
-
- println("Begin setup")
- Setup.setupOrg()
- Setup.setupApplication()
- println("End Setup")
-
-
- setUp(
- UserScenarios.putUsersInfinitely
- .inject(
- /**
- * injection steps take from this forum post
- * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
- */
- rampUsers(Settings.maxPossibleUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.maxPossibleUsers) during Settings.duration
-
- )).protocols(Settings.httpConf.acceptHeader("application/json"))
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/SetupSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/SetupSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/SetupSimulation.scala
deleted file mode 100644
index 567a510..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/SetupSimulation.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * * Licensed to the Apache Software Foundation (ASF) under one or more
- * * contributor license agreements. The ASF licenses this file to You
- * * under the Apache License, Version 2.0 (the "License"); you may not
- * * use this file except in compliance with the License.
- * * You may obtain a copy of the License at
- * *
- * * http://www.apache.org/licenses/LICENSE-2.0
- * *
- * * Unless required by applicable law or agreed to in writing, software
- * * distributed under the License is distributed on an "AS IS" BASIS,
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * * See the License for the specific language governing permissions and
- * * limitations under the License. For additional information regarding
- * * copyright in this work, please see the NOTICE file in the top level
- * * directory of this distribution.
- *
- */
-
-package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import org.apache.usergrid.helpers.Setup
-import org.apache.usergrid.scenarios.{UserScenarios}
-import org.apache.usergrid.settings.Settings
-import scala.concurrent.duration._
-
-/**
- * Classy class class.
- */
-class SetupSimulation extends Simulation{
-
- println("Begin setup")
- Setup.setupOrg()
- Setup.setupApplication()
- Setup.setupNotifier()
- println("End Setup")
-
- setUp(
- UserScenarios.createUsersWithDevicesScenario
- .inject(splitUsers(Settings.maxPossibleUsers) into( rampUsers(10) over (10 seconds)) separatedBy (10 seconds))
- .protocols(Settings.httpConf.acceptHeader("application/json"))
- )
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/AppSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/AppSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/AppSimulation.scala
new file mode 100644
index 0000000..7f1af08
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/AppSimulation.scala
@@ -0,0 +1,44 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one or more
+ * * contributor license agreements. The ASF licenses this file to You
+ * * under the Apache License, Version 2.0 (the "License"); you may not
+ * * use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License. For additional information regarding
+ * * copyright in this work, please see the NOTICE file in the top level
+ * * directory of this distribution.
+ *
+ */
+
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import io.gatling.core.scenario.Simulation
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.NotificationScenarios
+import org.apache.usergrid.settings.Settings
+
+import scala.concurrent.duration._
+
+/**
+ * Classy class class.
+ */
+class AppSimulation extends Simulation {
+ println("Begin setup")
+ Setup.setupNotifier()
+ println("End Setup")
+
+ setUp(
+ NotificationScenarios.createScenario
+ .inject(constantUsersPerSec(Settings.constantUsersPerSec) during (Settings.constantUsersDuration))
+ .protocols(Settings.httpConf.acceptHeader("application/json"))
+ ).throttle(reachRps(Settings.throttle) in (Settings.rampTime seconds), holdFor(Settings.holdDuration))
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/ConnectionsSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/ConnectionsSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/ConnectionsSimulation.scala
new file mode 100644
index 0000000..8e3cd57
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/ConnectionsSimulation.scala
@@ -0,0 +1,54 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one or more
+ * * contributor license agreements. The ASF licenses this file to You
+ * * under the Apache License, Version 2.0 (the "License"); you may not
+ * * use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License. For additional information regarding
+ * * copyright in this work, please see the NOTICE file in the top level
+ * * directory of this distribution.
+ *
+ */
+
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import io.gatling.core.scenario.Simulation
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.ConnectionScenarios
+import org.apache.usergrid.settings.Settings
+
+import scala.concurrent.duration._
+
+/**
+ * Classy class class.
+ */
+class ConnectionsSimulation extends Simulation{
+
+ if(!Settings.skipSetup) {
+ println("Begin setup")
+ Setup.setupOrg()
+ Setup.setupApplication()
+ Setup.setupNotifier()
+ Setup.setupUsers()
+ println("End Setup")
+ }else{
+ println("Skipping Setup")
+ }
+
+ setUp(
+ ConnectionScenarios.createScenario
+ .inject(constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration) // wait for 15 seconds so create org can finish, need to figure out coordination
+ .throttle(reachRps(Settings.throttle) in Settings.rampTime.seconds)
+ .protocols( Settings.httpConf.acceptHeader("application/json"))
+ )
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/DeleteUsersSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/DeleteUsersSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/DeleteUsersSimulation.scala
new file mode 100644
index 0000000..444f67a
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/DeleteUsersSimulation.scala
@@ -0,0 +1,56 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one or more
+ * * contributor license agreements. The ASF licenses this file to You
+ * * under the Apache License, Version 2.0 (the "License"); you may not
+ * * use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License. For additional information regarding
+ * * copyright in this work, please see the NOTICE file in the top level
+ * * directory of this distribution.
+ *
+ */
+
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import io.gatling.core.scenario.Simulation
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.UserScenarios
+import org.apache.usergrid.settings.Settings
+
+/**
+ * Deletes application users continually to an application. Expects the following parameters
+ *
+ * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
+ * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
+ * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
+ */
+class DeleteUsersSimulation extends Simulation {
+
+ println("Begin setup")
+ Setup.setupOrg()
+ Setup.setupApplication()
+ println("End Setup")
+
+
+ setUp(
+ UserScenarios.deleteUsersInfinitely
+ .inject(
+ /**
+ * injection steps take from this forum post
+ * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
+ */
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+
+ )).protocols(Settings.httpConf.acceptHeader("application/json"))
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetEntitySimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetEntitySimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetEntitySimulation.scala
new file mode 100644
index 0000000..4f160c9
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetEntitySimulation.scala
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import org.apache.usergrid.datagenerators.FeederGenerator
+import org.apache.usergrid.scenarios.UserScenarios
+import org.apache.usergrid.settings.Settings
+
+import scala.concurrent.duration._
+
+class GetEntitySimulation extends Simulation {
+
+ // Target settings
+ val httpConf = Settings.httpConf
+
+ // Simulation settings
+ val numUsers:Int = Settings.rampUsers
+ val numEntities:Int = Settings.numEntities
+ val rampTime:Int = Settings.rampTime
+ val throttle:Int = Settings.throttle
+
+ val feeder = FeederGenerator.generateEntityNameFeeder("user", numEntities)
+
+ val scnToRun = scenario("GET entity")
+ .exec(UserScenarios.getRandomUser)
+
+ setUp(scnToRun.inject(atOnceUsers(numUsers)).throttle(reachRps(throttle) in (rampTime.seconds)).protocols(httpConf)).maxDuration(Settings.holdDuration)
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetUserPagesSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetUserPagesSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetUserPagesSimulation.scala
new file mode 100755
index 0000000..c4fadc0
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetUserPagesSimulation.scala
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.UserScenarios
+import org.apache.usergrid.settings.Settings
+
+/**
+ * Posts application users continually to an application. Expects the following parameters
+ *
+ * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
+ * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
+ * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
+ */
+class GetUserPagesSimulation extends Simulation {
+
+ println("Begin setup")
+ Setup.setupOrg()
+ Setup.setupApplication()
+ println("End Setup")
+
+
+ setUp(
+ UserScenarios.getUserPagesToEnd
+ .inject(
+ /**
+ * injection steps take from this forum post
+ * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
+ */
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+
+ )).protocols(Settings.httpConf.acceptHeader("application/json"))
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetUsersSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetUsersSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetUsersSimulation.scala
new file mode 100755
index 0000000..5077fe9
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/GetUsersSimulation.scala
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.UserScenarios
+import org.apache.usergrid.settings.Settings
+
+/**
+ * Posts application users continually to an application. Expects the following parameters
+ *
+ * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
+ * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
+ * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
+ */
+class GetUsersSimulation extends Simulation {
+
+ println("Begin setup")
+ Setup.setupOrg()
+ Setup.setupApplication()
+ println("End Setup")
+
+
+ setUp(
+ UserScenarios.getUsersByUsername
+ .inject(
+ /**
+ * injection steps take from this forum post
+ * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
+ */
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+
+ )).protocols(Settings.httpConf.acceptHeader("application/json"))
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostCustomEntitySimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostCustomEntitySimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostCustomEntitySimulation.scala
new file mode 100644
index 0000000..9369489
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostCustomEntitySimulation.scala
@@ -0,0 +1,76 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one or more
+ * * contributor license agreements. The ASF licenses this file to You
+ * * under the Apache License, Version 2.0 (the "License"); you may not
+ * * use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License. For additional information regarding
+ * * copyright in this work, please see the NOTICE file in the top level
+ * * directory of this distribution.
+ *
+ */
+
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import io.gatling.core.scenario.Simulation
+import org.apache.usergrid.datagenerators.FeederGenerator
+import org.apache.usergrid.scenarios.EntityScenarios
+import org.apache.usergrid.settings.Settings
+
+/**
+ * PostCustomEntitySimulation - creates lots of custom entities
+ *
+ * Run this way:
+ * mvn gatling:execute -DrampTime=10 -DmaxPossibleUsers=10 -Dduration=120 -Dorg=yourorgname -Dapp=sandbox -Dbaseurl=https://api.usergrid.com -DadminUser=yourusername -DadminPassword='yourpassword' -Dgatling.simulationClass=org.apache.usergrid.simulations.deprecated.PostCustomEntitySimulation -DcollectionType=yourcollection
+ *
+ *
+ */
+class PostCustomEntitySimulation extends Simulation {
+
+ if(!Settings.skipSetup) {
+ println("Begin setup")
+ println("These aren't the droids you are looking for...")
+ //exec(TokenScenarios.getManagementToken)
+ println("End Setup")
+ }else{
+ println("Skipping Setup")
+ }
+
+ val numEntities:Int = Settings.numEntities
+ val collectionType = Settings.collectionType
+ println("collection type = " + collectionType)
+ val rampTime:Int = Settings.rampTime
+ val throttle:Int = Settings.throttle
+ val feeder = FeederGenerator.generateCustomEntityInfinite(0)
+ val httpConf = Settings.httpConf
+
+ val scnToRun = scenario("POST custom entities")
+ .feed(feeder)
+ .exec(EntityScenarios.postEntity)
+
+ /*
+ val scnToRun = scenario("POST custom entities")
+ .feed(feeder)
+ .doIfOrElse(session => session("token").as[String].nonEmpty(session)) {
+ exec(EntityScenarios.postEntityWithToken)
+ } {
+ exec(EntityScenarios.postEntity)
+ }
+*/
+
+
+ setUp(scnToRun.inject(
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+ ).protocols(httpConf)).maxDuration(Settings.holdDuration)
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostUsersSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostUsersSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostUsersSimulation.scala
new file mode 100755
index 0000000..c46a92b
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostUsersSimulation.scala
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.UserScenarios
+import org.apache.usergrid.settings.Settings
+
+/**
+ * Posts application users continually to an application. Expects the following parameters
+ *
+ * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
+ * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
+ * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
+ */
+class PostUsersSimulation extends Simulation {
+
+ println("Begin setup")
+ Setup.setupOrg()
+ Setup.setupApplication()
+ println("End Setup")
+
+
+ setUp(
+ UserScenarios.postUsersInfinitely
+ .inject(
+ /**
+ * injection steps take from this forum post
+ * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
+ */
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+
+ )).protocols(Settings.httpConf.acceptHeader("application/json"))
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PushNotificationTargetUserSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PushNotificationTargetUserSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PushNotificationTargetUserSimulation.scala
new file mode 100644
index 0000000..cc39a6f
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PushNotificationTargetUserSimulation.scala
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios._
+import org.apache.usergrid.settings.Settings
+
+class PushNotificationTargetUserSimulation extends Simulation {
+
+
+ before{
+ if (!Settings.skipSetup) {
+ Setup.setupOrg()
+ Setup.setupApplication()
+ Setup.setupNotifier()
+ Setup.setupUsers()
+ } else {
+ println("Skipping setup")
+ }
+ }
+ setUp(
+ NotificationScenarios.createScenario
+ .inject(
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration)
+ .protocols( Settings.httpConf.acceptHeader("application/json"))
+ )
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutCustomEntitySimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutCustomEntitySimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutCustomEntitySimulation.scala
new file mode 100644
index 0000000..bffed0f
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutCustomEntitySimulation.scala
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import io.gatling.core.scenario.Simulation
+import org.apache.usergrid.datagenerators.FeederGenerator
+import org.apache.usergrid.scenarios.EntityScenarios
+import org.apache.usergrid.settings.Settings
+
+/**
+ * PostCustomEntitySimulation - creates lots of custom entities
+ *
+ * Run this way:
+ * mvn gatling:execute -DrampTime=10 -DmaxPossibleUsers=10 -Dduration=120 -Dorg=yourorgname -Dapp=sandbox -Dbaseurl=https://api.usergrid.com -DadminUser=yourusername -DadminPassword='yourpassword' -Dgatling.simulationClass=org.apache.usergrid.simulations.deprecated.PostCustomEntitySimulation -DcollectionType=yourcollection
+ *
+ *
+ */
+class PutCustomEntitySimulation extends Simulation {
+
+ if(!Settings.skipSetup) {
+ println("Begin setup")
+ println("These aren't the droids you are looking for...")
+ //exec(TokenScenarios.getManagementToken)
+ println("End Setup")
+ }else{
+ println("Skipping Setup")
+ }
+
+ val numEntities:Int = Settings.numEntities
+ val collectionType = Settings.collectionType
+ println("collection type = " + collectionType)
+ val rampTime:Int = Settings.rampTime
+ val throttle:Int = Settings.throttle
+ val feeder = FeederGenerator.generateCustomEntityPutInfinite(0)
+ val httpConf = Settings.httpConf
+
+ val scnToRun = scenario("PUT custom entities")
+ .feed(feeder)
+ .exec(EntityScenarios.putEntity)
+
+ /*
+ val scnToRun = scenario("POST custom entities")
+ .feed(feeder)
+ .doIfOrElse(session => session("token").as[String].nonEmpty(session)) {
+ exec(EntityScenarios.postEntityWithToken)
+ } {
+ exec(EntityScenarios.postEntity)
+ }
+*/
+
+
+ setUp(scnToRun.inject(
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+ ).protocols(httpConf)).maxDuration(Settings.holdDuration)
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutUsersSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutUsersSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutUsersSimulation.scala
new file mode 100644
index 0000000..ca65ab9
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutUsersSimulation.scala
@@ -0,0 +1,56 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one or more
+ * * contributor license agreements. The ASF licenses this file to You
+ * * under the Apache License, Version 2.0 (the "License"); you may not
+ * * use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License. For additional information regarding
+ * * copyright in this work, please see the NOTICE file in the top level
+ * * directory of this distribution.
+ *
+ */
+
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import io.gatling.core.scenario.Simulation
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.UserScenarios
+import org.apache.usergrid.settings.Settings
+
+/**
+ * PUTS application users continually to an application. Expects the following parameters
+ *
+ * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
+ * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
+ * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
+ */
+class PutUsersSimulation extends Simulation {
+
+ println("Begin setup")
+ Setup.setupOrg()
+ Setup.setupApplication()
+ println("End Setup")
+
+
+ setUp(
+ UserScenarios.putUsersInfinitely
+ .inject(
+ /**
+ * injection steps take from this forum post
+ * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
+ */
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+
+ )).protocols(Settings.httpConf.acceptHeader("application/json"))
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/SetupSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/SetupSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/SetupSimulation.scala
new file mode 100644
index 0000000..484fb32
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/SetupSimulation.scala
@@ -0,0 +1,46 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one or more
+ * * contributor license agreements. The ASF licenses this file to You
+ * * under the Apache License, Version 2.0 (the "License"); you may not
+ * * use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License. For additional information regarding
+ * * copyright in this work, please see the NOTICE file in the top level
+ * * directory of this distribution.
+ *
+ */
+
+package org.apache.usergrid.simulations.deprecated
+
+import io.gatling.core.Predef._
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.UserScenarios
+import org.apache.usergrid.settings.Settings
+
+import scala.concurrent.duration._
+
+/**
+ * Classy class class.
+ */
+class SetupSimulation extends Simulation{
+
+ println("Begin setup")
+ Setup.setupOrg()
+ Setup.setupApplication()
+ Setup.setupNotifier()
+ println("End Setup")
+
+ setUp(
+ UserScenarios.createUsersWithDevicesScenario
+ .inject(splitUsers(Settings.rampUsers) into( rampUsers(10) over (10 seconds)) separatedBy (10 seconds))
+ .protocols(Settings.httpConf.acceptHeader("application/json"))
+ )
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/test/scala/Engine.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/scala/Engine.scala b/stack/loadtests/src/test/scala/Engine.scala
index 0914589..353b80c 100644
--- a/stack/loadtests/src/test/scala/Engine.scala
+++ b/stack/loadtests/src/test/scala/Engine.scala
@@ -25,7 +25,7 @@ object Engine extends App {
props.resultsDirectory(IDEPathHelper.resultsDirectory.toString)
props.requestBodiesDirectory(IDEPathHelper.requestBodiesDirectory.toString)
props.binariesDirectory(IDEPathHelper.mavenBinariesDirectory.toString)
- val simName = if(System.getProperty("gatling.simulationClass")!=null) System.getProperty("gatling.simulationClass") else "org.apache.usergrid.simulations.AppSimulation";
+ val simName = if(System.getProperty("gatling.simulationClass")!=null) System.getProperty("gatling.simulationClass") else "org.apache.usergrid.simulations.deprecated.AppSimulation";
props.simulationClass(simName)
Gatling.fromMap(props.build)
[17/21] incubator-usergrid git commit: USERGRID-871: fix cursor query
test
Posted by to...@apache.org.
USERGRID-871: fix cursor query test
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/3976ff98
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/3976ff98
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/3976ff98
Branch: refs/heads/two-dot-o-dev
Commit: 3976ff98f12b38c223a2d618824da83161c1d055
Parents: 15c1c59
Author: Mike Dunker <md...@apigee.com>
Authored: Fri Jul 31 10:41:20 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Fri Jul 31 10:41:20 2015 -0700
----------------------------------------------------------------------
stack/loadtests/runCollectionQueryTest.sh | 10 +-
stack/loadtests/runLoadSortableEntities.sh | 107 +++++++++++++++++++
.../datagenerators/EntityDataGenerator.scala | 33 +++---
.../org/apache/usergrid/enums/EntityType.scala | 3 +-
.../apache/usergrid/helpers/Extractors.scala | 2 +-
.../src/test/resources/logback-test.xml | 5 +-
6 files changed, 138 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3976ff98/stack/loadtests/runCollectionQueryTest.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runCollectionQueryTest.sh b/stack/loadtests/runCollectionQueryTest.sh
index 9882cf2..85910e6 100755
--- a/stack/loadtests/runCollectionQueryTest.sh
+++ b/stack/loadtests/runCollectionQueryTest.sh
@@ -41,14 +41,14 @@ ORG=gatling
CREATE_APP=false
#APP=$(date +%s)
APP=millionentities
-COLLECTION=basicentities
+COLLECTION=sortableentities
SCENARIO_TYPE=getAllByCursor
LOAD_ENTITIES=false
NUM_ENTITIES=10000
SKIP_SETUP=false
-SEARCH_QUERY=order%20by%20specials%20desc
-ENTITY_TYPE=basic
-ENTITY_PREFIX=basic
+SEARCH_QUERY=order%20by%20sortField%20desc
+ENTITY_TYPE=trivialSortable
+ENTITY_PREFIX=sortable
ENTITY_SEED=1
AUTH_TYPE=token
TOKEN_TYPE=management
@@ -72,6 +72,8 @@ mvn gatling:execute -Dorg=usergrid \
-DentityType=${ENTITY_TYPE} \
-DentityPrefix=${ENTITY_PREFIX} \
-DentitySeed=${ENTITY_SEED} \
+-DsearchQuery=${SEARCH_QUERY} \
+-DsearchLimit=${SEARCH_LIMIT} \
-DrampUsers=${RAMP_USERS} \
-DrampTime=${RAMP_TIME} \
-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3976ff98/stack/loadtests/runLoadSortableEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runLoadSortableEntities.sh b/stack/loadtests/runLoadSortableEntities.sh
new file mode 100755
index 0000000..5289b6a
--- /dev/null
+++ b/stack/loadtests/runLoadSortableEntities.sh
@@ -0,0 +1,107 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 8 ] || die "At least 8 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) NUM_ENTITIES ENTITY_WORKER_NUM ENTITY_WORKER_COUNT [UUID_FILENAME]"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+CONSTANT_USERS_PER_SEC="$4"
+CONSTANT_USERS_DURATION="$5"
+NUM_ENTITIES="$6"
+ENTITY_WORKER_NUM="$7"
+ENTITY_WORKER_COUNT="$8"
+UUID_FILENAME="$9"
+
+shift 9
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+#APP=$(date +%s)
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
+CREATE_ORG=false
+ORG=gatling
+CREATE_APP=false
+APP=millionentities
+COLLECTION=sortableentities
+SANDBOX_COLLECTION=true
+SCENARIO_TYPE=loadEntities
+# don't load entities as part of setup
+LOAD_ENTITIES=false
+
+SKIP_SETUP=false
+#SEARCH_QUERY=order%20by%20specials%20desc
+#SEARCH_LIMIT=1000
+ENTITY_TYPE=trivialSortable
+ENTITY_PREFIX=sortable
+ENTITY_SEED=1
+AUTH_TYPE=token
+TOKEN_TYPE=management
+END_CONDITION_TYPE=minutesElapsed
+#END_CONDITION_TYPE=requestCount
+END_MINUTES=2
+END_REQUEST_COUNT=100
+
+#Execute the test
+mvn gatling:execute \
+-DskipSetup=${SKIP_SETUP} \
+-DcreateOrg=${CREATE_ORG} \
+-Dorg=${ORG} \
+-DcreateApp=${CREATE_APP} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
+-DloadEntities=${LOAD_ENTITIES} \
+-DnumEntities=${NUM_ENTITIES} \
+-DentityType=${ENTITY_TYPE} \
+-DentityPrefix=${ENTITY_PREFIX} \
+-DentitySeed=${ENTITY_SEED} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
+-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
+-Dcollection=${COLLECTION} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DendConditionType=${END_CONDITION_TYPE} \
+-DendMinutes=${END_MINUTES} \
+-DendRequestCount=${END_REQUEST_COUNT} \
+-DentityWorkerCount=${ENTITY_WORKER_COUNT} \
+-DentityWorkerNum=${ENTITY_WORKER_NUM} \
+-DuuidFilename=${UUID_FILENAME} \
+-DsandboxCollection=${SANDBOX_COLLECTION} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
+
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3976ff98/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
index cd359b7..5b5c612 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
@@ -87,16 +87,24 @@ object EntityDataGenerator {
/* --------------------------- */
- def generateTrivialEntity(name: String = null): String = {
+ def generateTrivialEntity(name: String = null): String = {
- val nameKey = if (name != null) "name" else "noname"
- val nameVal = if (name != null) name else Utils.generateRandomInt(1,10000000).toString
+ val nameKey = if (name != null) "name" else "noname"
+ val nameVal = if (name != null) name else Utils.generateRandomInt(1,10000000).toString
- val entity: Map[String, String] = Map(
- nameKey -> nameVal
- )
+ val entity: Map[String, String] = Map(
+ nameKey -> nameVal
+ )
- new JSONObject(entity).toString()
+ new JSONObject(entity).toString()
+ }
+
+ def generateTrivialSortableEntity(name: String = null): String = {
+
+ if (name != null)
+ new JSONObject(Map("name" -> name, "sortField" -> Utils.generateRandomInt(1,10000000))).toString()
+ else
+ new JSONObject(Map("sortField" -> Utils.generateRandomInt(1,10000000))).toString()
}
def generateBasicEntity(name: String = null): String = {
@@ -127,13 +135,12 @@ object EntityDataGenerator {
}
def generateEntity(entityType: String = EntityType.Basic, entityName: String = null): String = {
- val entity: String =
- if (entityType == EntityType.Trivial)
- generateTrivialEntity(entityName)
- else // default is basic
- generateBasicEntity(entityName)
- entity
+ entityType match {
+ case EntityType.Trivial => generateTrivialEntity(entityName)
+ case EntityType.TrivialSortable => generateTrivialSortableEntity(entityName)
+ case EntityType.Basic => generateBasicEntity(entityName)
+ }
}
def generateUserEntity(userId: String = "user" + System.currentTimeMillis().toString): String = {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3976ff98/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
index dfb378c..214d48c 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
@@ -2,9 +2,10 @@ package org.apache.usergrid.enums
object EntityType {
val Trivial = "trivial"
+ val TrivialSortable = "trivialSortable"
val Basic = "basic"
- val Values = Seq(Trivial,Basic)
+ val Values = Seq(Trivial,TrivialSortable,Basic)
def isValid(str: String): Boolean = {
Values.contains(str)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3976ff98/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
index 120d790..e970fbd 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
@@ -34,7 +34,7 @@ object Extractors {
* Will extract the cursor from the response. If the cursor is not present, an empty string will be set
*/
def maybeExtractCursor(saveAsName: String) = {
- jsonPath("$..cursor").transformOption(extract => {
+ jsonPath("$.cursor").transformOption(extract => {
//it may or may not be present. If it is, save it, otherwise save it as an empty string
extract.orElse(Some(""))
}).saveAs(saveAsName)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3976ff98/stack/loadtests/src/test/resources/logback-test.xml
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/resources/logback-test.xml b/stack/loadtests/src/test/resources/logback-test.xml
index 646582b..35a4688 100644
--- a/stack/loadtests/src/test/resources/logback-test.xml
+++ b/stack/loadtests/src/test/resources/logback-test.xml
@@ -28,10 +28,9 @@
<!-- Uncomment for logging ALL HTTP request and responses -->
<!-- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="TRACE" /> -->
<!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
- <!-- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="DEBUG" /> -->
+ <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="DEBUG" />
-<!-- <logger name="io.gatling.http" level="TRACE" /> -->
- <!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
+ <!-- <logger name="io.gatling.http" level="TRACE" /> -->
<root level="WARN">
<appender-ref ref="CONSOLE" />
[21/21] incubator-usergrid git commit: Merge branch 'two-dot-o-dev'
of https://github.com/mdunker/incubator-usergrid into two-dot-o-dev
Posted by to...@apache.org.
Merge branch 'two-dot-o-dev' of https://github.com/mdunker/incubator-usergrid into two-dot-o-dev
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/c99fe385
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/c99fe385
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/c99fe385
Branch: refs/heads/two-dot-o-dev
Commit: c99fe385f5a8fc754a41afdd2da89784f4c6c874
Parents: 151527f b038b46
Author: Todd Nine <tn...@apigee.com>
Authored: Mon Aug 3 14:30:26 2015 -0600
Committer: Todd Nine <tn...@apigee.com>
Committed: Mon Aug 3 14:30:26 2015 -0600
----------------------------------------------------------------------
stack/loadtests/README.md | 50 +-
stack/loadtests/pom.xml | 26 +-
.../loadtests/runAuditGetCollectionEntities.sh | 74 +
.../runAuditVerifyCollectionEntities.sh | 71 +
stack/loadtests/runCollectionQueryTest.sh | 99 +
stack/loadtests/runDeleteEntities.sh | 99 +
.../loadtests/runGetEntitiesByNameSequential.sh | 106 +
stack/loadtests/runLoadEntities.sh | 107 +
stack/loadtests/runLoadSortableEntities.sh | 107 +
stack/loadtests/runRandomEntityByNameTest.sh | 97 +
stack/loadtests/runRandomEntityByUuidTest.sh | 99 +
stack/loadtests/runUpdateEntities.sh | 99 +
stack/loadtests/runtests.sh | 12 +-
.../datagenerators/EntityDataGenerator.scala | 91 +-
.../datagenerators/FeederGenerator.scala | 208 +-
.../datagenerators/datafiles/dist.all.last.txt | 88799 +++++++++++++++++
.../datafiles/dist.female.first.txt | 4275 +
.../datafiles/dist.male.first.txt | 1219 +
.../usergrid/datagenerators/firstNames.txt | 5494 +
.../usergrid/datagenerators/lastNames.txt | 88799 +++++++++++++++++
.../org/apache/usergrid/enums/AuthType.scala | 15 +
.../usergrid/enums/ConfigProperties.scala | 128 +
.../usergrid/enums/EndConditionType.scala | 12 +
.../org/apache/usergrid/enums/EntityType.scala | 13 +
.../apache/usergrid/enums/ScenarioType.scala | 20 +
.../org/apache/usergrid/enums/TokenType.scala | 13 +
.../apache/usergrid/helpers/Extractors.scala | 57 +-
.../org/apache/usergrid/helpers/Setup.scala | 267 +-
.../org/apache/usergrid/helpers/Utils.scala | 101 +
.../scenarios/ApplicationScenarios.scala | 12 +-
.../usergrid/scenarios/AuditScenarios.scala | 134 +
.../scenarios/ConnectionScenarios.scala | 16 +-
.../usergrid/scenarios/DeviceScenarios.scala | 23 +-
.../scenarios/EntityCollectionScenarios.scala | 322 +
.../usergrid/scenarios/EntityScenarios.scala | 39 +-
.../usergrid/scenarios/GeoScenarios.scala | 19 +-
.../scenarios/NotificationScenarios.scala | 26 +-
.../usergrid/scenarios/NotifierScenarios.scala | 19 +-
.../scenarios/OrganizationScenarios.scala | 17 +-
.../usergrid/scenarios/TokenScenarios.scala | 19 +-
.../usergrid/scenarios/UserScenarios.scala | 43 +-
.../org/apache/usergrid/settings/Headers.scala | 25 +-
.../org/apache/usergrid/settings/Settings.scala | 356 +-
.../org/apache/usergrid/settings/Utils.scala | 91 -
.../usergrid/simulations/AppSimulation.scala | 44 -
.../usergrid/simulations/AuditSimulation.scala | 68 +
.../simulations/ConfigurableSimulation.scala | 83 +
.../simulations/ConnectionsSimulation.scala | 53 -
.../simulations/DeleteUsersSimulation.scala | 56 -
.../simulations/GetEntitySimulation.scala | 44 -
.../simulations/GetUserPagesSimulation.scala | 51 -
.../simulations/GetUsersSimulation.scala | 51 -
.../PostCustomEntitySimulation.scala | 80 -
.../simulations/PostUsersSimulation.scala | 51 -
.../PushNotificationTargetUserSimulation.scala | 44 -
.../simulations/PutCustomEntitySimulation.scala | 75 -
.../simulations/PutUsersSimulation.scala | 56 -
.../usergrid/simulations/SetupSimulation.scala | 45 -
.../simulations/deprecated/AppSimulation.scala | 41 +
.../deprecated/ConnectionsSimulation.scala | 51 +
.../deprecated/DeleteUsersSimulation.scala | 56 +
.../deprecated/GetEntitySimulation.scala | 44 +
.../deprecated/GetUserPagesSimulation.scala | 51 +
.../deprecated/GetUsersSimulation.scala | 51 +
.../deprecated/PostCustomEntitySimulation.scala | 76 +
.../deprecated/PostUsersSimulation.scala | 51 +
.../PushNotificationTargetUserSimulation.scala | 45 +
.../deprecated/PutCustomEntitySimulation.scala | 75 +
.../deprecated/PutUsersSimulation.scala | 56 +
.../deprecated/SetupSimulation.scala | 43 +
.../src/test/resources/dummyAuditUuid.csv | 1 +
.../loadtests/src/test/resources/dummyUuid.csv | 1 +
.../src/test/resources/logback-test.xml | 7 +-
stack/loadtests/src/test/resources/logback.xml | 4 +-
stack/loadtests/src/test/scala/Engine.scala | 2 +-
75 files changed, 192057 insertions(+), 1117 deletions(-)
----------------------------------------------------------------------
[07/21] incubator-usergrid git commit: USERGRID-871: refactor Gatling
load testing code
Posted by to...@apache.org.
USERGRID-871: refactor Gatling load testing code
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/c499e421
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/c499e421
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/c499e421
Branch: refs/heads/two-dot-o-dev
Commit: c499e421554d88485b712e65a14c33007de0acd3
Parents: f62f053
Author: Mike Dunker <md...@apigee.com>
Authored: Tue Jul 21 16:13:50 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Tue Jul 21 16:13:50 2015 -0700
----------------------------------------------------------------------
stack/loadtests/README.md | 50 +-
stack/loadtests/pom.xml | 26 +-
stack/loadtests/runCollectionQueryTest.sh | 95 +
stack/loadtests/runRandomEntityByNameTest.sh | 95 +
stack/loadtests/runtests.sh | 12 +-
.../datagenerators/EntityDataGenerator.scala | 74 +-
.../datagenerators/FeederGenerator.scala | 122 +-
.../datagenerators/datafiles/dist.all.last.txt | 88799 +++++++++++++++++
.../datafiles/dist.female.first.txt | 4275 +
.../datafiles/dist.male.first.txt | 1219 +
.../usergrid/datagenerators/firstNames.txt | 5494 +
.../usergrid/datagenerators/lastNames.txt | 88799 +++++++++++++++++
.../org/apache/usergrid/enums/AuthType.scala | 10 +
.../usergrid/enums/ConfigProperties.scala | 47 +
.../usergrid/enums/EndConditionType.scala | 9 +
.../org/apache/usergrid/enums/EntityType.scala | 9 +
.../apache/usergrid/enums/ScenarioType.scala | 9 +
.../org/apache/usergrid/enums/TokenType.scala | 10 +
.../apache/usergrid/helpers/Extractors.scala | 67 +-
.../org/apache/usergrid/helpers/Setup.scala | 193 +-
.../org/apache/usergrid/helpers/Utils.scala | 100 +
.../scenarios/ApplicationScenarios.scala | 4 +-
.../scenarios/ConnectionScenarios.scala | 6 +-
.../usergrid/scenarios/DeviceScenarios.scala | 6 +-
.../scenarios/EntityCollectionScenarios.scala | 131 +
.../usergrid/scenarios/EntityScenarios.scala | 36 +-
.../usergrid/scenarios/GeoScenarios.scala | 17 +-
.../scenarios/NotificationScenarios.scala | 5 +-
.../usergrid/scenarios/NotifierScenarios.scala | 6 +-
.../scenarios/OrganizationScenarios.scala | 4 +-
.../usergrid/scenarios/TokenScenarios.scala | 4 +-
.../usergrid/scenarios/UserScenarios.scala | 29 +-
.../org/apache/usergrid/settings/Headers.scala | 22 +-
.../org/apache/usergrid/settings/Settings.scala | 96 +-
.../org/apache/usergrid/settings/Utils.scala | 91 -
.../usergrid/simulations/AppSimulation.scala | 44 -
.../simulations/ConfigurableSimulation.scala | 73 +
.../simulations/ConnectionsSimulation.scala | 53 -
.../simulations/DeleteUsersSimulation.scala | 56 -
.../simulations/GetEntitySimulation.scala | 44 -
.../simulations/GetUserPagesSimulation.scala | 51 -
.../simulations/GetUsersSimulation.scala | 51 -
.../PostCustomEntitySimulation.scala | 80 -
.../simulations/PostUsersSimulation.scala | 51 -
.../PushNotificationTargetUserSimulation.scala | 44 -
.../simulations/PutCustomEntitySimulation.scala | 75 -
.../simulations/PutUsersSimulation.scala | 56 -
.../usergrid/simulations/SetupSimulation.scala | 45 -
.../simulations/deprecated/AppSimulation.scala | 44 +
.../deprecated/ConnectionsSimulation.scala | 54 +
.../deprecated/DeleteUsersSimulation.scala | 56 +
.../deprecated/GetEntitySimulation.scala | 44 +
.../deprecated/GetUserPagesSimulation.scala | 51 +
.../deprecated/GetUsersSimulation.scala | 51 +
.../deprecated/PostCustomEntitySimulation.scala | 76 +
.../deprecated/PostUsersSimulation.scala | 51 +
.../PushNotificationTargetUserSimulation.scala | 45 +
.../deprecated/PutCustomEntitySimulation.scala | 75 +
.../deprecated/PutUsersSimulation.scala | 56 +
.../deprecated/SetupSimulation.scala | 46 +
stack/loadtests/src/test/scala/Engine.scala | 2 +-
61 files changed, 190329 insertions(+), 1016 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/README.md
----------------------------------------------------------------------
diff --git a/stack/loadtests/README.md b/stack/loadtests/README.md
index 14514c6..d497a10 100644
--- a/stack/loadtests/README.md
+++ b/stack/loadtests/README.md
@@ -5,41 +5,41 @@ Gatling will run through mvn
1. execute mvn gatling:execute with these options
- *Required
- > -Dthrottle={maxReqsSec} -Dduration={durationInSecs} -Dorg={org} -Dapp={appName} -Dbaseurl={uriNoProceedingSlash} -DnumEntities={numberOfEntitiesYouWantToCreateInteger} -DmaxPossibleUsers={totalUsersInteger} -DrampTime={rampTimeIntegerSeconds} -DadminUser={username} -DadminPassword={pwd} -Dgatling.simulationClass={simulationFQDN}
-
- *Addional optional settings
-
- >-DpushNotifier={notifierName} -DpushProvider={noop_apns_or_gcm} -DskipSetup={boolean}
-
- skipSetup will skip the setup steps
-
- So running will look something like this
- >mvn gatling:execute -Dthrottle=100 -Dduration=300 -Dorg=usergrid -Dapp=load -Dbaseurl=http://load.usergrid.com -DnumEntities=300 -DmaxPossibleUsers=600 -DrampTime=30 -DadminUser=usergrid -DadminPassword=test -Dgatling.simulationClass=org.apache.usergrid.simulations.AppSimulation
-
- Setting the users and duration => Injects a given number of users with a linear ramp over a given duration. users must be greater than duration
-
- Setting the throttle and ramptime => will attempt to hit a set reqs/sec over a given time period. If users and duration are not great enough then you will never hit your throttle
-
- Values for simulation are 'all','connections'
-
- Also see http://gatling.io/docs/2.0.2/general/simulation_setup.html
-
- Additional docs can be found here http://gatling.io/docs/2.0.2/
+ *Required
+ > -Dthrottle={maxReqsSec} -Dduration={durationInSecs} -Dorg={org} -Dapp={appName} -Dbaseurl={uriNoProceedingSlash} -DnumEntities={numberOfEntitiesYouWantToCreateInteger} -DmaxPossibleUsers={totalUsersInteger} -DrampTime={rampTimeIntegerSeconds} -DadminUser={username} -DadminPassword={pwd} -Dgatling.simulationClass={simulationFQDN}
+
+ *Addional optional settings
+
+ >-DpushNotifier={notifierName} -DpushProvider={noop_apns_or_gcm} -DskipSetup={boolean}
+
+ skipSetup will skip the setup steps
+
+ So running will look something like this
+ >mvn gatling:execute -Dthrottle=100 -Dduration=300 -Dorg=usergrid -Dapp=load -Dbaseurl=http://load.usergrid.com -DnumEntities=300 -DmaxPossibleUsers=600 -DrampTime=30 -DadminUser=usergrid -DadminPassword=test -Dgatling.simulationClass=org.apache.usergrid.simulations.deprecated.AppSimulation
+
+ Setting the users and duration => Injects a given number of users with a linear ramp over a given duration. users must be greater than duration
+
+ Setting the throttle and ramptime => will attempt to hit a set reqs/sec over a given time period. If users and duration are not great enough then you will never hit your throttle
+
+ Values for simulation are 'all','connections'
+
+ Also see http://gatling.io/docs/2.0.2/general/simulation_setup.html
+
+ Additional docs can be found here http://gatling.io/docs/2.0.2/
##Running a Push Notification Simulation
1. Set up all users in the system with 2 devices each.
- >mvn compile gatling:execute -Dgatling.simulationClass=org.apache.usergrid.simulations.SetupSimulation -DadminUser=usergrid -DadminPassword=test -Dorg=usergrid -Dapp=load -Dthrottle=100 -Dbaseurl=http://loadtest.usergrid.com -DmaxPossibleUsers=1000
+ >mvn compile gatling:execute -Dgatling.simulationClass=org.apache.usergrid.simulations.deprecated.SetupSimulation -DadminUser=usergrid -DadminPassword=test -Dorg=usergrid -Dapp=load -Dthrottle=100 -Dbaseurl=http://loadtest.usergrid.com -DmaxPossibleUsers=1000
- Note the following.
+ Note the following.
- **throttle:** The max number of users + devices per second to create
+ **throttle:** The max number of users + devices per second to create
- **maxPossibleUsers:** The maximum number of users the simulation will create before exiting
+ **maxPossibleUsers:** The maximum number of users the simulation will create before exiting
1. No
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/pom.xml
----------------------------------------------------------------------
diff --git a/stack/loadtests/pom.xml b/stack/loadtests/pom.xml
index 0389eda..6605602 100644
--- a/stack/loadtests/pom.xml
+++ b/stack/loadtests/pom.xml
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -53,7 +53,7 @@
<encoding>UTF-8</encoding>
<gatling.version>2.0.3</gatling.version>
- <gatling.plugin.version>2.0.0</gatling.plugin.version>
+ <gatling.plugin.version>2.0.0</gatling.plugin.version>
<gatling-highcharts.version>2.0.3</gatling-highcharts.version>
<scala-maven-plugin.version>3.1.6</scala-maven-plugin.version>
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/runCollectionQueryTest.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runCollectionQueryTest.sh b/stack/loadtests/runCollectionQueryTest.sh
new file mode 100755
index 0000000..8137d2e
--- /dev/null
+++ b/stack/loadtests/runCollectionQueryTest.sh
@@ -0,0 +1,95 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 6 ] || die "At least 6 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) SEARCH_LIMIT"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+CONSTANT_USERS_PER_SEC="$4"
+CONSTANT_USERS_DURATION="$5"
+SEARCH_LIMIT="$6"
+
+shift 6
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+CREATE_ORG=false
+ORG=gatling
+CREATE_APP=false
+#APP=$(date +%s)
+APP=millionentities
+COLLECTION_TYPE=basicentities
+SCENARIO_TYPE=getAllByCursor
+LOAD_ENTITIES=false
+NUM_ENTITIES=10000
+SKIP_SETUP=false
+SEARCH_QUERY=order%20by%20specials%20desc
+ENTITY_TYPE=basic
+ENTITY_PREFIX=basic
+ENTITY_SEED=1
+AUTH_TYPE=token
+TOKEN_TYPE=management
+END_CONDITION_TYPE=minutesElapsed
+#END_CONDITION_TYPE=requestCount
+END_MINUTES=2
+END_REQUEST_COUNT=100
+
+#Execute the test
+mvn gatling:execute -Dorg=usergrid \
+-DskipSetup=${SKIP_SETUP} \
+-DcreateOrg=${CREATE_ORG} \
+-Dorg=${ORG} \
+-DcreateApp=${CREATE_APP} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=usergrid \
+-DadminPassword=test \
+-DloadEntities=${LOAD_ENTITIES} \
+-DnumEntities=${NUM_ENTITIES} \
+-DentityType=${ENTITY_TYPE} \
+-DentityPrefix=${ENTITY_PREFIX} \
+-DentitySeed=${ENTITY_SEED} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
+-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
+-DcollectionType=${COLLECTION_TYPE} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DendConditionType=${END_CONDITION_TYPE} \
+-DendMinutes=${END_MINUTES} \
+-DendRequestCount=${END_REQUEST_COUNT} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/runRandomEntityByNameTest.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runRandomEntityByNameTest.sh b/stack/loadtests/runRandomEntityByNameTest.sh
new file mode 100755
index 0000000..474acfe
--- /dev/null
+++ b/stack/loadtests/runRandomEntityByNameTest.sh
@@ -0,0 +1,95 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 5 ] || die "At least 5 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds)"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+CONSTANT_USERS_PER_SEC="$4"
+CONSTANT_USERS_DURATION="$5"
+
+shift 5
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+#APP=$(date +%s)
+CREATE_ORG=false
+ORG=gatling
+CREATE_APP=false
+APP=millionentities
+COLLECTION_TYPE=trivialentities
+SCENARIO_TYPE=nameRandomInfinite
+LOAD_ENTITIES=false
+NUM_ENTITIES=10000
+SKIP_SETUP=false
+#SEARCH_QUERY=order%20by%20specials%20desc
+#SEARCH_LIMIT=1000
+ENTITY_TYPE=trivial
+ENTITY_PREFIX=trivial
+ENTITY_SEED=1
+AUTH_TYPE=token
+TOKEN_TYPE=management
+END_CONDITION_TYPE=minutesElapsed
+#END_CONDITION_TYPE=requestCount
+END_MINUTES=2
+END_REQUEST_COUNT=100
+
+#Execute the test
+mvn gatling:execute -Dorg=usergrid \
+-DskipSetup=${SKIP_SETUP} \
+-DcreateOrg=${CREATE_ORG} \
+-Dorg=${ORG} \
+-DcreateApp=${CREATE_APP} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=usergrid \
+-DadminPassword=test \
+-DloadEntities=${LOAD_ENTITIES} \
+-DnumEntities=${NUM_ENTITIES} \
+-DentityType=${ENTITY_TYPE} \
+-DentityPrefix=${ENTITY_PREFIX} \
+-DentitySeed=${ENTITY_SEED} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
+-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
+-DcollectionType=${COLLECTION_TYPE} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DendConditionType=${END_CONDITION_TYPE} \
+-DendMinutes=${END_MINUTES} \
+-DendRequestCount=${END_REQUEST_COUNT} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
+
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/runtests.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runtests.sh b/stack/loadtests/runtests.sh
index 0897d25..ea9658c 100755
--- a/stack/loadtests/runtests.sh
+++ b/stack/loadtests/runtests.sh
@@ -40,7 +40,7 @@ APP1=$(date +%s)
mvn gatling:execute -Dorg=usergrid \
-Dbaseurl=${URL} \
-DmaxPossibleUsers=${MAX_CONCURRENT_USERS} \
--DmaxPossibleUsers=${RAMP_TIME} \
+-DrampTime=${RAMP_TIME} \
-DadminUser=usergrid \
-DadminPassword=test \
-Dduration=${DURATION_TIME} \
@@ -52,7 +52,7 @@ mvn gatling:execute -Dorg=usergrid \
mvn gatling:execute -Dorg=usergrid \
-Dbaseurl=${URL} \
-DmaxPossibleUsers=${MAX_CONCURRENT_USERS} \
--DmaxPossibleUsers=${RAMP_TIME} \
+-DrampTime=${RAMP_TIME} \
-DadminUser=usergrid \
-DadminPassword=test \
-Dduration=${DURATION_TIME} \
@@ -64,7 +64,7 @@ mvn gatling:execute -Dorg=usergrid \
mvn gatling:execute -Dorg=usergrid \
-Dbaseurl=${URL} \
-DmaxPossibleUsers=${MAX_CONCURRENT_USERS} \
--DmaxPossibleUsers=${RAMP_TIME} \
+-DrampTime=${RAMP_TIME} \
-DadminUser=usergrid \
-DadminPassword=test \
-Dduration=${DURATION_TIME} \
@@ -78,7 +78,7 @@ APP2=$(date +%s)
mvn gatling:execute -Dorg=usergrid \
-Dbaseurl=${URL} \
-DmaxPossibleUsers=${MAX_CONCURRENT_USERS} \
--DmaxPossibleUsers=${RAMP_TIME} \
+-DrampTime=${RAMP_TIME} \
-DadminUser=usergrid \
-DadminPassword=test \
-Dduration=${DURATION_TIME} \
@@ -89,7 +89,7 @@ mvn gatling:execute -Dorg=usergrid \
mvn gatling:execute -Dorg=usergrid \
-Dbaseurl=${URL} \
-DmaxPossibleUsers=${MAX_CONCURRENT_USERS} \
--DmaxPossibleUsers=${RAMP_TIME} \
+-rampTime=${RAMP_TIME} \
-DadminUser=usergrid \
-DadminPassword=test \
-Dduration=${DURATION_TIME} \
@@ -101,7 +101,7 @@ mvn gatling:execute -Dorg=usergrid \
mvn gatling:execute -Dorg=usergrid \
-Dbaseurl=${URL} \
-DmaxPossibleUsers=${MAX_CONCURRENT_USERS} \
--DmaxPossibleUsers=${RAMP_TIME} \
+-DrampTime=${RAMP_TIME} \
-DadminUser=usergrid \
-DadminPassword=test \
-Dduration=${DURATION_TIME} \
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
index cb024d3..88b81c8 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
@@ -16,9 +16,8 @@
*/
package org.apache.usergrid.datagenerators
- import java.util.UUID
-
- import org.apache.usergrid.settings.Utils
+ import org.apache.usergrid.enums.EntityType
+ import org.apache.usergrid.helpers.Utils
import scala.collection.mutable.ArrayBuffer
import scala.util.parsing.json.JSONObject
@@ -44,7 +43,7 @@
def generateUser(userId: String): Map[String,String] = {
- return Map(
+ Map(
"username" -> "user".concat(userId.toString),
"profileId" -> Utils.generateRandomInt(10000, 1000000).toString,
@@ -64,7 +63,7 @@
def generateCustomEntity(): Map[String,String] = {
- var entity: Map[String, String] = Map(
+ val entity: Map[String, String] = Map(
// "name" -> "fdsa",
"address" -> Utils.generateRandomInt(10000, 1000000).toString,
"city" -> Utils.generateRandomInt(10000, 1000000).toString,
@@ -82,14 +81,31 @@
"tables" -> Utils.generateRandomInt(50, 100000).toString,
"outdoor" -> Utils.generateRandomInt(50, 100000).toString
)
- return Map("entity" -> new JSONObject(entity).toString())
+ Map("entity" -> new JSONObject(entity).toString())
}
- def generateCustomEntityJSONString(): String = {
+ /* --------------------------- */
+
+ def generateTrivialEntity(name: String = null): String = {
+
+ val nameKey = if (name != null) "name" else "noname"
+ val nameVal = if (name != null) name else Utils.generateRandomInt(1,10000000).toString
+
+ val entity: Map[String, String] = Map(
+ nameKey -> nameVal
+ )
+
+ new JSONObject(entity).toString()
+ }
- var entity: Map[String, String] = Map(
- // "name" -> "fdsa",
+ def generateBasicEntity(name: String = null): String = {
+
+ val nameKey = if (name != null) "name" else "noname"
+ val nameVal = if (name != null) name else Utils.generateRandomInt(1,10000000).toString
+
+ val entity: Map[String, String] = Map(
+ nameKey -> nameVal,
"address" -> Utils.generateRandomInt(10000, 1000000).toString,
"city" -> Utils.generateRandomInt(10000, 1000000).toString,
"state" -> Utils.generateRandomInt(10000, 1000000).toString,
@@ -105,9 +121,39 @@
"bar" -> Utils.generateRandomInt(120, 350).toString,
"tables" -> Utils.generateRandomInt(50, 100000).toString,
"outdoor" -> Utils.generateRandomInt(50, 100000).toString
- )
-
- return new JSONObject(entity).toString();
-
- }
+ )
+
+ new JSONObject(entity).toString()
+ }
+
+ def generateEntity(entityType: String = EntityType.Basic, entityName: String = null): String = {
+ val entity: String =
+ if (entityType == EntityType.Trivial)
+ generateTrivialEntity(entityName)
+ else // default is basic
+ generateBasicEntity(entityName)
+
+ entity
+ }
+
+ def generateUserEntity(userId: String = "user" + System.currentTimeMillis().toString): String = {
+
+ val entity: Map[String, Any] = Map(
+ "username" -> userId,
+ "profileId" -> Utils.generateRandomInt(10000, 1000000),
+ "displayName" -> Utils.generateRandomInt(10000, 1000000).toString,
+ "showAge" -> Utils.generateRandomInt(0, 1),
+ "ethnicity" -> Utils.generateRandomInt(1, 15),
+ "relationshipStatus" -> Utils.generateRandomInt(1, 4),
+ "headline" -> "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
+ "aboutMe" -> "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
+ "age" -> Utils.generateRandomInt(18, 65),
+ "height" -> Utils.generateRandomInt(48, 84),
+ "weight" -> Utils.generateRandomInt(120, 350),
+ "seen" -> Utils.generateRandomInt(50, 100000).toString,
+ "password" -> "password"
+ )
+
+ new JSONObject(entity).toString()
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
index 97be06a..63091a7 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
@@ -20,7 +20,8 @@
import java.util.UUID
import java.util.concurrent.atomic.{AtomicInteger, AtomicLong}
import io.gatling.core.Predef._
- import org.apache.usergrid.settings.Utils
+ import org.apache.usergrid.helpers.Utils
+ import org.apache.usergrid.settings.Settings
import scala.collection.mutable.ArrayBuffer
import scala.util.Random
@@ -30,29 +31,27 @@
var userArray: ArrayBuffer[Map[String, String]] = new ArrayBuffer[Map[String, String]]
for (userCount <- 1 to numUsers) {
var user: Map[String, String] = EntityDataGenerator.generateUser(userCount.toString)
- var geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
- var blockLists: Map[String, String] = EntityDataGenerator.generateBlockUserLists(numUsers)
+ val geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
+ val blockLists: Map[String, String] = EntityDataGenerator.generateBlockUserLists(numUsers)
user = user ++ geolocation ++ blockLists
userArray += user
}
- return userArray.toArray
- }
-
+ userArray.toArray
+ }
/**
* Generate users forever
+ * @param seed
* @param radius
* @param centerLatitude
* @param centerLongitude
* @return
*/
- def generateUserWithGeolocationFeederInfinite(seed:Int,radius: Double, centerLatitude: Double, centerLongitude: Double, maxPossible: Int): Iterator[Map[String, String]] = {
- val userFeeder = Iterator.from(seed).map(i=>generateUserData(i.toString, radius, centerLatitude, centerLongitude))
- return userFeeder
-
+ def generateUserWithGeolocationFeederInfinite(seed:Int,radius: Double, centerLatitude: Double, centerLongitude: Double): Iterator[Map[String, String]] = {
+ Iterator.from(seed).map(i=>generateUserData(i.toString, radius, centerLatitude, centerLongitude))
}
/**
@@ -64,14 +63,11 @@
*/
def generateUserData(id: String, radius: Double, centerLatitude: Double, centerLongitude: Double): Map[String, String] = {
+ val user: Map[String, String] = EntityDataGenerator.generateUser(id)
+ val geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
+ val blockLists: Map[String, String] = EntityDataGenerator.generateBlockUserLists(1)
- var user: Map[String, String] = EntityDataGenerator.generateUser(id)
- var geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
- var blockLists: Map[String, String] = EntityDataGenerator.generateBlockUserLists(1)
-
- user = user ++ geolocation ++ blockLists
-
- return user
+ user ++ geolocation ++ blockLists
}
@@ -82,14 +78,13 @@
// always return true as this feeder can be polled infinitively
override def hasNext = true
- override def next: Map[String, String] = {
- var geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
+ override def next(): Map[String, String] = {
+ val geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
Map("latitude" -> geolocation("latitude"), "longitude" -> geolocation("longitude"))
}
}
- return geolocationFeeder
-
+ geolocationFeeder
}
def generateGeolocationWithQueryFeeder(radius: Double, centerLatitude: Double, centerLongitude: Double): Feeder[String] = {
@@ -99,36 +94,33 @@
// always return true as this feeder can be polled infinitively
override def hasNext = true
- override def next: Map[String, String] = {
- var geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
- var queryParams = Utils.generateRandomQueryString
+ override def next(): Map[String, String] = {
+ val geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
+ val queryParams = Utils.generateRandomQueryString
Map("latitude" -> geolocation("latitude"), "longitude" -> geolocation("longitude"), "queryParams" -> queryParams)
}
}
- return geolocationFeeder
-
+ geolocationFeeder
}
def generateUserConnectionFeeder(numUsers: Int): Feeder[String] = {
val userIdFeeder = new Feeder[String] {
- // always return true as this feeder can be polled infinitively
+ // always return true as this feeder can be polled infinitely
override def hasNext = true
- override def next: Map[String, String] = {
+ override def next(): Map[String, String] = {
Map("user1" -> "user".concat(Utils.generateRandomInt(1, numUsers).toString), "user2" -> "user".concat(Utils.generateRandomInt(1, numUsers).toString))
}
}
- return userIdFeeder
-
+ userIdFeeder
}
def generateEntityNameFeeder(prefix: String, numEntities: Int): Iterator[Map[String, String]] = {
- val itr = Iterator.from(1).map(i=> Map("entityName" -> prefix.concat(i.toString).concat(UUID.randomUUID().toString)))
- return itr
+ Iterator.from(1).map(i=> Map("entityName" -> prefix.concat(i.toString).concat(UUID.randomUUID().toString)))
}
def generateRandomEntityNameFeeder(prefix: String, numEntities: Int): Array[Map[String, String]] = {
@@ -139,8 +131,7 @@
nameArray += Map("entityName" -> prefix.concat(Utils.generateRandomInt(0, 100000000).toString))
}
- return nameArray.toArray
-
+ nameArray.toArray
}
@@ -166,32 +157,57 @@
*/
def generateCustomEntityPutInfinite(seed:Int): Iterator[Map[String, Any]] = {
//val rod = "rod"
- val userFeeder = Iterator.from(seed).map(i=>Map("entityName" -> i.toString.concat(UUID.randomUUID().toString), "entity" -> EntityDataGenerator.generateCustomEntityJSONString()));
+ val userFeeder = Iterator.from(seed).map(i=>Map("entityName" -> i.toString.concat(UUID.randomUUID().toString), "entity" -> EntityDataGenerator.generateCustomEntity()));
return userFeeder
}
- def testFeeder(seed:Int): Iterator[Map[String, String]] = {
- var entity: Map[String, String] = EntityDataGenerator.generateCustomEntity();
- Map("entity" -> entity)
- val userFeeder = Iterator.from(seed).map(i=>EntityDataGenerator.generateCustomEntity())
- return userFeeder
- }
+ /*
+ def testFeeder(seed:Int): Iterator[Map[String, String]] = {
+ var entity: Map[String, String] = EntityDataGenerator.generateCustomEntity();
+ Map("entity" -> entity)
+ val userFeeder = Iterator.from(seed).map(i=>EntityDataGenerator.generateCustomEntity())
+ return userFeeder
+ }
-/*
- def testFeeder(): Array[Map[String, String]] = {
- var userArray: ArrayBuffer[Map[String, String]] = new ArrayBuffer[Map[String, String]]
- for (userCount <- 1 to numUsers) {
- var user: Map[String, String] = EntityDataGenerator.generateUser(userCount.toString)
- var geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
- var blockLists: Map[String, String] = EntityDataGenerator.generateBlockUserLists(numUsers)
+ def testFeeder(): Array[Map[String, String]] = {
+ var userArray: ArrayBuffer[Map[String, String]] = new ArrayBuffer[Map[String, String]]
+ for (userCount <- 1 to numUsers) {
+ var user: Map[String, String] = EntityDataGenerator.generateUser(userCount.toString)
+ var geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
+ var blockLists: Map[String, String] = EntityDataGenerator.generateBlockUserLists(numUsers)
- user = user ++ geolocation ++ blockLists
+ user = user ++ geolocation ++ blockLists
- userArray += user
- }
- return userArray.toArray
- }
+ userArray += user
+ }
+ return userArray.toArray
+ }
+ */
+
+ /* --------------------------- */
+
+ /**
+ * Generate specified number of custom entities
+ * @param numEntities Number of entities to create
+ * @param entityType Type of entity to create
+ * @param prefix Prefix for entities
+ * @return
*/
+ def generateCustomEntityFeeder(numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Array[String] = {
+ //val entityFeeder = Iterator.from(1).take(numEntities).map(i=>Map("entity" -> EntityDataGenerator.generateNamedCustomEntityJSONString(prefix.concat(i.toString()))))
+ var entityArray: ArrayBuffer[String] = new ArrayBuffer[String]
+ for (i <- seed to numEntities+seed-1) {
+ var entity = EntityDataGenerator.generateEntity(entityType, prefix.concat(i.toString))
+ entityArray += entity
+ }
+
+ entityArray.toArray
+ }
+
+ def generateCustomEntityInfiniteFeeder(seed: Int = Settings.entitySeed, entityType: String = Settings.entityType, prefix: String = Settings.entityPrefix): Iterator[String] = {
+ Iterator.from(seed).map(i=>EntityDataGenerator.generateEntity(entityType, prefix.concat(i.toString)))
+ }
+
}
[04/21] incubator-usergrid git commit: USERGRID-871: refactor Gatling
load testing code
Posted by to...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.male.first.txt
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.male.first.txt b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.male.first.txt
new file mode 100644
index 0000000..c31b458
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.male.first.txt
@@ -0,0 +1,1219 @@
+JAMES 3.318 3.318 1
+JOHN 3.271 6.589 2
+ROBERT 3.143 9.732 3
+MICHAEL 2.629 12.361 4
+WILLIAM 2.451 14.812 5
+DAVID 2.363 17.176 6
+RICHARD 1.703 18.878 7
+CHARLES 1.523 20.401 8
+JOSEPH 1.404 21.805 9
+THOMAS 1.380 23.185 10
+CHRISTOPHER 1.035 24.220 11
+DANIEL 0.974 25.194 12
+PAUL 0.948 26.142 13
+MARK 0.938 27.081 14
+DONALD 0.931 28.012 15
+GEORGE 0.927 28.939 16
+KENNETH 0.826 29.766 17
+STEVEN 0.780 30.546 18
+EDWARD 0.779 31.325 19
+BRIAN 0.736 32.061 20
+RONALD 0.725 32.787 21
+ANTHONY 0.721 33.508 22
+KEVIN 0.671 34.179 23
+JASON 0.660 34.839 24
+MATTHEW 0.657 35.496 25
+GARY 0.650 36.147 26
+TIMOTHY 0.640 36.786 27
+JOSE 0.613 37.399 28
+LARRY 0.598 37.997 29
+JEFFREY 0.591 38.588 30
+FRANK 0.581 39.169 31
+SCOTT 0.546 39.715 32
+ERIC 0.544 40.259 33
+STEPHEN 0.540 40.799 34
+ANDREW 0.537 41.335 35
+RAYMOND 0.488 41.824 36
+GREGORY 0.441 42.265 37
+JOSHUA 0.435 42.700 38
+JERRY 0.432 43.132 39
+DENNIS 0.415 43.547 40
+WALTER 0.399 43.946 41
+PATRICK 0.389 44.335 42
+PETER 0.381 44.716 43
+HAROLD 0.371 45.087 44
+DOUGLAS 0.367 45.454 45
+HENRY 0.365 45.819 46
+CARL 0.346 46.165 47
+ARTHUR 0.335 46.500 48
+RYAN 0.328 46.828 49
+ROGER 0.322 47.150 50
+JOE 0.321 47.471 51
+JUAN 0.316 47.786 52
+JACK 0.315 48.102 53
+ALBERT 0.314 48.415 54
+JONATHAN 0.313 48.729 55
+JUSTIN 0.311 49.040 56
+TERRY 0.311 49.351 57
+GERALD 0.309 49.660 58
+KEITH 0.308 49.968 59
+SAMUEL 0.306 50.274 60
+WILLIE 0.302 50.576 61
+RALPH 0.282 50.859 62
+LAWRENCE 0.282 51.141 63
+NICHOLAS 0.275 51.415 64
+ROY 0.273 51.688 65
+BENJAMIN 0.270 51.958 66
+BRUCE 0.263 52.221 67
+BRANDON 0.260 52.480 68
+ADAM 0.259 52.740 69
+HARRY 0.251 52.991 70
+FRED 0.251 53.241 71
+WAYNE 0.249 53.490 72
+BILLY 0.248 53.738 73
+STEVE 0.246 53.984 74
+LOUIS 0.243 54.227 75
+JEREMY 0.242 54.469 76
+AARON 0.240 54.710 77
+RANDY 0.232 54.942 78
+HOWARD 0.230 55.172 79
+EUGENE 0.230 55.402 80
+CARLOS 0.229 55.630 81
+RUSSELL 0.224 55.854 82
+BOBBY 0.223 56.077 83
+VICTOR 0.222 56.299 84
+MARTIN 0.216 56.515 85
+ERNEST 0.215 56.730 86
+PHILLIP 0.213 56.942 87
+TODD 0.213 57.155 88
+JESSE 0.209 57.364 89
+CRAIG 0.206 57.570 90
+ALAN 0.204 57.774 91
+SHAWN 0.200 57.973 92
+CLARENCE 0.197 58.170 93
+SEAN 0.197 58.368 94
+PHILIP 0.197 58.565 95
+CHRIS 0.197 58.761 96
+JOHNNY 0.195 58.957 97
+EARL 0.193 59.149 98
+JIMMY 0.191 59.340 99
+ANTONIO 0.190 59.531 100
+DANNY 0.190 59.720 101
+BRYAN 0.190 59.910 102
+TONY 0.190 60.100 103
+LUIS 0.189 60.289 104
+MIKE 0.189 60.478 105
+STANLEY 0.186 60.665 106
+LEONARD 0.186 60.850 107
+NATHAN 0.185 61.035 108
+DALE 0.184 61.219 109
+MANUEL 0.181 61.400 110
+RODNEY 0.180 61.581 111
+CURTIS 0.180 61.761 112
+NORMAN 0.177 61.938 113
+ALLEN 0.174 62.112 114
+MARVIN 0.171 62.283 115
+VINCENT 0.168 62.450 116
+GLENN 0.167 62.617 117
+JEFFERY 0.166 62.783 118
+TRAVIS 0.166 62.949 119
+JEFF 0.166 63.114 120
+CHAD 0.165 63.279 121
+JACOB 0.165 63.444 122
+LEE 0.162 63.606 123
+MELVIN 0.162 63.768 124
+ALFRED 0.162 63.930 125
+KYLE 0.160 64.090 126
+FRANCIS 0.160 64.250 127
+BRADLEY 0.159 64.409 128
+JESUS 0.155 64.564 129
+HERBERT 0.155 64.719 130
+FREDERICK 0.154 64.873 131
+RAY 0.153 65.026 132
+JOEL 0.152 65.177 133
+EDWIN 0.148 65.326 134
+DON 0.145 65.471 135
+EDDIE 0.144 65.615 136
+RICKY 0.141 65.756 137
+TROY 0.138 65.895 138
+RANDALL 0.138 66.032 139
+BARRY 0.134 66.167 140
+ALEXANDER 0.132 66.299 141
+BERNARD 0.127 66.427 142
+MARIO 0.125 66.552 143
+LEROY 0.125 66.676 144
+FRANCISCO 0.124 66.801 145
+MARCUS 0.124 66.925 146
+MICHEAL 0.123 67.048 147
+THEODORE 0.123 67.171 148
+CLIFFORD 0.123 67.293 149
+MIGUEL 0.122 67.415 150
+OSCAR 0.122 67.538 151
+JAY 0.118 67.656 152
+JIM 0.118 67.773 153
+TOM 0.117 67.890 154
+CALVIN 0.115 68.006 155
+ALEX 0.115 68.120 156
+JON 0.115 68.235 157
+RONNIE 0.113 68.348 158
+BILL 0.112 68.461 159
+LLOYD 0.112 68.573 160
+TOMMY 0.112 68.685 161
+LEON 0.112 68.797 162
+DEREK 0.112 68.908 163
+WARREN 0.110 69.018 164
+DARRELL 0.108 69.126 165
+JEROME 0.108 69.234 166
+FLOYD 0.107 69.340 167
+LEO 0.106 69.446 168
+ALVIN 0.105 69.551 169
+TIM 0.104 69.656 170
+WESLEY 0.104 69.760 171
+GORDON 0.104 69.864 172
+DEAN 0.104 69.968 173
+GREG 0.104 70.071 174
+JORGE 0.104 70.175 175
+DUSTIN 0.103 70.278 176
+PEDRO 0.103 70.381 177
+DERRICK 0.103 70.484 178
+DAN 0.101 70.585 179
+LEWIS 0.099 70.684 180
+ZACHARY 0.099 70.782 181
+COREY 0.098 70.880 182
+HERMAN 0.097 70.977 183
+MAURICE 0.097 71.074 184
+VERNON 0.097 71.171 185
+ROBERTO 0.097 71.268 186
+CLYDE 0.095 71.363 187
+GLEN 0.094 71.457 188
+HECTOR 0.094 71.551 189
+SHANE 0.093 71.645 190
+RICARDO 0.093 71.738 191
+SAM 0.092 71.830 192
+RICK 0.091 71.921 193
+LESTER 0.091 72.011 194
+BRENT 0.090 72.102 195
+RAMON 0.090 72.192 196
+CHARLIE 0.090 72.281 197
+TYLER 0.089 72.371 198
+GILBERT 0.089 72.460 199
+GENE 0.087 72.547 200
+MARC 0.087 72.634 201
+REGINALD 0.084 72.717 202
+RUBEN 0.082 72.800 203
+BRETT 0.082 72.882 204
+ANGEL 0.082 72.964 205
+NATHANIEL 0.081 73.045 206
+RAFAEL 0.081 73.126 207
+LESLIE 0.081 73.207 208
+EDGAR 0.080 73.287 209
+MILTON 0.080 73.367 210
+RAUL 0.079 73.446 211
+BEN 0.078 73.524 212
+CHESTER 0.078 73.602 213
+CECIL 0.078 73.680 214
+DUANE 0.077 73.757 215
+FRANKLIN 0.077 73.834 216
+ANDRE 0.076 73.910 217
+ELMER 0.074 73.984 218
+BRAD 0.073 74.057 219
+GABRIEL 0.073 74.130 220
+RON 0.072 74.202 221
+MITCHELL 0.072 74.274 222
+ROLAND 0.072 74.347 223
+ARNOLD 0.072 74.419 224
+HARVEY 0.072 74.491 225
+JARED 0.071 74.562 226
+ADRIAN 0.069 74.631 227
+KARL 0.069 74.699 228
+CORY 0.068 74.767 229
+CLAUDE 0.068 74.835 230
+ERIK 0.068 74.903 231
+DARRYL 0.067 74.970 232
+JAMIE 0.066 75.037 233
+NEIL 0.066 75.102 234
+JESSIE 0.065 75.168 235
+CHRISTIAN 0.065 75.233 236
+JAVIER 0.065 75.297 237
+FERNANDO 0.065 75.362 238
+CLINTON 0.065 75.427 239
+TED 0.064 75.491 240
+MATHEW 0.064 75.555 241
+TYRONE 0.064 75.619 242
+DARREN 0.064 75.683 243
+LONNIE 0.064 75.746 244
+LANCE 0.063 75.810 245
+CODY 0.063 75.873 246
+JULIO 0.063 75.936 247
+KELLY 0.063 75.998 248
+KURT 0.062 76.061 249
+ALLAN 0.061 76.122 250
+NELSON 0.061 76.182 251
+GUY 0.060 76.243 252
+CLAYTON 0.060 76.303 253
+HUGH 0.060 76.363 254
+MAX 0.059 76.421 255
+DWAYNE 0.059 76.480 256
+DWIGHT 0.058 76.538 257
+ARMANDO 0.058 76.596 258
+FELIX 0.058 76.654 259
+JIMMIE 0.058 76.711 260
+EVERETT 0.057 76.768 261
+JORDAN 0.056 76.824 262
+IAN 0.056 76.880 263
+WALLACE 0.056 76.936 264
+KEN 0.055 76.991 265
+BOB 0.055 77.047 266
+JAIME 0.055 77.102 267
+CASEY 0.054 77.156 268
+ALFREDO 0.054 77.210 269
+ALBERTO 0.053 77.263 270
+DAVE 0.053 77.316 271
+IVAN 0.053 77.369 272
+JOHNNIE 0.052 77.421 273
+SIDNEY 0.052 77.474 274
+BYRON 0.052 77.526 275
+JULIAN 0.052 77.578 276
+ISAAC 0.051 77.629 277
+MORRIS 0.051 77.680 278
+CLIFTON 0.050 77.730 279
+WILLARD 0.050 77.780 280
+DARYL 0.050 77.831 281
+ROSS 0.050 77.880 282
+VIRGIL 0.049 77.929 283
+ANDY 0.049 77.979 284
+MARSHALL 0.049 78.028 285
+SALVADOR 0.049 78.077 286
+PERRY 0.049 78.126 287
+KIRK 0.049 78.175 288
+SERGIO 0.049 78.224 289
+MARION 0.048 78.272 290
+TRACY 0.048 78.320 291
+SETH 0.048 78.368 292
+KENT 0.048 78.416 293
+TERRANCE 0.048 78.464 294
+RENE 0.048 78.512 295
+EDUARDO 0.047 78.559 296
+TERRENCE 0.047 78.606 297
+ENRIQUE 0.046 78.652 298
+FREDDIE 0.046 78.698 299
+WADE 0.045 78.743 300
+AUSTIN 0.044 78.786 301
+STUART 0.044 78.830 302
+FREDRICK 0.043 78.873 303
+ARTURO 0.043 78.917 304
+ALEJANDRO 0.043 78.960 305
+JACKIE 0.043 79.002 306
+JOEY 0.043 79.045 307
+NICK 0.043 79.088 308
+LUTHER 0.043 79.130 309
+WENDELL 0.042 79.172 310
+JEREMIAH 0.042 79.215 311
+EVAN 0.042 79.257 312
+JULIUS 0.042 79.298 313
+DANA 0.042 79.340 314
+DONNIE 0.041 79.381 315
+OTIS 0.041 79.422 316
+SHANNON 0.040 79.462 317
+TREVOR 0.040 79.503 318
+OLIVER 0.040 79.543 319
+LUKE 0.040 79.583 320
+HOMER 0.040 79.623 321
+GERARD 0.040 79.663 322
+DOUG 0.040 79.703 323
+KENNY 0.039 79.742 324
+HUBERT 0.039 79.782 325
+ANGELO 0.039 79.821 326
+SHAUN 0.039 79.859 327
+LYLE 0.038 79.898 328
+MATT 0.038 79.936 329
+LYNN 0.038 79.974 330
+ALFONSO 0.038 80.012 331
+ORLANDO 0.037 80.049 332
+REX 0.037 80.086 333
+CARLTON 0.037 80.123 334
+ERNESTO 0.037 80.160 335
+CAMERON 0.037 80.197 336
+NEAL 0.037 80.233 337
+PABLO 0.036 80.270 338
+LORENZO 0.036 80.306 339
+OMAR 0.036 80.342 340
+WILBUR 0.036 80.378 341
+BLAKE 0.036 80.414 342
+GRANT 0.036 80.450 343
+HORACE 0.036 80.486 344
+RODERICK 0.036 80.521 345
+KERRY 0.036 80.557 346
+ABRAHAM 0.035 80.592 347
+WILLIS 0.035 80.627 348
+RICKEY 0.035 80.662 349
+JEAN 0.035 80.696 350
+IRA 0.035 80.731 351
+ANDRES 0.034 80.766 352
+CESAR 0.034 80.800 353
+JOHNATHAN 0.034 80.834 354
+MALCOLM 0.034 80.868 355
+RUDOLPH 0.034 80.902 356
+DAMON 0.034 80.936 357
+KELVIN 0.034 80.970 358
+RUDY 0.034 81.004 359
+PRESTON 0.034 81.037 360
+ALTON 0.033 81.071 361
+ARCHIE 0.033 81.104 362
+MARCO 0.033 81.137 363
+WM 0.033 81.170 364
+PETE 0.032 81.202 365
+RANDOLPH 0.032 81.234 366
+GARRY 0.032 81.267 367
+GEOFFREY 0.032 81.299 368
+JONATHON 0.032 81.331 369
+FELIPE 0.032 81.363 370
+BENNIE 0.032 81.395 371
+GERARDO 0.032 81.427 372
+ED 0.032 81.458 373
+DOMINIC 0.032 81.490 374
+ROBIN 0.032 81.522 375
+LOREN 0.032 81.553 376
+DELBERT 0.031 81.585 377
+COLIN 0.031 81.616 378
+GUILLERMO 0.031 81.647 379
+EARNEST 0.031 81.678 380
+LUCAS 0.031 81.709 381
+BENNY 0.030 81.739 382
+NOEL 0.030 81.769 383
+SPENCER 0.030 81.799 384
+RODOLFO 0.030 81.828 385
+MYRON 0.030 81.858 386
+EDMUND 0.030 81.887 387
+GARRETT 0.029 81.917 388
+SALVATORE 0.029 81.946 389
+CEDRIC 0.029 81.975 390
+LOWELL 0.029 82.004 391
+GREGG 0.029 82.032 392
+SHERMAN 0.028 82.061 393
+WILSON 0.028 82.089 394
+DEVIN 0.028 82.117 395
+SYLVESTER 0.028 82.145 396
+KIM 0.028 82.173 397
+ROOSEVELT 0.028 82.201 398
+ISRAEL 0.028 82.229 399
+JERMAINE 0.028 82.257 400
+FORREST 0.027 82.284 401
+WILBERT 0.027 82.310 402
+LELAND 0.027 82.337 403
+SIMON 0.026 82.363 404
+GUADALUPE 0.026 82.390 405
+CLARK 0.026 82.416 406
+IRVING 0.026 82.442 407
+CARROLL 0.026 82.468 408
+BRYANT 0.026 82.494 409
+OWEN 0.026 82.519 410
+RUFUS 0.025 82.545 411
+WOODROW 0.025 82.570 412
+SAMMY 0.025 82.595 413
+KRISTOPHER 0.025 82.620 414
+MACK 0.025 82.645 415
+LEVI 0.025 82.670 416
+MARCOS 0.025 82.695 417
+GUSTAVO 0.025 82.720 418
+JAKE 0.025 82.744 419
+LIONEL 0.024 82.769 420
+MARTY 0.024 82.793 421
+TAYLOR 0.024 82.817 422
+ELLIS 0.024 82.842 423
+DALLAS 0.024 82.866 424
+GILBERTO 0.024 82.890 425
+CLINT 0.024 82.914 426
+NICOLAS 0.024 82.938 427
+LAURENCE 0.024 82.962 428
+ISMAEL 0.024 82.985 429
+ORVILLE 0.024 83.009 430
+DREW 0.024 83.033 431
+JODY 0.024 83.056 432
+ERVIN 0.023 83.080 433
+DEWEY 0.023 83.103 434
+AL 0.023 83.126 435
+WILFRED 0.023 83.150 436
+JOSH 0.023 83.173 437
+HUGO 0.023 83.196 438
+IGNACIO 0.023 83.219 439
+CALEB 0.023 83.241 440
+TOMAS 0.023 83.264 441
+SHELDON 0.023 83.287 442
+ERICK 0.023 83.310 443
+FRANKIE 0.023 83.332 444
+STEWART 0.022 83.354 445
+DOYLE 0.022 83.377 446
+DARREL 0.022 83.399 447
+ROGELIO 0.022 83.421 448
+TERENCE 0.022 83.443 449
+SANTIAGO 0.022 83.465 450
+ALONZO 0.022 83.487 451
+ELIAS 0.022 83.508 452
+BERT 0.022 83.530 453
+ELBERT 0.022 83.552 454
+RAMIRO 0.022 83.573 455
+CONRAD 0.022 83.595 456
+PAT 0.022 83.616 457
+NOAH 0.022 83.638 458
+GRADY 0.021 83.659 459
+PHIL 0.021 83.681 460
+CORNELIUS 0.021 83.702 461
+LAMAR 0.021 83.723 462
+ROLANDO 0.021 83.744 463
+CLAY 0.021 83.765 464
+PERCY 0.021 83.786 465
+DEXTER 0.021 83.806 466
+BRADFORD 0.021 83.827 467
+MERLE 0.021 83.848 468
+DARIN 0.020 83.868 469
+AMOS 0.020 83.888 470
+TERRELL 0.020 83.909 471
+MOSES 0.020 83.929 472
+IRVIN 0.020 83.949 473
+SAUL 0.020 83.968 474
+ROMAN 0.020 83.988 475
+DARNELL 0.020 84.008 476
+RANDAL 0.020 84.027 477
+TOMMIE 0.020 84.047 478
+TIMMY 0.019 84.066 479
+DARRIN 0.019 84.086 480
+WINSTON 0.019 84.105 481
+BRENDAN 0.019 84.124 482
+TOBY 0.019 84.144 483
+VAN 0.019 84.163 484
+ABEL 0.019 84.182 485
+DOMINICK 0.019 84.201 486
+BOYD 0.019 84.220 487
+COURTNEY 0.019 84.240 488
+JAN 0.019 84.259 489
+EMILIO 0.019 84.277 490
+ELIJAH 0.019 84.296 491
+CARY 0.019 84.315 492
+DOMINGO 0.019 84.334 493
+SANTOS 0.019 84.353 494
+AUBREY 0.019 84.372 495
+EMMETT 0.019 84.390 496
+MARLON 0.019 84.409 497
+EMANUEL 0.019 84.428 498
+JERALD 0.019 84.446 499
+EDMOND 0.019 84.465 500
+EMIL 0.019 84.483 501
+DEWAYNE 0.018 84.502 502
+WILL 0.018 84.520 503
+OTTO 0.018 84.538 504
+TEDDY 0.018 84.556 505
+REYNALDO 0.018 84.574 506
+BRET 0.018 84.592 507
+MORGAN 0.018 84.610 508
+JESS 0.018 84.628 509
+TRENT 0.018 84.646 510
+HUMBERTO 0.018 84.664 511
+EMMANUEL 0.018 84.681 512
+STEPHAN 0.018 84.699 513
+LOUIE 0.018 84.717 514
+VICENTE 0.017 84.734 515
+LAMONT 0.017 84.751 516
+STACY 0.017 84.769 517
+GARLAND 0.017 84.786 518
+MILES 0.017 84.803 519
+MICAH 0.017 84.820 520
+EFRAIN 0.017 84.837 521
+BILLIE 0.017 84.854 522
+LOGAN 0.017 84.871 523
+HEATH 0.017 84.887 524
+RODGER 0.017 84.904 525
+HARLEY 0.017 84.921 526
+DEMETRIUS 0.017 84.937 527
+ETHAN 0.017 84.954 528
+ELDON 0.017 84.970 529
+ROCKY 0.016 84.987 530
+PIERRE 0.016 85.003 531
+JUNIOR 0.016 85.020 532
+FREDDY 0.016 85.036 533
+ELI 0.016 85.052 534
+BRYCE 0.016 85.068 535
+ANTOINE 0.016 85.084 536
+ROBBIE 0.016 85.100 537
+KENDALL 0.016 85.116 538
+ROYCE 0.016 85.132 539
+STERLING 0.016 85.148 540
+MICKEY 0.016 85.164 541
+CHASE 0.016 85.180 542
+GROVER 0.016 85.196 543
+ELTON 0.016 85.212 544
+CLEVELAND 0.016 85.228 545
+DYLAN 0.016 85.243 546
+CHUCK 0.016 85.259 547
+DAMIAN 0.016 85.274 548
+REUBEN 0.015 85.290 549
+STAN 0.015 85.305 550
+AUGUST 0.015 85.321 551
+LEONARDO 0.015 85.336 552
+JASPER 0.015 85.351 553
+RUSSEL 0.015 85.367 554
+ERWIN 0.015 85.382 555
+BENITO 0.015 85.397 556
+HANS 0.015 85.412 557
+MONTE 0.015 85.427 558
+BLAINE 0.015 85.442 559
+ERNIE 0.015 85.456 560
+CURT 0.015 85.471 561
+QUENTIN 0.015 85.486 562
+AGUSTIN 0.015 85.500 563
+MURRAY 0.015 85.515 564
+JAMAL 0.014 85.529 565
+DEVON 0.014 85.544 566
+ADOLFO 0.014 85.558 567
+HARRISON 0.014 85.573 568
+TYSON 0.014 85.587 569
+BURTON 0.014 85.601 570
+BRADY 0.014 85.616 571
+ELLIOTT 0.014 85.630 572
+WILFREDO 0.014 85.644 573
+BART 0.014 85.658 574
+JARROD 0.014 85.672 575
+VANCE 0.014 85.686 576
+DENIS 0.014 85.700 577
+DAMIEN 0.014 85.714 578
+JOAQUIN 0.014 85.728 579
+HARLAN 0.014 85.742 580
+DESMOND 0.014 85.756 581
+ELLIOT 0.014 85.770 582
+DARWIN 0.014 85.783 583
+ASHLEY 0.014 85.797 584
+GREGORIO 0.014 85.811 585
+BUDDY 0.014 85.824 586
+XAVIER 0.013 85.838 587
+KERMIT 0.013 85.851 588
+ROSCOE 0.013 85.865 589
+ESTEBAN 0.013 85.878 590
+ANTON 0.013 85.891 591
+SOLOMON 0.013 85.904 592
+SCOTTY 0.013 85.917 593
+NORBERT 0.013 85.930 594
+ELVIN 0.013 85.943 595
+WILLIAMS 0.013 85.956 596
+NOLAN 0.013 85.969 597
+CAREY 0.013 85.982 598
+ROD 0.013 85.994 599
+QUINTON 0.013 86.007 600
+HAL 0.013 86.020 601
+BRAIN 0.013 86.033 602
+ROB 0.013 86.045 603
+ELWOOD 0.013 86.058 604
+KENDRICK 0.013 86.070 605
+DARIUS 0.013 86.083 606
+MOISES 0.013 86.096 607
+SON 0.012 86.108 608
+MARLIN 0.012 86.120 609
+FIDEL 0.012 86.133 610
+THADDEUS 0.012 86.145 611
+CLIFF 0.012 86.158 612
+MARCEL 0.012 86.170 613
+ALI 0.012 86.182 614
+JACKSON 0.012 86.195 615
+RAPHAEL 0.012 86.207 616
+BRYON 0.012 86.219 617
+ARMAND 0.012 86.231 618
+ALVARO 0.012 86.244 619
+JEFFRY 0.012 86.256 620
+DANE 0.012 86.268 621
+JOESPH 0.012 86.280 622
+THURMAN 0.012 86.292 623
+NED 0.012 86.304 624
+SAMMIE 0.012 86.316 625
+RUSTY 0.012 86.328 626
+MICHEL 0.012 86.339 627
+MONTY 0.012 86.351 628
+RORY 0.012 86.363 629
+FABIAN 0.012 86.374 630
+REGGIE 0.012 86.386 631
+MASON 0.012 86.397 632
+GRAHAM 0.012 86.409 633
+KRIS 0.011 86.420 634
+ISAIAH 0.011 86.432 635
+VAUGHN 0.011 86.443 636
+GUS 0.011 86.454 637
+AVERY 0.011 86.466 638
+LOYD 0.011 86.477 639
+DIEGO 0.011 86.488 640
+ALEXIS 0.011 86.499 641
+ADOLPH 0.011 86.511 642
+NORRIS 0.011 86.522 643
+MILLARD 0.011 86.533 644
+ROCCO 0.011 86.544 645
+GONZALO 0.011 86.555 646
+DERICK 0.011 86.566 647
+RODRIGO 0.011 86.577 648
+GERRY 0.011 86.588 649
+STACEY 0.011 86.599 650
+CARMEN 0.011 86.610 651
+WILEY 0.011 86.621 652
+RIGOBERTO 0.011 86.632 653
+ALPHONSO 0.011 86.643 654
+TY 0.011 86.654 655
+SHELBY 0.011 86.664 656
+RICKIE 0.011 86.675 657
+NOE 0.011 86.686 658
+VERN 0.010 86.696 659
+BOBBIE 0.010 86.707 660
+REED 0.010 86.717 661
+JEFFERSON 0.010 86.727 662
+ELVIS 0.010 86.738 663
+BERNARDO 0.010 86.748 664
+MAURICIO 0.010 86.758 665
+HIRAM 0.010 86.768 666
+DONOVAN 0.010 86.778 667
+BASIL 0.010 86.789 668
+RILEY 0.010 86.799 669
+OLLIE 0.010 86.809 670
+NICKOLAS 0.010 86.819 671
+MAYNARD 0.010 86.829 672
+SCOT 0.010 86.840 673
+VINCE 0.010 86.850 674
+QUINCY 0.010 86.860 675
+EDDY 0.010 86.870 676
+SEBASTIAN 0.010 86.880 677
+FEDERICO 0.010 86.890 678
+ULYSSES 0.010 86.900 679
+HERIBERTO 0.010 86.910 680
+DONNELL 0.010 86.920 681
+COLE 0.010 86.929 682
+DENNY 0.010 86.939 683
+DAVIS 0.010 86.949 684
+GAVIN 0.010 86.959 685
+EMERY 0.010 86.969 686
+WARD 0.010 86.979 687
+ROMEO 0.010 86.989 688
+JAYSON 0.010 86.998 689
+DION 0.010 87.008 690
+DANTE 0.010 87.018 691
+CLEMENT 0.010 87.028 692
+COY 0.010 87.037 693
+ODELL 0.010 87.047 694
+MAXWELL 0.010 87.057 695
+JARVIS 0.010 87.066 696
+BRUNO 0.010 87.076 697
+ISSAC 0.010 87.086 698
+MARY 0.009 87.095 699
+DUDLEY 0.009 87.104 700
+BROCK 0.009 87.114 701
+SANFORD 0.009 87.123 702
+COLBY 0.009 87.133 703
+CARMELO 0.009 87.142 704
+BARNEY 0.009 87.152 705
+NESTOR 0.009 87.161 706
+HOLLIS 0.009 87.170 707
+STEFAN 0.009 87.180 708
+DONNY 0.009 87.189 709
+ART 0.009 87.198 710
+LINWOOD 0.009 87.208 711
+BEAU 0.009 87.217 712
+WELDON 0.009 87.226 713
+GALEN 0.009 87.235 714
+ISIDRO 0.009 87.244 715
+TRUMAN 0.009 87.253 716
+DELMAR 0.009 87.262 717
+JOHNATHON 0.009 87.271 718
+SILAS 0.009 87.280 719
+FREDERIC 0.009 87.289 720
+DICK 0.009 87.298 721
+KIRBY 0.009 87.307 722
+IRWIN 0.009 87.316 723
+CRUZ 0.009 87.325 724
+MERLIN 0.009 87.334 725
+MERRILL 0.009 87.343 726
+CHARLEY 0.009 87.351 727
+MARCELINO 0.009 87.360 728
+LANE 0.009 87.369 729
+HARRIS 0.009 87.378 730
+CLEO 0.009 87.386 731
+CARLO 0.009 87.395 732
+TRENTON 0.009 87.404 733
+KURTIS 0.009 87.413 734
+HUNTER 0.009 87.421 735
+AURELIO 0.009 87.430 736
+WINFRED 0.009 87.438 737
+VITO 0.009 87.447 738
+COLLIN 0.009 87.456 739
+DENVER 0.009 87.464 740
+CARTER 0.009 87.473 741
+LEONEL 0.008 87.481 742
+EMORY 0.008 87.490 743
+PASQUALE 0.008 87.498 744
+MOHAMMAD 0.008 87.506 745
+MARIANO 0.008 87.514 746
+DANIAL 0.008 87.523 747
+BLAIR 0.008 87.531 748
+LANDON 0.008 87.539 749
+DIRK 0.008 87.548 750
+BRANDEN 0.008 87.556 751
+ADAN 0.008 87.564 752
+NUMBERS 0.008 87.572 753
+CLAIR 0.008 87.581 754
+BUFORD 0.008 87.589 755
+GERMAN 0.008 87.597 756
+BERNIE 0.008 87.605 757
+WILMER 0.008 87.613 758
+JOAN 0.008 87.621 759
+EMERSON 0.008 87.629 760
+ZACHERY 0.008 87.637 761
+FLETCHER 0.008 87.645 762
+JACQUES 0.008 87.653 763
+ERROL 0.008 87.661 764
+DALTON 0.008 87.669 765
+MONROE 0.008 87.676 766
+JOSUE 0.008 87.684 767
+DOMINIQUE 0.008 87.692 768
+EDWARDO 0.008 87.700 769
+BOOKER 0.008 87.708 770
+WILFORD 0.008 87.715 771
+SONNY 0.008 87.723 772
+SHELTON 0.008 87.731 773
+CARSON 0.008 87.739 774
+THERON 0.008 87.746 775
+RAYMUNDO 0.008 87.754 776
+DAREN 0.008 87.762 777
+TRISTAN 0.008 87.769 778
+HOUSTON 0.008 87.777 779
+ROBBY 0.008 87.785 780
+LINCOLN 0.008 87.792 781
+JAME 0.008 87.800 782
+GENARO 0.008 87.807 783
+GALE 0.008 87.815 784
+BENNETT 0.008 87.822 785
+OCTAVIO 0.008 87.830 786
+CORNELL 0.008 87.838 787
+LAVERNE 0.008 87.845 788
+HUNG 0.008 87.853 789
+ARRON 0.008 87.860 790
+ANTONY 0.008 87.868 791
+HERSCHEL 0.007 87.875 792
+ALVA 0.007 87.883 793
+GIOVANNI 0.007 87.890 794
+GARTH 0.007 87.897 795
+CYRUS 0.007 87.905 796
+CYRIL 0.007 87.912 797
+RONNY 0.007 87.920 798
+STEVIE 0.007 87.927 799
+LON 0.007 87.934 800
+FREEMAN 0.007 87.941 801
+ERIN 0.007 87.949 802
+DUNCAN 0.007 87.956 803
+KENNITH 0.007 87.963 804
+CARMINE 0.007 87.970 805
+AUGUSTINE 0.007 87.978 806
+YOUNG 0.007 87.985 807
+ERICH 0.007 87.992 808
+CHADWICK 0.007 87.999 809
+WILBURN 0.007 88.006 810
+RUSS 0.007 88.013 811
+REID 0.007 88.021 812
+MYLES 0.007 88.028 813
+ANDERSON 0.007 88.035 814
+MORTON 0.007 88.042 815
+JONAS 0.007 88.049 816
+FOREST 0.007 88.056 817
+MITCHEL 0.007 88.063 818
+MERVIN 0.007 88.070 819
+ZANE 0.007 88.077 820
+RICH 0.007 88.084 821
+JAMEL 0.007 88.091 822
+LAZARO 0.007 88.098 823
+ALPHONSE 0.007 88.105 824
+RANDELL 0.007 88.112 825
+MAJOR 0.007 88.119 826
+JOHNIE 0.007 88.126 827
+JARRETT 0.007 88.133 828
+BROOKS 0.007 88.140 829
+ARIEL 0.007 88.147 830
+ABDUL 0.007 88.154 831
+DUSTY 0.007 88.161 832
+LUCIANO 0.007 88.168 833
+LINDSEY 0.007 88.174 834
+TRACEY 0.007 88.181 835
+SEYMOUR 0.007 88.188 836
+SCOTTIE 0.007 88.195 837
+EUGENIO 0.007 88.202 838
+MOHAMMED 0.007 88.208 839
+SANDY 0.007 88.215 840
+VALENTIN 0.007 88.222 841
+CHANCE 0.007 88.228 842
+ARNULFO 0.007 88.235 843
+LUCIEN 0.007 88.242 844
+FERDINAND 0.007 88.248 845
+THAD 0.007 88.255 846
+EZRA 0.007 88.262 847
+SYDNEY 0.007 88.268 848
+ALDO 0.007 88.275 849
+RUBIN 0.006 88.281 850
+ROYAL 0.006 88.288 851
+MITCH 0.006 88.294 852
+EARLE 0.006 88.301 853
+ABE 0.006 88.307 854
+WYATT 0.006 88.314 855
+MARQUIS 0.006 88.320 856
+LANNY 0.006 88.326 857
+KAREEM 0.006 88.333 858
+JAMAR 0.006 88.339 859
+BORIS 0.006 88.346 860
+ISIAH 0.006 88.352 861
+EMILE 0.006 88.358 862
+ELMO 0.006 88.365 863
+ARON 0.006 88.371 864
+LEOPOLDO 0.006 88.377 865
+EVERETTE 0.006 88.384 866
+JOSEF 0.006 88.390 867
+GAIL 0.006 88.396 868
+ELOY 0.006 88.403 869
+DORIAN 0.006 88.409 870
+RODRICK 0.006 88.415 871
+REINALDO 0.006 88.421 872
+LUCIO 0.006 88.427 873
+JERROD 0.006 88.434 874
+WESTON 0.006 88.440 875
+HERSHEL 0.006 88.446 876
+BARTON 0.006 88.452 877
+PARKER 0.006 88.458 878
+LEMUEL 0.006 88.464 879
+LAVERN 0.006 88.470 880
+BURT 0.006 88.477 881
+JULES 0.006 88.483 882
+GIL 0.006 88.489 883
+ELISEO 0.006 88.495 884
+AHMAD 0.006 88.501 885
+NIGEL 0.006 88.507 886
+EFREN 0.006 88.513 887
+ANTWAN 0.006 88.519 888
+ALDEN 0.006 88.525 889
+MARGARITO 0.006 88.531 890
+COLEMAN 0.006 88.537 891
+REFUGIO 0.006 88.543 892
+DINO 0.006 88.549 893
+OSVALDO 0.006 88.555 894
+LES 0.006 88.560 895
+DEANDRE 0.006 88.566 896
+NORMAND 0.006 88.572 897
+KIETH 0.006 88.578 898
+IVORY 0.006 88.584 899
+ANDREA 0.006 88.590 900
+TREY 0.006 88.595 901
+NORBERTO 0.006 88.601 902
+NAPOLEON 0.006 88.607 903
+JEROLD 0.006 88.613 904
+FRITZ 0.006 88.619 905
+ROSENDO 0.006 88.624 906
+MILFORD 0.006 88.630 907
+SANG 0.006 88.636 908
+DEON 0.006 88.641 909
+CHRISTOPER 0.006 88.647 910
+ALFONZO 0.006 88.653 911
+LYMAN 0.006 88.658 912
+JOSIAH 0.006 88.664 913
+BRANT 0.006 88.670 914
+WILTON 0.006 88.675 915
+RICO 0.006 88.681 916
+JAMAAL 0.006 88.687 917
+DEWITT 0.006 88.692 918
+CAROL 0.006 88.698 919
+BRENTON 0.006 88.704 920
+YONG 0.006 88.709 921
+OLIN 0.006 88.715 922
+FOSTER 0.006 88.720 923
+FAUSTINO 0.006 88.726 924
+CLAUDIO 0.006 88.731 925
+JUDSON 0.006 88.737 926
+GINO 0.006 88.743 927
+EDGARDO 0.006 88.748 928
+BERRY 0.006 88.754 929
+ALEC 0.006 88.759 930
+TANNER 0.006 88.765 931
+JARRED 0.006 88.770 932
+DONN 0.006 88.776 933
+TRINIDAD 0.005 88.781 934
+TAD 0.005 88.787 935
+SHIRLEY 0.005 88.792 936
+PRINCE 0.005 88.798 937
+PORFIRIO 0.005 88.803 938
+ODIS 0.005 88.809 939
+MARIA 0.005 88.814 940
+LENARD 0.005 88.820 941
+CHAUNCEY 0.005 88.825 942
+CHANG 0.005 88.831 943
+TOD 0.005 88.836 944
+MEL 0.005 88.842 945
+MARCELO 0.005 88.847 946
+KORY 0.005 88.853 947
+AUGUSTUS 0.005 88.858 948
+KEVEN 0.005 88.864 949
+HILARIO 0.005 88.869 950
+BUD 0.005 88.874 951
+SAL 0.005 88.880 952
+ROSARIO 0.005 88.885 953
+ORVAL 0.005 88.891 954
+MAURO 0.005 88.896 955
+DANNIE 0.005 88.901 956
+ZACHARIAH 0.005 88.907 957
+OLEN 0.005 88.912 958
+ANIBAL 0.005 88.917 959
+MILO 0.005 88.923 960
+JED 0.005 88.928 961
+FRANCES 0.005 88.933 962
+THANH 0.005 88.939 963
+DILLON 0.005 88.944 964
+AMADO 0.005 88.949 965
+NEWTON 0.005 88.955 966
+CONNIE 0.005 88.960 967
+LENNY 0.005 88.965 968
+TORY 0.005 88.970 969
+RICHIE 0.005 88.975 970
+LUPE 0.005 88.981 971
+HORACIO 0.005 88.986 972
+BRICE 0.005 88.991 973
+MOHAMED 0.005 88.996 974
+DELMER 0.005 89.001 975
+DARIO 0.005 89.006 976
+REYES 0.005 89.012 977
+DEE 0.005 89.017 978
+MAC 0.005 89.022 979
+JONAH 0.005 89.027 980
+JERROLD 0.005 89.032 981
+ROBT 0.005 89.037 982
+HANK 0.005 89.042 983
+SUNG 0.005 89.047 984
+RUPERT 0.005 89.052 985
+ROLLAND 0.005 89.057 986
+KENTON 0.005 89.062 987
+DAMION 0.005 89.067 988
+CHI 0.005 89.072 989
+ANTONE 0.005 89.077 990
+WALDO 0.005 89.082 991
+FREDRIC 0.005 89.087 992
+BRADLY 0.005 89.092 993
+QUINN 0.005 89.097 994
+KIP 0.005 89.102 995
+BURL 0.005 89.107 996
+WALKER 0.005 89.112 997
+TYREE 0.005 89.117 998
+JEFFEREY 0.005 89.122 999
+AHMED 0.005 89.127 1000
+WILLY 0.005 89.132 1001
+STANFORD 0.005 89.137 1002
+OREN 0.005 89.142 1003
+NOBLE 0.005 89.146 1004
+MOSHE 0.005 89.151 1005
+MIKEL 0.005 89.156 1006
+ENOCH 0.005 89.161 1007
+BRENDON 0.005 89.166 1008
+QUINTIN 0.005 89.171 1009
+JAMISON 0.005 89.176 1010
+FLORENCIO 0.005 89.181 1011
+DARRICK 0.005 89.185 1012
+TOBIAS 0.005 89.190 1013
+MINH 0.005 89.195 1014
+HASSAN 0.005 89.200 1015
+GIUSEPPE 0.005 89.205 1016
+DEMARCUS 0.005 89.210 1017
+CLETUS 0.005 89.214 1018
+TYRELL 0.005 89.219 1019
+LYNDON 0.005 89.224 1020
+KEENAN 0.005 89.229 1021
+WERNER 0.005 89.234 1022
+THEO 0.005 89.238 1023
+GERALDO 0.005 89.243 1024
+LOU 0.005 89.248 1025
+COLUMBUS 0.005 89.253 1026
+CHET 0.005 89.257 1027
+BERTRAM 0.005 89.262 1028
+MARKUS 0.005 89.267 1029
+HUEY 0.005 89.271 1030
+HILTON 0.005 89.276 1031
+DWAIN 0.005 89.281 1032
+DONTE 0.005 89.285 1033
+TYRON 0.005 89.290 1034
+OMER 0.005 89.295 1035
+ISAIAS 0.005 89.299 1036
+HIPOLITO 0.005 89.304 1037
+FERMIN 0.005 89.309 1038
+CHUNG 0.005 89.313 1039
+ADALBERTO 0.005 89.318 1040
+VALENTINE 0.005 89.323 1041
+JAMEY 0.005 89.327 1042
+BO 0.005 89.332 1043
+BARRETT 0.005 89.336 1044
+WHITNEY 0.005 89.341 1045
+TEODORO 0.005 89.345 1046
+MCKINLEY 0.005 89.350 1047
+MAXIMO 0.005 89.355 1048
+GARFIELD 0.005 89.359 1049
+SOL 0.005 89.364 1050
+RALEIGH 0.005 89.368 1051
+LAWERENCE 0.005 89.373 1052
+ABRAM 0.005 89.377 1053
+RASHAD 0.004 89.382 1054
+KING 0.004 89.386 1055
+EMMITT 0.004 89.391 1056
+DARON 0.004 89.395 1057
+CHONG 0.004 89.400 1058
+SAMUAL 0.004 89.404 1059
+PARIS 0.004 89.409 1060
+OTHA 0.004 89.413 1061
+MIQUEL 0.004 89.418 1062
+LACY 0.004 89.422 1063
+EUSEBIO 0.004 89.426 1064
+DONG 0.004 89.431 1065
+DOMENIC 0.004 89.435 1066
+DARRON 0.004 89.440 1067
+BUSTER 0.004 89.444 1068
+ANTONIA 0.004 89.449 1069
+WILBER 0.004 89.453 1070
+RENATO 0.004 89.458 1071
+JC 0.004 89.462 1072
+HOYT 0.004 89.466 1073
+HAYWOOD 0.004 89.471 1074
+EZEKIEL 0.004 89.475 1075
+CHAS 0.004 89.480 1076
+FLORENTINO 0.004 89.484 1077
+ELROY 0.004 89.489 1078
+CLEMENTE 0.004 89.493 1079
+ARDEN 0.004 89.497 1080
+NEVILLE 0.004 89.502 1081
+KELLEY 0.004 89.506 1082
+EDISON 0.004 89.510 1083
+DESHAWN 0.004 89.515 1084
+CARROL 0.004 89.519 1085
+SHAYNE 0.004 89.523 1086
+NATHANIAL 0.004 89.528 1087
+JORDON 0.004 89.532 1088
+DANILO 0.004 89.536 1089
+CLAUD 0.004 89.541 1090
+VAL 0.004 89.545 1091
+SHERWOOD 0.004 89.549 1092
+RAYMON 0.004 89.554 1093
+RAYFORD 0.004 89.558 1094
+CRISTOBAL 0.004 89.562 1095
+AMBROSE 0.004 89.567 1096
+TITUS 0.004 89.571 1097
+HYMAN 0.004 89.575 1098
+FELTON 0.004 89.579 1099
+EZEQUIEL 0.004 89.584 1100
+ERASMO 0.004 89.588 1101
+STANTON 0.004 89.592 1102
+LONNY 0.004 89.596 1103
+LEN 0.004 89.601 1104
+IKE 0.004 89.605 1105
+MILAN 0.004 89.609 1106
+LINO 0.004 89.613 1107
+JAROD 0.004 89.617 1108
+HERB 0.004 89.622 1109
+ANDREAS 0.004 89.626 1110
+WALTON 0.004 89.630 1111
+RHETT 0.004 89.634 1112
+PALMER 0.004 89.638 1113
+JUDE 0.004 89.642 1114
+DOUGLASS 0.004 89.647 1115
+CORDELL 0.004 89.651 1116
+OSWALDO 0.004 89.655 1117
+ELLSWORTH 0.004 89.659 1118
+VIRGILIO 0.004 89.663 1119
+TONEY 0.004 89.667 1120
+NATHANAEL 0.004 89.671 1121
+DEL 0.004 89.675 1122
+BRITT 0.004 89.679 1123
+BENEDICT 0.004 89.684 1124
+MOSE 0.004 89.688 1125
+HONG 0.004 89.692 1126
+LEIGH 0.004 89.696 1127
+JOHNSON 0.004 89.700 1128
+ISREAL 0.004 89.704 1129
+GAYLE 0.004 89.708 1130
+GARRET 0.004 89.712 1131
+FAUSTO 0.004 89.716 1132
+ASA 0.004 89.720 1133
+ARLEN 0.004 89.724 1134
+ZACK 0.004 89.728 1135
+WARNER 0.004 89.732 1136
+MODESTO 0.004 89.736 1137
+FRANCESCO 0.004 89.740 1138
+MANUAL 0.004 89.744 1139
+JAE 0.004 89.748 1140
+GAYLORD 0.004 89.752 1141
+GASTON 0.004 89.756 1142
+FILIBERTO 0.004 89.759 1143
+DEANGELO 0.004 89.763 1144
+MICHALE 0.004 89.767 1145
+GRANVILLE 0.004 89.771 1146
+WES 0.004 89.775 1147
+MALIK 0.004 89.779 1148
+ZACKARY 0.004 89.783 1149
+TUAN 0.004 89.787 1150
+NICKY 0.004 89.790 1151
+ELDRIDGE 0.004 89.794 1152
+CRISTOPHER 0.004 89.798 1153
+CORTEZ 0.004 89.802 1154
+ANTIONE 0.004 89.806 1155
+MALCOM 0.004 89.809 1156
+LONG 0.004 89.813 1157
+KOREY 0.004 89.817 1158
+JOSPEH 0.004 89.821 1159
+COLTON 0.004 89.825 1160
+WAYLON 0.004 89.828 1161
+VON 0.004 89.832 1162
+HOSEA 0.004 89.836 1163
+SHAD 0.004 89.840 1164
+SANTO 0.004 89.843 1165
+RUDOLF 0.004 89.847 1166
+ROLF 0.004 89.851 1167
+REY 0.004 89.855 1168
+RENALDO 0.004 89.858 1169
+MARCELLUS 0.004 89.862 1170
+LUCIUS 0.004 89.866 1171
+LESLEY 0.004 89.870 1172
+KRISTOFER 0.004 89.873 1173
+BOYCE 0.004 89.877 1174
+BENTON 0.004 89.881 1175
+MAN 0.004 89.884 1176
+KASEY 0.004 89.888 1177
+JEWELL 0.004 89.892 1178
+HAYDEN 0.004 89.895 1179
+HARLAND 0.004 89.899 1180
+ARNOLDO 0.004 89.903 1181
+RUEBEN 0.004 89.907 1182
+LEANDRO 0.004 89.910 1183
+KRAIG 0.004 89.914 1184
+JERRELL 0.004 89.918 1185
+JEROMY 0.004 89.921 1186
+HOBERT 0.004 89.925 1187
+CEDRICK 0.004 89.929 1188
+ARLIE 0.004 89.932 1189
+WINFORD 0.004 89.936 1190
+WALLY 0.004 89.939 1191
+PATRICIA 0.004 89.943 1192
+LUIGI 0.004 89.947 1193
+KENETH 0.004 89.950 1194
+JACINTO 0.004 89.954 1195
+GRAIG 0.004 89.958 1196
+FRANKLYN 0.004 89.961 1197
+EDMUNDO 0.004 89.965 1198
+SID 0.004 89.968 1199
+PORTER 0.004 89.972 1200
+LEIF 0.004 89.976 1201
+LAUREN 0.004 89.979 1202
+JERAMY 0.004 89.983 1203
+ELISHA 0.004 89.986 1204
+BUCK 0.004 89.990 1205
+WILLIAN 0.004 89.994 1206
+VINCENZO 0.004 89.997 1207
+SHON 0.004 90.001 1208
+MICHAL 0.004 90.004 1209
+LYNWOOD 0.004 90.008 1210
+LINDSAY 0.004 90.011 1211
+JEWEL 0.004 90.015 1212
+JERE 0.004 90.018 1213
+HAI 0.004 90.022 1214
+ELDEN 0.004 90.026 1215
+DORSEY 0.004 90.029 1216
+DARELL 0.004 90.033 1217
+BRODERICK 0.004 90.036 1218
+ALONSO 0.004 90.040 1219
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/firstNames.txt
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/firstNames.txt b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/firstNames.txt
new file mode 100644
index 0000000..f027f1f
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/firstNames.txt
@@ -0,0 +1,5494 @@
+James
+John
+Robert
+Mary
+Michael
+William
+David
+Richard
+Charles
+Joseph
+Thomas
+Patricia
+Christopher
+Linda
+Barbara
+Daniel
+Paul
+Mark
+Elizabeth
+Jennifer
+Donald
+George
+Maria
+Kenneth
+Susan
+Steven
+Edward
+Margaret
+Brian
+Dorothy
+Ronald
+Anthony
+Lisa
+Kevin
+Nancy
+Karen
+Betty
+Helen
+Jason
+Matthew
+Gary
+Timothy
+Sandra
+Jose
+Larry
+Jeffrey
+Donna
+Frank
+Carol
+Ruth
+Scott
+Eric
+Stephen
+Andrew
+Sharon
+Michelle
+Laura
+Sarah
+Kimberly
+Deborah
+Jessica
+Raymond
+Shirley
+Cynthia
+Angela
+Melissa
+Brenda
+Amy
+Gregory
+Anna
+Joshua
+Jerry
+Rebecca
+Virginia
+Kathleen
+Pamela
+Dennis
+Martha
+Debra
+Amanda
+Stephanie
+Walter
+Patrick
+Carolyn
+Christine
+Peter
+Janet
+Marie
+Catherine
+Harold
+Frances
+Douglas
+Henry
+Ann
+Joyce
+Diane
+Alice
+Julie
+Carl
+Heather
+Teresa
+Arthur
+Doris
+Gloria
+Ryan
+Evelyn
+Roger
+Joe
+Juan
+Cheryl
+Jack
+Jean
+Albert
+Jonathan
+Katherine
+Mildred
+Justin
+Terry
+Gerald
+Keith
+Joan
+Samuel
+Ashley
+Willie
+Judith
+Rose
+Janice
+Kelly
+Lawrence
+Ralph
+Nicole
+Judy
+Christina
+Nicholas
+Roy
+Kathy
+Theresa
+Benjamin
+Beverly
+Denise
+Bruce
+Brandon
+Adam
+Tammy
+Irene
+Fred
+Harry
+Jane
+Wayne
+Billy
+Lori
+Steve
+Louis
+Jeremy
+Rachel
+Marilyn
+Aaron
+Andrea
+Kathryn
+Randy
+Eugene
+Howard
+Carlos
+Louise
+Sara
+Anne
+Jacqueline
+Wanda
+Russell
+Bobby
+Bonnie
+Julia
+Victor
+Ruby
+Lois
+Tina
+Phyllis
+Norma
+Paula
+Annie
+Diana
+Martin
+Ernest
+Phillip
+Todd
+Lillian
+Jesse
+Emily
+Peggy
+Robin
+Crystal
+Craig
+Gladys
+Alan
+Rita
+Dawn
+Connie
+Florence
+Shawn
+Chris
+Clarence
+Edna
+Philip
+Sean
+Tracy
+Carmen
+Johnny
+Tiffany
+Rosa
+Earl
+Cindy
+Jimmy
+Antonio
+Bryan
+Danny
+Tony
+Grace
+Luis
+Mike
+Leonard
+Stanley
+Nathan
+Wendy
+Dale
+Manuel
+Curtis
+Rodney
+Victoria
+Edith
+Kim
+Sherry
+Josephine
+Norman
+Sylvia
+Shannon
+Sheila
+Thelma
+Allen
+Ethel
+Elaine
+Ellen
+Marjorie
+Carrie
+Marvin
+Charlotte
+Vincent
+Glenn
+Esther
+Jeff
+Jeffery
+Monica
+Travis
+Chad
+Emma
+Jacob
+Pauline
+Juanita
+Alfred
+Anita
+Lee
+Melvin
+Rhonda
+Hazel
+Amber
+Francis
+Kyle
+Bradley
+Eva
+Debbie
+Herbert
+Jesus
+April
+Frederick
+Leslie
+Clara
+Jamie
+Lucille
+Ray
+Joel
+Eleanor
+Joanne
+Danielle
+Valerie
+Edwin
+Megan
+Alicia
+Don
+Gail
+Michele
+Suzanne
+Eddie
+Bertha
+Darlene
+Jill
+Veronica
+Erin
+Geraldine
+Ricky
+Randall
+Troy
+Cathy
+Lauren
+Joann
+Lorraine
+Lynn
+Sally
+Barry
+Regina
+Alexander
+Beatrice
+Erica
+Dolores
+Bernice
+Audrey
+Bernard
+Yvonne
+Annette
+June
+Leroy
+Mario
+Francisco
+Marcus
+Samantha
+Clifford
+Micheal
+Theodore
+Dana
+Marion
+Miguel
+Oscar
+Stacy
+Ana
+Renee
+Ida
+Jay
+Jim
+Vivian
+Brittany
+Holly
+Roberta
+Tom
+Melanie
+Alex
+Calvin
+Jeanette
+Jon
+Loretta
+Yolanda
+Laurie
+Katie
+Ronnie
+Bill
+Derek
+Leon
+Lloyd
+Tommy
+Alma
+Kristen
+Sue
+Vanessa
+Beth
+Elsie
+Warren
+Jeanne
+Vicki
+Darrell
+Jerome
+Carla
+Floyd
+Rosemary
+Tara
+Leo
+Alvin
+Eileen
+Terri
+Dean
+Gordon
+Greg
+Jorge
+Tim
+Wesley
+Derrick
+Dustin
+Gertrude
+Lucy
+Pedro
+Tonya
+Dan
+Ella
+Stacey
+Gina
+Kristin
+Lewis
+Wilma
+Zachary
+Agnes
+Corey
+Jessie
+Natalie
+Vera
+Charlene
+Herman
+Maurice
+Roberto
+Vernon
+Willie
+Bessie
+Clyde
+Delores
+Arlene
+Glen
+Hector
+Melinda
+Pearl
+Ricardo
+Shane
+Allison
+Colleen
+Maureen
+Sam
+Tamara
+Constance
+Georgia
+Joy
+Lester
+Rick
+Brent
+Charlie
+Claudia
+Jackie
+Lillie
+Marcia
+Ramon
+Gilbert
+Minnie
+Nellie
+Tanya
+Tyler
+Glenda
+Heidi
+Marlene
+Gene
+Marc
+Courtney
+Lydia
+Marian
+Viola
+Caroline
+Stella
+Dora
+Reginald
+Jo
+Angel
+Brett
+Ruben
+Vickie
+Leslie
+Mattie
+Nathaniel
+Rafael
+Edgar
+Milton
+Terry
+Irma
+Maxine
+Raul
+Ben
+Cecil
+Chester
+Mabel
+Marsha
+Myrtle
+Christy
+Duane
+Franklin
+Lena
+Andre
+Deanna
+Patsy
+Hilda
+Elmer
+Gwendolyn
+Brad
+Gabriel
+Jennie
+Nora
+Arnold
+Cassandra
+Harvey
+Leah
+Margie
+Mitchell
+Nina
+Roland
+Ron
+Carole
+Jared
+Kay
+Naomi
+Penny
+Priscilla
+Brandy
+Olga
+Adrian
+Billie
+Dianne
+Karl
+Leona
+Tracey
+Claude
+Cory
+Erik
+Felicia
+Jenny
+Sonia
+Darryl
+Becky
+Jamie
+Miriam
+Neil
+Velma
+Bobbie
+Christian
+Clinton
+Fernando
+Javier
+Jessie
+Kristina
+Violet
+Darren
+Lonnie
+Mathew
+Ted
+Toni
+Tyrone
+Cody
+Julio
+Kelly
+Lance
+Mae
+Misty
+Daisy
+Kurt
+Ramona
+Shelly
+Sherri
+Allan
+Claire
+Erika
+Katrina
+Nelson
+Clayton
+Guy
+Hugh
+Lindsay
+Lindsey
+Belinda
+Dwayne
+Geneva
+Guadalupe
+Margarita
+Max
+Sheryl
+Armando
+Cora
+Dwight
+Faye
+Felix
+Jimmie
+Ada
+Everett
+Isabel
+Natasha
+Sabrina
+Harriet
+Hattie
+Ian
+Jordan
+Marguerite
+Wallace
+Blanche
+Bob
+Brandi
+Cecilia
+Iris
+Jaime
+Joanna
+Ken
+Kristi
+Molly
+Rosie
+Sandy
+Alfredo
+Angie
+Casey
+Eunice
+Alberto
+Dave
+Inez
+Ivan
+Lynda
+Alberta
+Amelia
+Byron
+Johnnie
+Julian
+Madeline
+Sidney
+Candace
+Genevieve
+Isaac
+Jan
+Janie
+Jodi
+Kayla
+Kristine
+Lee
+Maggie
+Monique
+Morris
+Sonya
+Alison
+Clifton
+Daryl
+Fannie
+Maryann
+Melody
+Opal
+Ross
+Willard
+Yvette
+Andy
+Flora
+Kirk
+Luz
+Marshall
+Olivia
+Perry
+Salvador
+Sergio
+Shelley
+Susie
+Virgil
+Antoinette
+Beulah
+Kent
+Kristy
+Lola
+Lula
+Mamie
+Marion
+Rene
+Seth
+Terrance
+Tracy
+Verna
+Eduardo
+Terrence
+Candice
+Enrique
+Freddie
+Jeannette
+Juana
+Kelli
+Pam
+Bridget
+Hannah
+Wade
+Whitney
+Austin
+Celia
+Karla
+Stuart
+Alejandro
+Arturo
+Della
+Fredrick
+Gayle
+Jackie
+Joey
+Latoya
+Luther
+Lynne
+Nick
+Patty
+Shelia
+Vicky
+Dana
+Evan
+Jeremiah
+Julius
+Marianne
+Sheri
+Wendell
+Blanca
+Donnie
+Erma
+Jacquelyn
+Kara
+Otis
+Doug
+Gerard
+Homer
+Krista
+Leticia
+Luke
+Myra
+Oliver
+Pat
+Roxanne
+Shannon
+Trevor
+Adrienne
+Alexandra
+Angelica
+Angelo
+Bernadette
+Bethany
+Brooke
+Francis
+Hubert
+Johnnie
+Kenny
+Robyn
+Rosalie
+Sadie
+Shaun
+Alfonso
+Chelsea
+Ernestine
+Jasmine
+Jody
+Kendra
+Lyle
+Lynn
+Mable
+Matt
+Muriel
+Nichole
+Rachael
+Traci
+Angelina
+Cameron
+Carlton
+Elena
+Ernesto
+Krystal
+Marcella
+Neal
+Orlando
+Rex
+Blake
+Dianna
+Estelle
+Grant
+Horace
+Kari
+Kerry
+Lora
+Lorenzo
+Nadine
+Omar
+Pablo
+Paulette
+Roderick
+Wilbur
+Abraham
+Angel
+Antonia
+Desiree
+Doreen
+Ira
+Jean
+Mona
+Rickey
+Rosemarie
+Willis
+Andres
+Betsy
+Cesar
+Christie
+Damon
+Freda
+Ginger
+Hope
+Janis
+Johnathan
+Kelvin
+Malcolm
+Preston
+Rudolph
+Rudy
+Alton
+Archie
+Cristina
+Eula
+Lynette
+Marco
+Mercedes
+Meredith
+Teri
+Wm
+Bennie
+Cecelia
+Dominic
+Ed
+Eloise
+Felipe
+Garry
+Geoffrey
+Gerardo
+Gretchen
+Jonathon
+Leigh
+Loren
+Meghan
+Pete
+Randolph
+Robin
+Rochelle
+Sophia
+Alyssa
+Colin
+Delbert
+Earnest
+Guillermo
+Gwen
+Henrietta
+Jana
+Kelley
+Kerry
+Lucas
+Raquel
+Alexis
+Benny
+Edmund
+Jenna
+Laverne
+Myron
+Noel
+Olive
+Rodolfo
+Spencer
+Tasha
+Tricia
+Casey
+Cedric
+Darla
+Delia
+Elvira
+Essie
+Garrett
+Gregg
+Kate
+Kellie
+Lana
+Lila
+Lorena
+Lowell
+Mandy
+May
+Mindy
+Patti
+Salvatore
+Silvia
+Sonja
+Sophie
+Camille
+Devin
+Dixie
+Elsa
+Faith
+Israel
+Jeannie
+Jermaine
+Johanna
+Josefina
+Kim
+Lela
+Lorene
+Lucia
+Marta
+Miranda
+Roosevelt
+Shari
+Sherman
+Sylvester
+Wilson
+Aimee
+Alisha
+Ebony
+Elisa
+Forrest
+Jaime
+Kristie
+Leland
+Marina
+Melba
+Nettie
+Ollie
+Ora
+Rena
+Shawna
+Tabitha
+Tami
+Wilbert
+Winifred
+Addie
+Bonita
+Bryant
+Carroll
+Clark
+Guadalupe
+Irving
+Latasha
+Marla
+Myrna
+Owen
+Patrice
+Ronda
+Sherrie
+Simon
+Tammie
+Abigail
+Adele
+Adriana
+Cara
+Celeste
+Cheri
+Deloris
+Dorthy
+Francine
+Gustavo
+Jake
+Jewel
+Kristopher
+Levi
+Lucinda
+Mack
+Marcos
+Rebekah
+Rufus
+Sammy
+Shelby
+Stacie
+Woodrow
+Aurora
+Brittney
+Chris
+Clint
+Corinne
+Dallas
+Drew
+Effie
+Ellis
+Elva
+Estella
+Etta
+Fern
+Francisca
+Gilberto
+Helene
+Ismael
+Janelle
+Jody
+Josie
+Karin
+Kelsey
+Kerri
+Laurel
+Laurence
+Lenora
+Lionel
+Lottie
+Lourdes
+Marissa
+Marty
+Nicolas
+Nikki
+Orville
+Reba
+Sallie
+Shawn
+Taylor
+Tracie
+Trina
+Trisha
+Aida
+Al
+Bettie
+Caitlin
+Caleb
+Cassie
+Christa
+Dewey
+Elisabeth
+Erick
+Ervin
+Eugenia
+Frankie
+Goldie
+Hugo
+Ignacio
+Ina
+Ingrid
+Iva
+Jenifer
+Josh
+Maude
+Sheldon
+Tomas
+Wilfred
+Alonzo
+Bert
+Candy
+Cherie
+Conrad
+Consuelo
+Darrel
+Debora
+Dena
+Dina
+Doyle
+Elbert
+Elias
+Frankie
+Janette
+Latonya
+Lorna
+Morgan
+Noah
+Pat
+Polly
+Ramiro
+Rogelio
+Rosetta
+Santiago
+Stewart
+Tamika
+Terence
+Therese
+Bradford
+Carolina
+Clay
+Cleo
+Cornelius
+Dexter
+Dorothea
+Esperanza
+Fay
+Grady
+Helena
+Jewell
+Jillian
+Kimberley
+Lamar
+Merle
+Nell
+Patrica
+Percy
+Phil
+Rolando
+Shanna
+Stefanie
+Trudy
+Alisa
+Amos
+Darin
+Darnell
+Irvin
+Janine
+Lou
+Lupe
+Maribel
+Mollie
+Moses
+Ola
+Randal
+Roman
+Rosario
+Saul
+Susanne
+Terrell
+Tommie
+Abel
+Alta
+Aubrey
+Bette
+Boyd
+Brendan
+Cary
+Cecile
+Courtney
+Daphne
+Darrin
+Domingo
+Dominick
+Edmond
+Elijah
+Elise
+Emanuel
+Emil
+Emilio
+Emmett
+Ester
+Graciela
+Imogene
+Isabelle
+Jan
+Jerald
+Jocelyn
+Jolene
+Joni
+Keisha
+Leola
+Lesley
+Marlon
+Paige
+Petra
+Rachelle
+Santos
+Susana
+Timmy
+Toby
+Van
+Winston
+Adeline
+Beatriz
+Bret
+Carmela
+Charity
+Clarice
+Dewayne
+Emmanuel
+Gabriela
+Glenna
+Gracie
+Humberto
+Jaclyn
+Jayne
+Jess
+Keri
+Kirsten
+Lacey
+Lizzie
+Louie
+Marisa
+Marisol
+Mayra
+Morgan
+Otto
+Reynaldo
+Rosalind
+Shana
+Sondra
+Stephan
+Teddy
+Tonia
+Trent
+Ursula
+Will
+Angelia
+Angeline
+Autumn
+Billie
+Cathleen
+Christi
+Claudette
+Demetrius
+Efrain
+Eldon
+Elma
+Ethan
+Frieda
+Gabrielle
+Garland
+Harley
+Heath
+Jeanine
+Jimmie
+Jodie
+Justine
+Katharine
+Lamont
+Lea
+Lily
+Logan
+Luella
+Margret
+Micah
+Miles
+Millie
+Robbie
+Rodger
+Shauna
+Sheena
+Staci
+Stacy
+Summer
+Vicente
+Abby
+Aileen
+Antoine
+Bobbi
+Bryce
+Callie
+Chase
+Chuck
+Cleveland
+Dale
+Damian
+Deana
+Dee
+Dolly
+Dominique
+Dylan
+Eli
+Elton
+Freddy
+Gale
+Grover
+Ivy
+Jeannine
+Junior
+Kendall
+Ladonna
+Lara
+Leanne
+Lorie
+Lucile
+Luisa
+Manuela
+Marcy
+Margo
+Maritza
+Martina
+Mavis
+Mickey
+Pierre
+Rene
+Robbie
+Rocky
+Royce
+Selma
+Socorro
+Sterling
+Sybil
+Willa
+Winnie
+Agustin
+Audra
+August
+Barbra
+Benito
+Bettye
+Bianca
+Blaine
+Bridgette
+Cornelia
+Curt
+Eliza
+Ernie
+Erwin
+Georgina
+Hans
+Jasper
+Jeri
+Latisha
+Leann
+Leila
+Leonardo
+Magdalena
+Matilda
+Meagan
+Monte
+Murray
+Ofelia
+Quentin
+Randi
+Reuben
+Russel
+Simone
+Stan
+Virgie
+Adela
+Adolfo
+Alexandria
+Ashley
+Ava
+Bart
+Bernadine
+Brady
+Brianna
+Buddy
+Burton
+Catalina
+Chandra
+Clarissa
+Concepcion
+Corrine
+Damien
+Darwin
+Denis
+Desmond
+Devon
+Dona
+Earline
+Elliot
+Elliott
+Elnora
+Ericka
+Estela
+Flossie
+Gregorio
+Greta
+Haley
+Harlan
+Harrison
+Hilary
+Ila
+Jamal
+Jami
+Jarrod
+Joaquin
+Lenore
+Letha
+Lidia
+Lilly
+Mia
+Minerva
+Nelda
+Nola
+Rae
+Rhoda
+Rosalyn
+Ruthie
+Sharron
+Terrie
+Tia
+Tyson
+Valarie
+Vance
+Wilfredo
+Allie
+Allyson
+Amie
+Anton
+Ashlee
+Avis
+Benita
+Brain
+Carey
+Darius
+Elvin
+Elwood
+Emilia
+Esmeralda
+Esteban
+Eve
+Hal
+Harriett
+Hillary
+Jeanie
+Karina
+Kendrick
+Kermit
+Loraine
+Malinda
+Marylou
+Melisa
+Milagros
+Moises
+Nannie
+Neva
+Nolan
+Norbert
+Noreen
+Odessa
+Pearlie
+Penelope
+Quinton
+Rob
+Rod
+Roscoe
+Saundra
+Scotty
+Serena
+Sofia
+Solomon
+Tabatha
+Tameka
+Tania
+Tommie
+Williams
+Xavier
+Zelma
+Alana
+Alejandra
+Ali
+Althea
+Alvaro
+Annabelle
+Armand
+Bryon
+Carlene
+Carmella
+Clare
+Cliff
+Dane
+Darcy
+Earlene
+Earnestine
+Elinor
+Fabian
+Fidel
+Gay
+Graham
+Jackson
+Jeffry
+Jerri
+Joesph
+John
+Jordan
+Julianne
+Katy
+Lilia
+Liza
+Lorrie
+Louisa
+Mallory
+Marcel
+Marcie
+Marlin
+Mason
+Michael
+Michel
+Monty
+Ned
+Nita
+Noemi
+Raphael
+Reggie
+Rory
+Rosalinda
+Rusty
+Sammie
+Selena
+Son
+Tanisha
+Taylor
+Thaddeus
+Thurman
+Adolph
+Alexis
+Aline
+Alissa
+Alphonso
+Avery
+Carmen
+Charmaine
+Chrystal
+Claudine
+Colette
+Corine
+Deanne
+Derick
+Diego
+Dollie
+Eddie
+Edwina
+Evangeline
+Fran
+Georgette
+Gerry
+Gonzalo
+Gus
+Ilene
+Isaiah
+Jerry
+Juliana
+Kasey
+Kathie
+Kathrine
+Kaye
+Kenya
+Kris
+Kris
+Lakisha
+Lavonne
+Lawanda
+Lilian
+Lina
+Loyd
+Luann
+Madge
+Margery
+Mari
+Maricela
+Maryanne
+Melva
+Merle
+Millard
+Mitzi
+Nadia
+Nanette
+Noe
+Nona
+Norris
+Ophelia
+Rickie
+Rigoberto
+Rocco
+Rodrigo
+Roslyn
+Roxie
+Shelby
+Stacey
+Suzette
+Tammi
+Ty
+Valeria
+Vaughn
+Wiley
+Yesenia
+Alyce
+Amalia
+Anastasia
+Araceli
+Arline
+Augusta
+Aurelia
+Basil
+Bernardo
+Berta
+Bobbie
+Briana
+Bruno
+Carly
+Chasity
+Christian
+Clement
+Cole
+Corina
+Coy
+Dante
+Davis
+Deena
+Deidre
+Deirdre
+Denny
+Dion
+Donnell
+Donovan
+Eddy
+Elvia
+Elvis
+Emery
+Federico
+Gavin
+Gena
+Heriberto
+Hiram
+Imelda
+Issac
+James
+Janna
+Jarvis
+Jayson
+Jefferson
+Josefa
+Juliette
+Katelyn
+Lakeisha
+Leonor
+Lessie
+Liliana
+Lynnette
+Madelyn
+Marci
+Marietta
+Marva
+Mauricio
+Maxwell
+Maynard
+Natalia
+Nickolas
+Odell
+Ollie
+Quincy
+Reed
+Reva
+Riley
+Romeo
+Rosanne
+Roseann
+Rosella
+Sasha
+Savannah
+Scot
+Sebastian
+Sheree
+Susanna
+Tessa
+Ulysses
+Vern
+Vilma
+Vince
+Ward
+Wendi
+Young
+Adrian
+Aisha
+Alba
+Alfreda
+Alyson
+Amparo
+Angelique
+Angelita
+Annmarie
+Art
+Aurelio
+Barney
+Beau
+Bertie
+Beryl
+Bridgett
+Brigitte
+Britney
+Brock
+Carey
+Carissa
+Carlo
+Carmelo
+Carter
+Casandra
+Cathryn
+Charley
+Cherry
+Cleo
+Colby
+Coleen
+Collin
+Concetta
+Cruz
+Delmar
+Denver
+Diann
+Dick
+Dionne
+Donny
+Dudley
+Enid
+Erna
+Evangelina
+Fanny
+Florine
+Francesca
+Frederic
+Freida
+Galen
+Gilda
+Hallie
+Harris
+Helga
+Hester
+Hollie
+Hollis
+Hunter
+Ines
+Irwin
+Isidro
+Jacklyn
+Janell
+Jannie
+Johnathon
+Juliet
+Kaitlin
+Karyn
+Katheryn
+Katina
+Kirby
+Kurtis
+Lacy
+Lane
+Lauri
+Leanna
+Lelia
+Linwood
+Liz
+Lolita
+Madeleine
+Mai
+Mara
+Marcelino
+Mariana
+Marquita
+Mary
+Maryellen
+Maura
+Merlin
+Merrill
+Millicent
+Nestor
+Phoebe
+Queen
+Reyna
+Rhea
+Rosanna
+Rowena
+Sanford
+Silas
+Stefan
+Tamera
+Tamra
+Tisha
+Trenton
+Truman
+Twila
+Vito
+Weldon
+Wilda
+Winfred
+Abbie
+Adan
+Adelaide
+Allene
+Antionette
+Antony
+Arron
+Ashleigh
+Bennett
+Bernie
+Beverley
+Blair
+Bobby
+Booker
+Branden
+Brandie
+Buford
+Camilla
+Carson
+Caryn
+Celina
+Chelsey
+Clair
+Cornell
+Cortney
+Dalton
+Danial
+Daren
+Dayna
+Deann
+Deidra
+Denice
+Dessie
+Dirk
+Dominique
+Doretha
+Edwardo
+Edythe
+Elba
+Elda
+Elisha
+Emerson
+Emilie
+Emory
+Errol
+Felecia
+Fletcher
+Gale
+Gayla
+Genaro
+Geri
+Germaine
+German
+Gussie
+Herminia
+Houston
+Hung
+Isabella
+Jacques
+Jade
+Jame
+Jasmin
+Jesse
+Joan
+Josue
+Judi
+Justina
+Kaitlyn
+Kathi
+Kimberlee
+Kitty
+Lakesha
+Landon
+Lashonda
+Latanya
+Laverne
+Leeann
+Leonel
+Lesa
+Leta
+Letitia
+Libby
+Lincoln
+Louella
+Ma
+Margot
+Mariano
+Mellisa
+Michaela
+Michell
+Mina
+Mohammad
+Monika
+Monroe
+Nan
+Nelly
+Noelle
+Numbers
+Octavia
+Octavio
+Pamala
+Pansy
+Pasquale
+Raymundo
+Renae
+Robby
+Robert
+Rocio
+Rosalia
+Selina
+Sharlene
+Shelton
+Sierra
+Sonny
+Sydney
+Terra
+Theron
+Tori
+Tristan
+Vonda
+Wilford
+Wilmer
+Zachery
+Zelda
+Abdul
+Adelina
+Adrianne
+Agatha
+Aldo
+Alecia
+Alene
+Alphonse
+Alva
+Anderson
+Ariel
+Ariel
+Arleen
+Arnulfo
+Athena
+Aubrey
+Augustine
+Belle
+Bennie
+Bess
+Birdie
+Brianne
+Brooks
+Caren
+Cari
+Carmine
+Catrina
+Celestine
+Chadwick
+Chance
+Chantel
+Chloe
+Chong
+Christen
+Christin
+Cindi
+Cyril
+Cyrus
+Danette
+Daniela
+Danna
+Dara
+Debby
+Delilah
+Delma
+Delphine
+Demetria
+Destiny
+Devon
+Dinah
+Dottie
+Duncan
+Dusty
+Eleanore
+Elia
+Elida
+Eloisa
+Erich
+Erin
+Ernestina
+Eugenio
+Ezra
+Fatima
+Ferdinand
+Forest
+Freddie
+Freeman
+Garth
+Giovanni
+Griselda
+Guillermina
+Hanna
+Herschel
+Hortencia
+Iola
+Iona
+Ivette
+Jacquline
+Jamel
+Janel
+Jaqueline
+Jarrett
+Jeanna
+Jena
+Johnie
+Jonas
+Karrie
+Kennith
+Krystle
+Lashawn
+Latrice
+Lazaro
+Leora
+Lindsey
+Lon
+Lona
+Luciano
+Lucien
+Lucretia
+Major
+Malissa
+Marianna
+Marilynn
+Marisela
+Marybeth
+Maryjane
+Maudie
+Maurine
+Merry
+Mervin
+Migdalia
+Mitchel
+Mohammed
+Morton
+Myles
+Nilda
+Oma
+Pattie
+Portia
+Racheal
+Randell
+Rebeca
+Reid
+Retha
+Rich
+Robbin
+Ronny
+Rosalee
+Rosita
+Russ
+Sandy
+Scottie
+Seymour
+Shellie
+Shiela
+Shonda
+Soledad
+Stevie
+Sun
+Sydney
+Taryn
+Tawana
+Tera
+Teresita
+Tessie
+Thad
+Theodora
+Tillie
+Tracey
+Treva
+Valentin
+Veda
+Verda
+Vernice
+Vida
+Virgina
+Wilburn
+Wilhelmina
+William
+Winona
+Yong
+Young
+Zane
+Abe
+Ahmad
+Alden
+Alec
+Aletha
+Alexa
+Alfonzo
+Alina
+Alva
+Alvina
+Andrea
+Annemarie
+Annetta
+Antwan
+Aretha
+Aron
+Barb
+Barton
+Bella
+Belva
+Berniece
+Berry
+Bettina
+Boris
+Brant
+Breanna
+Brenton
+Burt
+Candida
+Caridad
+Carmel
+Carmelita
+Carol
+Carroll
+Catharine
+Cathrine
+Charla
+Charles
+Charlie
+Christal
+Christoper
+Claudio
+Coleman
+Cori
+Cristy
+Cruz
+Dalia
+Damaris
+David
+Deandre
+Delois
+Deon
+Dewitt
+Dino
+Dominga
+Donn
+Dorian
+Dorris
+Earle
+Edgardo
+Efren
+Eliseo
+Elissa
+Ellie
+Elmo
+Elouise
+Eloy
+Elyse
+Emile
+Erlinda
+Everette
+Evette
+Faustino
+Felicita
+Filomena
+Flor
+Foster
+Fritz
+Gail
+Gil
+Gillian
+Gino
+Gisela
+Harriette
+Haydee
+Hershel
+India
+Ione
+Isabell
+Isiah
+Ivory
+Jamaal
+Jamar
+Jarred
+Jayme
+Jerold
+Jerrod
+Josef
+Josiah
+Judson
+Jules
+Jung
+Kareem
+Kerrie
+Kieth
+Kira
+Kisha
+Kristal
+Kylie
+Lanny
+Larissa
+Lauretta
+Lavern
+Lemuel
+Leopoldo
+Leota
+Les
+Lettie
+Lorri
+Lucio
+Lura
+Lyman
+Lyn
+Madonna
+Mandi
+Marcela
+Margarito
+Marge
+Marjory
+Marquis
+Matilde
+Maya
+Mayme
+Mellissa
+Melodie
+Milford
+Mirna
+Missy
+Mitch
+Napoleon
+Nigel
+Noel
+Norberto
+Normand
+Olin
+Oralia
+Osvaldo
+Parker
+Paulina
+Pearline
+Phillis
+Pilar
+Pricilla
+Rafaela
+Refugio
+Reina
+Reinaldo
+Renita
+Reta
+Rico
+Rodrick
+Roseanne
+Rosendo
+Roxana
+Roxanna
+Royal
+Rubin
+Ryan
+Samatha
+Sandi
+Sang
+Santa
+Shanda
+Shayla
+Suzan
+Tamela
+Tana
+Tanner
+Tiara
+Tiffani
+Tomasa
+Trey
+Trinidad
+Una
+Vada
+Valencia
+Venus
+Vernell
+Vesta
+Weston
+Wilton
+Wyatt
+Yong
+Zella
+Zenaida
+Zoe
+Zoila
+Abram
+Adalberto
+Adell
+Ahmed
+Alaina
+Alpha
+Amado
+Andra
+Andria
+Anibal
+Anissa
+Annamarie
+Antone
+Antonette
+Ariana
+Asia
+Augustus
+Aura
+Barrett
+Belen
+Bertram
+Blair
+Bo
+Bradly
+Brendon
+Brenna
+Brice
+Bud
+Burl
+Candi
+Carrol
+Cecil
+Chanel
+Chang
+Chantal
+Charleen
+Charline
+Chastity
+Chauncey
+Chet
+Chi
+Chiquita
+Chung
+Clementine
+Cletus
+Collette
+Columbus
+Connie
+Cordelia
+Corey
+Corrie
+Cristal
+Damion
+Danelle
+Daniel
+Danita
+Dannie
+Dario
+Darleen
+Darrick
+Debi
+Debrah
+Dee
+Delfina
+Delmer
+Demarcus
+Dillon
+Donnie
+Donte
+Dorcas
+Dorene
+Dortha
+Dovie
+Dulce
+Dwain
+Easter
+Enoch
+Eulalia
+Fabiola
+Fermin
+Florencio
+Floy
+Frances
+Fredric
+Gabriella
+Garfield
+Gaye
+Gene
+Genoveva
+George
+Georgiana
+Georgianna
+Geraldo
+Gerri
+Gerry
+Gertie
+Ginny
+Giuseppe
+Gregoria
+Hank
+Hassan
+Hayley
+Hellen
+Herlinda
+Hilario
+Hildegard
+Hilton
+Hipolito
+Horacio
+Huey
+Idella
+Ima
+Isaias
+Ivonne
+Ivory
+Jacque
+Jacquelin
+Jamey
+Jamison
+Jannette
+Jeana
+Jed
+Jefferey
+Jerrold
+Jesica
+Joe
+Joelle
+Johnna
+Jonah
+Joseph
+Josette
+Jovita
+Juli
+Julianna
+Karol
+Karon
+Keenan
+Kenton
+Kesha
+Keshia
+Keven
+Kia
+Kip
+Kory
+Kyla
+Lan
+Laquita
+Latonia
+Latricia
+Lavern
+Lawerence
+Leilani
+Lenard
+Lenny
+Leone
+Leonora
+Lia
+Lindy
+Lizette
+Lonnie
+Loren
+Lorine
+Lou
+Louann
+Louis
+Luanne
+Lucila
+Lupe
+Lyndon
+Mac
+Magda
+Majorie
+Marcelle
+Marcelo
+Maria
+Mariah
+Mariam
+Markus
+Marlena
+Marlyn
+Marlys
+Maud
+Mauro
+Maximo
+Mckinley
+Mei
+Mel
+Melvina
+Mi
+Micaela
+Mikel
+Milo
+Mimi
+Minh
+Misti
+Mohamed
+Moshe
+Mozelle
+Myrtis
+Nakia
+Nathalie
+Nedra
+Nereida
+Newton
+Nicki
+Niki
+Nikita
+Noble
+Odis
+Olen
+Oleta
+Omer
+Ona
+Oren
+Orval
+Perla
+Philomena
+Porfirio
+Precious
+Prince
+Princess
+Quinn
+Quintin
+Raleigh
+Raven
+Ray
+Renata
+Renate
+Reyes
+Richelle
+Richie
+Robt
+Rolland
+Roma
+Romona
+Rosalba
+Rosalina
+Rosario
+Roselyn
+Roxann
+Rupert
+Sabina
+Sal
+Sammie
+Shanon
+Shantel
+Sharonda
+Sharyn
+Shelli
+Shirley
+Sol
+Stacia
+Stanford
+Stephany
+Stephenie
+Sung
+Sunny
+Suzanna
+Tad
+Tatiana
+Tena
+Teodoro
+Thanh
+Thea
+Theda
+Theo
+Tiana
+Tobias
+Tod
+Tonja
+Tory
+Tosha
+Trinidad
+Trista
+Twyla
+Tyra
+Tyree
+Tyrell
+Tyron
+Valentina
+Valentine
+Valorie
+Velda
+Venessa
+Verla
+Vikki
+Violeta
+Viviana
+Waldo
+Walker
+Werner
+Whitney
+Willy
+Yadira
+Zachariah
+Abbey
+Adelaida
+Adriane
+Adrianna
+Alanna
+Albina
+Alda
+Alesha
+Alesia
+Aleta
+Alonso
+Altagracia
+Ambrose
+Ami
+Anabel
+Andreas
+Anh
+Antione
+Antonia
+Aracely
+Arden
+Ardis
+Ardith
+Arlen
+Arlie
+Armida
+Arnoldo
+Artie
+Asa
+Ashton
+Astrid
+Bambi
+Benedict
+Benton
+Bernita
+Billy
+Blanch
+Bonny
+Boyce
+Brigette
+Britt
+Brittani
+Broderick
+Brook
+Buck
+Buster
+Caitlyn
+Candelaria
+Carina
+Carleen
+Carlotta
+Carman
+Carolee
+Carrol
+Cary
+Caryl
+Cathie
+Catina
+Cedrick
+Chanda
+Charisse
+Chas
+Chelsie
+Cherly
+Cheryle
+Chong
+Chrissy
+Cinthia
+Claud
+Clemente
+Colton
+Coral
+Cordell
+Corinna
+Cortez
+Cory
+Cristine
+Cristobal
+Cristopher
+Daniella
+Danilo
+Darci
+Darell
+Daria
+Daron
+Darron
+Dawna
+Deangelo
+Del
+Deshawn
+Devin
+Dian
+Domenic
+Dong
+Donita
+Dori
+Dorinda
+Dorsey
+Douglass
+Edie
+Edison
+Edmundo
+Elaina
+Elden
+Eldridge
+Elenor
+Elisha
+Elizebeth
+Ellsworth
+Elroy
+Emmitt
+Ena
+Enriqueta
+Era
+Erasmo
+Eusebio
+Evie
+Evonne
+Ezekiel
+Ezequiel
+Farrah
+Fausto
+Fawn
+Felicitas
+Felipa
+Felisha
+Felton
+Filiberto
+Florentino
+Florida
+Francesco
+Franklyn
+Garnet
+Garret
+Gaston
+Gayle
+Gaylord
+Georgie
+Gerda
+Giselle
+Graig
+Granville
+Hai
+Hailey
+Harland
+Hayden
+Haywood
+Herb
+Hermelinda
+Hobert
+Holli
+Hong
+Hong
+Hortense
+Hosea
+Hoyt
+Hyman
+Ike
+Ileana
+Ilse
+Inge
+Ira
+Isreal
+Jacinto
+Jada
+Jae
+Jaimie
+Jamila
+Janeen
+Janina
+Jarod
+Jc
+Jeane
+Jeanetta
+Jenelle
+Jeniffer
+Jennette
+Jenni
+Jeramy
+Jere
+Jeromy
+Jerrell
+Jerrie
+Jewel
+Jewell
+Joanie
+Joellen
+Johnson
+Joleen
+Jonnie
+Jordon
+Josephina
+Jospeh
+Joycelyn
+Jude
+Kala
+Kami
+Karissa
+Karolyn
+Kasey
+Kassandra
+Keely
+Kelley
+Kendall
+Keneth
+King
+Korey
+Kori
+Kraig
+Kristofer
+Kyle
+Kyong
+Kyra
+Kyung
+Lacie
+Lacy
+Lakeshia
+Lashanda
+Latosha
+Laureen
+Lauren
+Laurette
+Lavina
+Lavon
+Leandro
+Leatrice
+Leif
+Leigh
+Leisa
+Len
+Lesley
+Lida
+Lindsay
+Linnea
+Linnie
+Lino
+Lise
+Lisette
+Lissette
+Lizabeth
+Lizbeth
+Long
+Lonny
+Lorenza
+Lovie
+Lucie
+Lucius
+Luigi
+Lulu
+Lyndsey
+Lynwood
+Mackenzie
+Magdalene
+Magnolia
+Malcom
+Malik
+Man
+Manual
+Maranda
+Marcelina
+Marcellus
+Margarette
+Mariann
+Marilee
+Marita
+Mark
+Marnie
+Marquerite
+Marti
+Marty
+Marvel
+Marylin
+Maxie
+Maybelle
+Meaghan
+Melina
+Melony
+Meta
+Michal
+Michale
+Mickey
+Milan
+Miquel
+Mireya
+Mirian
+Mittie
+Modesto
+Mose
+Myriam
+Nanci
+Nannette
+Nathanael
+Nathanial
+Natividad
+Nena
+Neville
+Nicky
+Nicola
+Nila
+Nova
+Novella
+Nydia
+Ok
+Orpha
+Oswaldo
+Otha
+Palmer
+Paris
+Patricia
+Peggie
+Pennie
+Phuong
+Phylis
+Phyliss
+Porter
+Prudence
+Rashad
+Rayford
+Raymon
+Renaldo
+Renato
+Rey
+Rhett
+Rhiannon
+Richard
+Rolf
+Rona
+Ronnie
+Roseanna
+Rosina
+Roxane
+Rubye
+Rudolf
+Rueben
+Ruthann
+Salina
+Samual
+Sanjuana
+Sanjuanita
+Santo
+Santos
+Scarlett
+Shad
+Shaina
+Shalonda
+Shameka
+Shamika
+Shanta
+Shante
+Shara
+Sharla
+Shayna
+Shayne
+Sherie
+Sherita
+Sherrill
+Sherwood
+Shirlene
+Shon
+Sid
+Sidney
+Soon
+Stanton
+Starla
+Starr
+Susannah
+Tawanda
+Tawnya
+Teena
+Terese
+Teressa
+Thuy
+Tierra
+Tiffanie
+Titus
+Toby
+Tomeka
+Toney
+Tony
+Toya
+Trena
+Tresa
+Tressa
+Tuan
+Val
+Venita
+Vergie
+Vickey
+Vincenzo
+Virgilio
+Von
+Wally
+Walton
+Warner
+Waylon
+Wes
+Wilber
+Willian
+Windy
+Winford
+Winnifred
+Xiomara
+Yasmin
+Yolonda
+Yoshiko
+Zack
+Zackary
+Zola
+Zoraida
+Adelia
+Adella
+Adelle
+Adina
+Adria
+Afton
+Agustina
+Aja
+Albertha
+Albertine
+Alena
+Alethea
+Alexia
+Alida
+Almeda
+Alycia
+Alysia
+Amada
+America
+Anastacia
+Angella
+Anglea
+Anika
+Anitra
+Annabel
+Anneliese
+Anthony
+Antonina
+Arcelia
+Arielle
+Arlette
+Asha
+Ashely
+Ashlie
+Ashly
+Audry
+Augustine
+Aurea
+Awilda
+Ayesha
+Bailey
+Barbie
+Bea
+Berenice
+Bobbye
+Brandee
+Breanne
+Bree
+Britt
+Buffy
+Cameron
+Cami
+Candance
+Candis
+Carin
+Carlota
+Carlyn
+Carma
+Carolann
+Carolynn
+Caron
+Carri
+Cassidy
+Cathi
+Cecily
+Chana
+Chantelle
+Charissa
+Charlette
+Charolette
+Cherise
+Cherri
+Cherrie
+Cheyenne
+Christel
+Christene
+Christiana
+Christiane
+Christopher
+Chun
+Ciara
+Cierra
+Cinda
+Clair
+Claribel
+Cleta
+Clyde
+Corazon
+Corene
+Corrina
+Cristi
+Cristin
+Cyndi
+Cythia
+Dani
+Danica
+Daniele
+Dannielle
+Danyelle
+Darcie
+Darline
+Davida
+Davina
+Dean
+Deb
+Debbra
+Dedra
+Delora
+Delphia
+Demetra
+Deneen
+Denna
+Desirae
+Domenica
+Dorotha
+Dorthea
+Dusty
+Eartha
+Eboni
+Eda
+Edelmira
+Eden
+Elana
+Eldora
+Eleanora
+Elfriede
+Elmira
+Elna
+Elvera
+Emelia
+Emogene
+Enedina
+Estrella
+Ethelyn
+Eugenie
+Eun
+Evalyn
+Evelia
+Evon
+Fallon
+Felica
+Felice
+Felisa
+Ferne
+Fiona
+Florene
+Fonda
+Gabriel
+Gaynell
+Gemma
+Georgetta
+Geralyn
+Giovanna
+Gisele
+Gladis
+Glory
+Golda
+Gretta
+Hedwig
+Hettie
+Hoa
+Hortensia
+Hui
+Hulda
+Huong
+Idalia
+Iliana
+Ilona
+In
+Inga
+Ingeborg
+Irena
+Isela
+Jacalyn
+Jacinta
+Jackeline
+Jammie
+Janae
+Janene
+Janey
+Jaunita
+Jay
+Jazmin
+Jenniffer
+Jeraldine
+Jerilyn
+Jettie
+Joana
+Joetta
+Joey
+Johnetta
+Johnie
+Johnny
+Joi
+Jolynn
+Jonna
+Jose
+Juan
+Judie
+Juliann
+Julieta
+Julissa
+Kacey
+Kaci
+Kacie
+Kandace
+Kandi
+Kandice
+Kandy
+Karan
+Karie
+Karlene
+Karri
+Kasandra
+Kathlene
+Kathlyn
+Kathryne
+Kathyrn
+Kaylee
+Kecia
+Keiko
+Keli
+Kelsie
+Kenna
+Kenyatta
+Kiara
+Kimberely
+Kirstin
+Kizzy
+Kristan
+Kristian
+Kristyn
+Krystyna
+Kum
+Kylee
+Laci
+Lai
+Lanette
+Lani
+Lanita
+Larue
+Laurene
+Lavada
+Lavinia
+Lavonda
+Leandra
+Leatha
+Leda
+Leesa
+Lennie
+Leslee
+Lesli
+Li
+Liana
+Liane
+Lin
+Linette
+Linh
+Linsey
+Lissa
+Lita
+Loreen
+Lorelei
+Lorinda
+Lorretta
+Lu
+Luana
+Luciana
+Lucienne
+Lue
+Lupita
+Lyda
+Lyla
+Lyndsay
+Machelle
+Madison
+Maegan
+Maira
+Malia
+Margarete
+Maribeth
+Mariela
+Marilou
+Marlo
+Marry
+Martine
+Maryjo
+Marylee
+Marylyn
+Mathilda
+Mazie
+Mechelle
+Mee
+Meg
+Melonie
+Mercy
+Meryl
+Mickie
+Milissa
+Mindi
+Mira
+Mirta
+Modesta
+Moira
+Mozell
+My
+Myong
+Myrtice
+Nada
+Nakisha
+Nelida
+Nella
+Nelle
+Nia
+Nichelle
+Nichol
+Nicolasa
+Nicolette
+Nidia
+Nilsa
+Ninfa
+Noelia
+Norene
+Norine
+Numbers
+Ocie
+Odell
+Odette
+Oliva
+Otilia
+Ouida
+Page
+Palma
+Paola
+Paris
+Patrick
+Paul
+Pinkie
+Racquel
+Randa
+Randy
+Rashida
+Regan
+Renea
+Rina
+Rolanda
+Romana
+Ronna
+Rosaline
+Rosalva
+Rosaria
+Rosaura
+Rufina
+Sabine
+Sabra
+Sade
+Sarita
+Shandra
+Shanell
+Shani
+Shanika
+Shanita
+Shannan
+Shantell
+Sharee
+Sharen
+Shasta
+Shawanda
+Shay
+Shena
+Sherilyn
+Sheron
+Sherron
+Sherryl
+Shirlee
+Shirly
+Sibyl
+Sigrid
+Simona
+Siobhan
+Star
+Stefani
+Stephaine
+Stephani
+Stephine
+Stormy
+Su
+Sunshine
+Susann
+Suzie
+Suzy
+Syble
+Talia
+Tamar
+Tamatha
+Tamie
+Tamiko
+Tanesha
+Tangela
+Tanika
+Tarsha
+Tawanna
+Tenisha
+Teodora
+Tess
+Thersa
+Thomas
+Thomasina
+Tiffiny
+Tommy
+Tracee
+Tressie
+Trish
+Van
+Velia
+Velva
+Vernie
+Vernita
+Verona
+Vicenta
+Vina
+Vita
+Viva
+Vonnie
+Wanita
+Willene
+Wynona
+Yetta
+Yoko
+Yu
+Zaida
+Zandra
+Zena
+Zenobia
+Zina
+Zona
+Zora
+Zula
+Zulma
+Aaron
+Adaline
+Adriene
+Akiko
+Albertina
+Aleida
+Alejandrina
+Alethia
+Alex
+Alexander
+Ali
+Alia
+Alica
+Alise
+Alishia
+Alisia
+Alix
+Aliza
+Alla
+Allegra
+Allen
+Alline
+Almeta
+Altha
+Alvera
+Alyse
+Alysha
+Amina
+Ammie
+Andre
+Andree
+Andrew
+Anette
+Angele
+Angelena
+Angeles
+Angelic
+Angelika
+Angelo
+Angle
+Anjanette
+Annabell
+Annalee
+Annalisa
+Annamae
+Annett
+Annice
+Annis
+Antonietta
+Antonio
+Anya
+Apryl
+Aracelis
+Ardell
+Ardella
+Ariane
+Arianna
+Arie
+Arla
+Arlena
+Arletta
+Armanda
+Arminda
+Arnetta
+Arnita
+Arthur
+Arvilla
+Ashli
+Ashlyn
+Assunta
+Asuncion
+Audie
+Audrea
+Augustina
+Aundrea
+Avelina
+Ayana
+Ayanna
+Azucena
+Babara
+Babette
+Barbar
+Barbera
+Beckie
+Belia
+Berneice
+Bernetta
+Bernie
+Bethann
+Bethel
+Betsey
+Bev
+Beverlee
+Billye
+Birgit
+Blythe
+Branda
+Brandon
+Brigid
+Brigida
+Brinda
+Britany
+Britni
+Brittni
+Bronwyn
+Brunilda
+Brynn
+Camelia
+Cammie
+Candie
+Candyce
+Caprice
+Carie
+Carisa
+Carl
+Carletta
+Carley
+Carlie
+Carline
+Carmelina
+Carmon
+Carolyne
+Casie
+Catarina
+Caterina
+Cathey
+Cecila
+Celena
+Celestina
+Celine
+Chante
+Chantell
+Charise
+Chau
+Chaya
+Cherish
+Cherryl
+Cheryll
+Chi
+Chin
+Christeen
+Christena
+Chung
+Cicely
+Ciera
+Clarine
+Clarita
+Clementina
+Clemmie
+Cleopatra
+Cleora
+Clotilde
+Cody
+Coletta
+Collen
+Conchita
+Consuela
+Cordie
+Coreen
+Coretta
+Corie
+Corliss
+Criselda
+Crissy
+Crista
+Cristen
+Cristie
+Dagmar
+Dahlia
+Daisey
+Dalila
+Dallas
+Danae
+Dania
+Danika
+Dannette
+Danuta
+Daphine
+Darby
+Darnell
+Daryl
+Dawne
+Dayle
+Deandra
+Deane
+Debbi
+Debroah
+Deeann
+Delana
+Delena
+Delicia
+Delinda
+Delisa
+Dell
+Delpha
+Delta
+Demetrice
+Denese
+Denisha
+Denita
+Dennis
+Dennise
+Desire
+Detra
+Devona
+Devora
+Devorah
+Diamond
+Diedra
+Diedre
+Digna
+Dimple
+Dione
+Dionna
+Doloris
+Dominque
+Domonique
+Donald
+Donetta
+Donya
+Dorathy
+Dorian
+Dorie
+Dorine
+Dot
+Dreama
+Drema
+Drucilla
+Drusilla
+Dung
+Dyan
+Earlean
+Earleen
+Echo
+Edda
+Edward
+Elanor
+Elayne
+Elease
+Eleni
+Elenora
+Eliana
+Elicia
+Elizbeth
+Elke
+Elly
+Ellyn
+Elodia
+Elois
+Else
+Elvie
+Elvina
+Ema
+Emelda
+Emiko
+Emilee
+Emmie
+Emmy
+Eneida
+Enola
+Epifania
+Eric
+Erinn
+Erlene
+Erline
+Ermelinda
+Erminia
+Esta
+Estell
+Ethelene
+Ethyl
+Eugene
+Evan
+Evelin
+Evelina
+Eveline
+Evelyne
+Exie
+Fae
+Farah
+Faustina
+Fe
+Fernanda
+Flavia
+Flo
+Florance
+Florencia
+Florentina
+Floretta
+Florinda
+France
+Francie
+Francina
+Francisco
+Francoise
+Frank
+Frederica
+Fredericka
+Fredia
+Freeda
+Fumiko
+Gabriele
+Garnett
+Gary
+Gaylene
+Gearldine
+Genia
+Genie
+Gennie
+Georgene
+Georgine
+Gertha
+Gertrud
+Gia
+Gigi
+Glady
+Glendora
+Glennie
+Glennis
+Glinda
+Glynda
+Gracia
+Gudrun
+Gwenda
+Gwenn
+Gwyn
+Ha
+Hae
+Halina
+Hana
+Hanh
+Hannelore
+Harmony
+Hedy
+Hee
+Heide
+Henriette
+Henry
+Hermina
+Hermine
+Hilaria
+Hilde
+Hildegarde
+Hildred
+Hilma
+Hiroko
+Holley
+Hollis
+Honey
+Hyacinth
+Hye
+Hyon
+Hyun
+Idell
+Iesha
+Ignacia
+Ilana
+Ilda
+Iluminada
+Indira
+Inell
+Inger
+Inocencia
+Irina
+Irish
+Irmgard
+Isa
+Isaura
+Isidra
+Isis
+Ivana
+Jacki
+Jacqualine
+Jacquelyne
+Jacquelynn
+Jacquiline
+Jacqulyn
+Jadwiga
+Jae
+Jaleesa
+Jamey
+Janay
+Janessa
+Janeth
+Janett
+Janetta
+Janita
+Jann
+Jason
+Jazmine
+Jeanene
+Jen
+Jenell
+Jenette
+Jeni
+Jenice
+Jenine
+Jenise
+Jennefer
+Jesenia
+Jessenia
+Jessi
+Jesus
+Jesusa
+Jimmy
+Jin
+Jina
+Jodee
+Joeann
+Joel
+Joella
+Johana
+Jolanda
+Jolie
+Jona
+Jonell
+Jonelle
+Joselyn
+Joslyn
+Joye
+Julee
+Julian
+Juliane
+Julienne
+Junita
+Justin
+Jutta
+Kacy
+Kaley
+Kali
+Kam
+Karey
+Karine
+Karl
+Karleen
+Karma
+Karmen
+Karren
+Karyl
+Kasie
+Kassie
+Kathaleen
+Katharina
+Kathe
+Katherin
+Kathern
+Kathey
+Kati
+Katia
+Katlyn
+Katrice
+Kattie
+Kayleen
+Kayleigh
+Kaylene
+Kazuko
+Keena
+Keesha
+Kelle
+Kellee
+Kellye
+Kena
+Kenisha
+Kenneth
+Kenyetta
+Kevin
+Kiana
+Kiera
+Kiesha
+Kiley
+Kimber
+Kimberli
+Kimberlie
+Kimbery
+Kimiko
+Kindra
+Kirby
+Kourtney
+Kristel
+Krysta
+Kym
+Kymberly
+Lady
+Laila
+Lane
+Lanell
+Larae
+Laraine
+Larhonda
+Larisa
+Laronda
+Lasandra
+Lashunda
+Latashia
+Latesha
+Latia
+Laticia
+Latoria
+Latrina
+Launa
+Laure
+Laurice
+Laurine
+Lavera
+Laverna
+Lavonia
+Lawana
+Lawanna
+Layla
+Le
+Leana
+Leeanna
+Leeanne
+Leighann
+Lenna
+Leonarda
+Leonie
+Leonila
+Leonore
+Lera
+Lesia
+Letty
+Lexie
+Lezlie
+Liberty
+Librada
+Lien
+Ligia
+Lili
+Lilla
+Ling
+Lisbeth
+Lisha
+Livia
+Loan
+Loida
+Loma
+Loni
+Lonna
+Lore
+Loree
+Loriann
+Lory
+Louanne
+Louie
+Louvenia
+Lovella
+Loyce
+Lucina
+Lucrecia
+Ludie
+Luis
+Luise
+Luna
+Lurline
+Luvenia
+Lynell
+Lynelle
+Lynsey
+Macie
+Macy
+Madaline
+Madalyn
+Madie
+Madlyn
+Magaly
+Magan
+Magaret
+Magdalen
+Magen
+Maia
+Maida
+Malika
+Malisa
+Mammie
+Mana
+Manda
+Maple
+Marceline
+Maren
+Margareta
+Margarett
+Margaretta
+Margarite
+Margart
+Margeret
+Marget
+Margit
+Margorie
+Marguerita
+Margurite
+Mariel
+Marilu
+Mario
+Markita
+Marlana
+Marleen
+Marlen
+Marna
+Marni
+Marquetta
+Martin
+Marya
+Maryalice
+Maryam
+Masako
+Mathilde
+Matthew
+Maurice
+Maybell
+Maye
+Mckenzie
+Meggan
+Meghann
+Melaine
+Melany
+Melissia
+Mellie
+Melynda
+Meri
+Meridith
+Merilyn
+Merlene
+Merna
+Merri
+Micah
+Michal
+Micheal
+Michel
+Micheline
+Michiko
+Micki
+Miguelina
+Mika
+Mikki
+Mila
+Milagro
+Min
+Minh
+Minna
+Mireille
+Mirtha
+Monserrate
+Mozella
+Mui
+Myrle
+Myrtie
+Myung
+Nakita
+Nana
+Nancie
+Naoma
+Narcisa
+Natosha
+Nelia
+Neoma
+Nerissa
+Neta
+Nga
+Ngoc
+Nickie
+Nickole
+Nicky
+Nicol
+Nicolle
+Nieves
+Nikia
+Nikole
+Noella
+Noma
+Norah
+Norman
+Nyla
+Obdulia
+Odilia
+Olympia
+Omega
+Oneida
+Ossie
+Ozella
+Pamelia
+Pamella
+Pandora
+Particia
+Patience
+Patrina
+Pauletta
+Pearle
+Pearlene
+Penney
+Penni
+Perry
+Petrina
+Pia
+Piedad
+Piper
+Porsha
+Qiana
+Queenie
+Quiana
+Rachele
+Rachell
+Raeann
+Raina
+Ramonita
+Rana
+Ranae
+Randee
+Rasheeda
+Raye
+Raylene
+Rayna
+Reatha
+Rebbeca
+Rebbecca
+Reda
+Refugio
+Regena
+Regenia
+Reiko
+Remedios
+Renetta
+Retta
+Rikki
+Risa
+Rochell
+Romaine
+Romelia
+Ronald
+Roni
+Ronni
+Rosamond
+Rosana
+Rosann
+Rosia
+Rozella
+Rubie
+Rudy
+Sachiko
+Salena
+Salome
+Sam
+Samara
+Samira
+Sang
+Sanora
+Santana
+Santina
+Sari
+Sarina
+Savanna
+Scarlet
+Scott
+Sean
+Sebrina
+Selene
+Serina
+Sha
+Shakira
+Shane
+Shaneka
+Shanelle
+Shanice
+Sharita
+Sharleen
+Sharyl
+Shaun
+Shaunna
+Shavon
+Shavonne
+Shawana
+Shawnda
+Shawnee
+Shawnna
+Shea
+Sheilah
+Shela
+Shelba
+Shemika
+Shenita
+Sherley
+Sherly
+Sherlyn
+Sherrell
+Shery
+Shira
+Shirleen
+Shona
+Shonna
+Shoshana
+Shu
+Signe
+Silva
+Silvana
+Sindy
+Skye
+Slyvia
+So
+Solange
+Sommer
+Son
+Song
+Soo
+Sook
+Soraya
+Spring
+Stefania
+Steffanie
+Stephane
+Stephen
+Steven
+Stevie
+Sudie
+Sueann
+Suellen
+Suk
+Sung
+Suzann
+Synthia
+Syreeta
+Tabetha
+Takisha
+Talisha
+Talitha
+Tam
+Tamala
+Tameika
+Tamekia
+Tamesha
+Tamica
+Tammara
+Tanja
+Tanna
+Tarah
+Tashia
+Tawny
+Temeka
+Tennie
+Tennille
+Tequila
+Tereasa
+Terresa
+Tesha
+Thalia
+Thanh
+Thao
+Theo
+Theola
+Theresia
+Thomasine
+Thresa
+Thu
+Tianna
+Tiesha
+Tiny
+Tomika
+Tomoko
+Tonda
+Tonie
+Toshiko
+Towanda
+Trang
+Trinity
+Tristan
+Trudi
+Trudie
+Trula
+Tuyet
+Twana
+Tyesha
+Tyler
+Usha
+Val
+Valda
+Valery
+Vallie
+Vanda
+Vanesa
+Vanita
+Vannessa
+Vella
+Velvet
+Vena
+Venice
+Veola
+Verdell
+Verdie
+Verena
+Verlene
+Verlie
+Vernetta
+Versie
+Veta
+Vincenza
+Vinnie
+Violette
+Vivan
+Vivien
+Vivienne
+Wai
+Walter
+Waltraud
+Wei
+Willette
+Willia
+Wonda
+Yan
+Yang
+Yanira
+Yee
+Yen
+Yi
+Ying
+Yolande
+Yolando
+Yukiko
+Yuko
+Yun
+Zita
+Zofia
+Zulema
+Adah
+Adam
+Adena
+Adrien
+Agnus
+Agripina
+Agueda
+Ai
+Aide
+Aiko
+Ailene
+Akilah
+Alaine
+Alane
+Alayna
+Albert
+Alease
+Aleen
+Aleisha
+Aleshia
+Alessandra
+Alfredia
+Alita
+Alleen
+Allena
+Allyn
+Alona
+Alverta
+Alysa
+Amal
+Amberly
+Amee
+Amiee
+Amira
+An
+Analisa
+Anamaria
+Andera
+Angelyn
+Angila
+Angla
+Anisa
+Anisha
+Anja
+Anjelica
+Annamaria
+Annelle
+Annika
+Annita
+Antonetta
+Apolonia
+Ara
+Ardath
+Ardelia
+Ardelle
+Argelia
+Argentina
+Arianne
+Arica
+Arlean
+Arletha
+Arlinda
+Arlyne
+Armandina
+Arnette
+Ashanti
+Ashlea
+Asley
+Audria
+Audrie
+Aurore
+Austin
+Avery
+Avril
+Ayako
+Azalee
+Azzie
+Bao
+Barabara
+Bari
+Barrie
+Basilia
+Beata
+Beatris
+Beaulah
+Bebe
+Becki
+Bee
+Belkis
+Bell
+Berna
+Bernarda
+Bernardina
+Bernardine
+Berry
+Bethanie
+Bettyann
+Beula
+Bibi
+Billi
+Blake
+Blondell
+Blossom
+Bobette
+Bok
+Bong
+Brande
+Breana
+Breann
+Brett
+Brian
+Britta
+Brittaney
+Brittanie
+Britteny
+Brittny
+Bruna
+Bryanna
+Buena
+Bula
+Bulah
+Bunny
+Burma
+Calandra
+Calista
+Camellia
+Camie
+Camila
+Cammy
+Candra
+Carita
+Carlee
+Carlena
+Carli
+Carlita
+Carlos
+Carmelia
+Carmina
+Carola
+Carolin
+Caroll
+Caroyln
+Carry
+Carylon
+Casimira
+Cassaundra
+Cassey
+Cassi
+Cassondra
+Cassy
+Catherin
+Catherina
+Cathern
+Catheryn
+Catrice
+Cayla
+Cecille
+Celesta
+Celinda
+Celsa
+Ceola
+Chae
+Chan
+Chanell
+Chanelle
+Chang
+Chantay
+Chara
+Charis
+Charita
+Charlena
+Charlesetta
+Charlott
+Charlsie
+Charlyn
+Charmain
+Chasidy
+Chassidy
+Cher
+Chere
+Cheree
+Cherelle
+Cherilyn
+Cherlyn
+Chery
+Chia
+Chieko
+China
+Ching
+Christia
+Christinia
+Chu
+Cinderella
+Cindie
+Cira
+Clarence
+Claretha
+Claretta
+Clarinda
+Claris
+Clarisa
+Classie
+Claude
+Claudie
+Clelia
+Clemencia
+Cleotilde
+Clora
+Clorinda
+Codi
+Colby
+Colene
+Collene
+Conception
+Concha
+Contessa
+Coralee
+Coralie
+Cordia
+Corrin
+Corrinne
+Creola
+Cris
+Crysta
+Crystle
+Cuc
+Curtis
+Cyndy
+Cyrstal
+Dacia
+Dagny
+Daina
+Daine
+Dakota
+Dalene
+Dan
+Daniell
+Danille
+Dann
+Dannie
+Danyel
+Danyell
+Darcel
+Darcey
+Darlena
+Daysi
+Deadra
+Deandrea
+Debera
+Dede
+Deeanna
+Deedee
+Deedra
+Deetta
+Deja
+Delaine
+Delcie
+Delila
+Delmy
+Deloise
+Deloras
+Delorse
+Delsie
+Demetrius
+Denae
+Denisse
+Denny
+Denyse
+Deon
+Deonna
+Despina
+Dia
+Dierdre
+Dinorah
+Dion
+Divina
+Dodie
+Dominica
+Domitila
+Donella
+Donette
+Dong
+Donnetta
+Donnette
+Doreatha
+Dorethea
+Doretta
+Doria
+Dorla
+Dorthey
+Dotty
+Drew
+Dulcie
+Dusti
+Dwana
+Earlie
+Ebonie
+Edra
+Edris
+Edyth
+Ehtel
+Eilene
+Ela
+Eladia
+Elane
+Elene
+Elenore
+Eleonor
+Eleonora
+Eleonore
+Elfreda
+Elfrieda
+Elidia
+Elin
+Elina
+Elinore
+Eliz
+Elizabet
+Ellamae
+Ellan
+Ellena
+Elli
+Ellis
+Elmer
+Elsy
+Elwanda
+Elza
+Emelina
+Emeline
+Emely
+Emerald
+Emerita
+Emmaline
+Enda
+Eryn
+Estefana
+Etha
+Etsuko
+Ettie
+Eufemia
+Eugena
+Eulah
+Euna
+Eura
+Eusebia
+Eustolia
+Evelynn
+Evia
+Evita
+Ewa
+Fairy
+Fatimah
+Faviola
+Felicidad
+Fermina
+Fernande
+Fidela
+Fidelia
+Fleta
+Floria
+Florrie
+Francene
+Franchesca
+Fransisca
+Fred
+Fredda
+Fredricka
+Frida
+Gala
+Galina
+Gaynelle
+Gema
+Genesis
+Genevie
+Genevive
+Genna
+Genny
+Georgann
+Georgeann
+Georgeanna
+Georgiann
+Georgianne
+Gerald
+Gertrudis
+Gertude
+Ghislaine
+Gianna
+Gidget
+Gilberte
+Gilma
+Ginette
+Gita
+Giuseppina
+Glayds
+Glenn
+Glynis
+Golden
+Grayce
+Grazyna
+Gregory
+Gricelda
+Grisel
+Gwyneth
+Halley
+Han
+Hang
+Harold
+Hassie
+Heidy
+Heike
+Helaine
+Herma
+Hermila
+Herta
+Hertha
+Hiedi
+Hien
+Hisako
+Hsiu
+Hue
+Hwa
+Hyo
+Ileen
+Illa
+Iraida
+Isadora
+Isobel
+Ivelisse
+Ivey
+Izetta
+Izola
+Ja
+Jacelyn
+Jacinda
+Jack
+Jackelyn
+Jackqueline
+Jacquetta
+Jacqui
+Jacquie
+Jaimee
+Jalisa
+Jama
+Jame
+Jamee
+Jamika
+Janean
+Janee
+Janella
+Jani
+Janiece
+Janise
+Jannet
+January
+Janyce
+Jaquelyn
+Jaye
+Jaymie
+Jayna
+Jeanelle
+Jeanett
+Jeanice
+Jeanmarie
+Jeannetta
+Jeffie
+Jeffrey
+Jenae
+Jene
+Jenee
+Jeneva
+Jennell
+Jennine
+Jeremy
+Jerica
+Jerlene
+Jerrica
+Jessia
+Jessika
+Jestine
+Jesusita
+Jetta
+Ji
+Jinny
+Joane
+Joannie
+Joaquina
+Joette
+Johanne
+Johna
+Johnette
+Johnsie
+Joie
+Joline
+Jolyn
+Jon
+Jone
+Jong
+Jonie
+Josefine
+Joshua
+Josphine
+Jovan
+Joya
+Jude
+Jule
+Julene
+Julieann
+Julietta
+Julio
+Junie
+Junko
+Justa
+Ka
+Kai
+Kaila
+Kaleigh
+Kallie
+Kalyn
+Kamala
+Kamilah
+Kandis
+Kandra
+Kanesha
+Kanisha
+Kareen
+Karena
+Karima
+Karisa
+Karly
+Karlyn
+Karole
+Karoline
+Karry
+Kary
+Kasha
+Kasi
+Katelin
+Katelynn
+Katerine
+Katharyn
+Katheleen
+Katherina
+Kathline
+Kathrin
+Kayce
+Kaycee
+Keeley
+Keila
+Keira
+Keith
+Keitha
+Kelsi
+Kemberly
+Kenda
+Kendal
+Kenia
+Kera
+Keren
+Kerstin
+Keturah
+Keva
+Khadijah
+Khalilah
+Kiersten
+Kimbra
+Kimi
+Kina
+Kirstie
+Kit
+Kittie
+Kiyoko
+Kizzie
+Klara
+Kortney
+Krishna
+Krissy
+Kristeen
+Kristle
+Krysten
+Krystin
+Krystina
+Kyoko
+Lachelle
+Lacresha
+Ladawn
+Lael
+Lahoma
+Laine
+Lajuana
+Lakeesha
+Lakendra
+Lakenya
+Lakia
+Lakiesha
+Lakita
+Lala
+Lamonica
+Lanelle
+Lang
+Lanie
+Lannie
+Lanora
+Laquanda
+Laree
+Larita
+Larraine
+Larry
+Lashandra
+Lashaun
+Lashaunda
+Lashawna
+Lashawnda
+Lashay
+Lashell
+Lashon
+Lasonya
+Latarsha
+Latina
+Latoyia
+Latrisha
+Lauralee
+Lauran
+Laurena
+Laurence
+Laurinda
+Lauryn
+Lavelle
+Lavenia
+Laveta
+Lavette
+Lavona
+Lavone
+Lavonna
+Lawrence
+Layne
+Lean
+Leanora
+Lecia
+Leena
+Leia
+Leida
+Leigha
+Leisha
+Lekisha
+Lelah
+Lenita
+Leo
+Leoma
+Leon
+Leonia
+Leonida
+Leontine
+Lesha
+Lester
+Letisha
+Lewis
+Lianne
+Libbie
+Lieselotte
+Lilli
+Lillia
+Lilliam
+Lilliana
+Lindsy
+Linn
+Lisabeth
+Lisandra
+Lizeth
+Lizzette
+Logan
+Loise
+Londa
+Loralee
+Lorean
+Loreta
+Lorette
+Loria
+Lorilee
+Lorina
+Loris
+Lorita
+Lorriane
+Lorrine
+Louetta
+Loura
+Lourie
+Love
+Lovetta
+Luanna
+Luba
+Luci
+Lucilla
+Ludivina
+Luetta
+Lurlene
+Lyndia
+Lynetta
+Lynna
+Mabelle
+Madalene
+Maddie
+Madelaine
+Madelene
+Mafalda
+Magali
+Mahalia
+Maile
+Maire
+Maisha
+Maisie
+Makeda
+Malena
+Malka
+Mallie
+Malorie
+Malvina
+Man
+Mandie
+Manie
+Many
+Mao
+Maragaret
+Maragret
+Marcelene
+Marcell
+Marcene
+Marchelle
+Mardell
+Marg
+Margene
+Margert
+Margherita
+Margrett
+Margy
+Marhta
+Marianela
+Marica
+Maricruz
+Mariella
+Marielle
+Mariette
+Mariko
+Marin
+Marinda
+Marine
+Maris
+Marisha
+Marivel
+Marketta
+Marlin
+Marline
+Marquitta
+Marshall
+Marth
+Marvella
+Marvis
+Marx
+Maryanna
+Marybelle
+Maryetta
+Maryland
+Maryln
+Marylouise
+Marylynn
+Maryrose
+Matha
+Maurita
+Maxima
+Maximina
+Mayola
+Meda
+Melani
+Melania
+Melda
+Melia
+Melida
+Melita
+Melodee
+Melodi
+Melvin
+Mendy
+Mercedez
+Merideth
+Merissa
+Merlyn
+Merrie
+Merrilee
+Merrill
+Mertie
+Mica
+Micha
+Michaele
+Michelina
+Miesha
+Mignon
+Mikaela
+Mike
+Miki
+Milda
+Milly
+Minda
+Ming
+Minta
+Mirella
+Misha
+Miss
+Mistie
+Mitchell
+Mitsue
+Mitsuko
+Mitzie
+Miyoko
+Monet
+Monnie
+Moon
+Mora
+Moriah
+Muoi
+Myesha
+Myrl
+Myrta
+Na
+Nadene
+Naida
+Nakesha
+Nam
+Nancee
+Nancey
+Natacha
+Natalya
+Natashia
+Natisha
+Necole
+Neda
+Neely
+Neida
+Nenita
+Neomi
+Nery
+Nevada
+Ngan
+Nguyet
+Nicholle
+Nida
+Niesha
+Nisha
+Nobuko
+Nohemi
+Noriko
+Nu
+Nubia
+Oda
+Odelia
+Olene
+Olevia
+Olimpia
+Olinda
+Onie
+Onita
+Oralee
+Oretha
+Oscar
+Otelia
+Otha
+Ozell
+Ozie
+Pa
+Palmira
+Pamila
+Pamula
+Parthenia
+Pasty
+Patria
+Paulene
+Paulita
+Paz
+Pearly
+Peg
+Pei
+Peter
+Petronila
+Phebe
+Phung
+Phylicia
+Ping
+Pok
+Porsche
+Priscila
+Providencia
+Pura
+Quinn
+Quyen
+Rachal
+Raelene
+Raguel
+Raisa
+Ranee
+Raymond
+Raymonde
+Rea
+Reagan
+Reanna
+Rebecka
+Reena
+Refugia
+Regine
+Reginia
+Reita
+Rema
+Remona
+Renay
+Renda
+Renna
+Ressie
+Reynalda
+Rheba
+Rhona
+Ria
+Ricarda
+Ricki
+Rickie
+Rima
+Riva
+Rivka
+Robbi
+Robbyn
+Robena
+Roberto
+Rochel
+Rolande
+Rory
+Rosamaria
+Roselee
+Roselia
+Roseline
+Roselle
+Rosena
+Rosenda
+Rosette
+Rosio
+Rossana
+Rossie
+Rosy
+Roxy
+Roy
+Royce
+Rozanne
+Rubi
+Russell
+Rutha
+Ruthanne
+Ruthe
+Ryann
+Sacha
+Sadye
+Sage
+Salley
+Samella
+Sammy
+Samuel
+Sana
+Sanda
+Sandee
+Sandie
+Sarai
+Saran
+Saturnina
+Sau
+Scottie
+Season
+See
+Seema
+Sena
+Senaida
+September
+Serafina
+Serita
+Setsuko
+Shae
+Shakia
+Shakita
+Shala
+Shalanda
+Shalon
+Shan
+Shanae
+Shandi
+Shanel
+Shaniqua
+Shantae
+Shantay
+Shantelle
+Shanti
+Shaquana
+Shaquita
+Sharan
+Sharda
+Sharell
+Sharice
+Sharie
+Sharika
+Sharilyn
+Sharmaine
+Sharolyn
+Sharri
+Shaunda
+Shaunta
+Shaunte
+Shavonda
+Shawanna
+Shawnta
+Shayne
+Sheba
+Shella
+Shemeka
+Shenika
+Shenna
+Shera
+Sherell
+Sherice
+Sheridan
+Sherika
+Sherill
+Sherise
+Sherlene
+Sherril
+Sheryll
+Shila
+Shiloh
+Shin
+Shirely
+Shirl
+Shizue
+Shizuko
+Shondra
+Shonta
+Shyla
+Sima
+Simonne
+Sina
+Sirena
+Siu
+Sixta
+Soila
+Sol
+Somer
+Sona
+Sparkle
+Stacee
+Stasia
+Stefany
+Stepanie
+Stephania
+Stephnie
+Suanne
+Sulema
+Sumiko
+Sunday
+Sunni
+Susy
+Suzi
+Svetlana
+Sylvie
+Ta
+Tai
+Taina
+Taisha
+Tajuana
+Takako
+Tama
+Tambra
+Tamisha
+Tammera
+Tandra
+Tandy
+Taneka
+Taren
+Tari
+Tarra
+Tashina
+Tasia
+Tatum
+Tatyana
+Taunya
+Tawna
+Tayna
+Tegan
+Teisha
+Telma
+Temika
+Tempie
+Temple
+Tenesha
+Teofila
+Teresia
+Terica
+Terina
+Terisa
+Terrell
+Terrilyn
+Theressa
+Thi
+Thomasena
+Thora
+Tien
+Tiera
+Tifany
+Tiffaney
+Tijuana
+Tilda
+Timika
+Timothy
+Tinisha
+Tisa
+Tish
+Tobi
+Tobie
+Toccara
+Toi
+Tomi
+Tomiko
+Tommye
+Tona
+Tonette
+Tonisha
+Tonita
+Tora
+Torie
+Torri
+Torrie
+Tory
+Toshia
+Tova
+Tran
+Travis
+Treasa
+Treena
+Trinh
+Troy
+Tu
+Tula
+Twanda
+Twanna
+Tyisha
+Tynisha
+Ula
+Ulrike
+Un
+Ute
+Valene
+Valentine
+Valeri
+Valrie
+Vanetta
+Vania
+Vanna
+Vannesa
+Vashti
+Vasiliki
+Venetta
+Vennie
+Verline
+Vernia
+Vernon
+Veronika
+Veronique
+Vertie
+Vi
+Victor
+Victorina
+Viki
+Vinita
+Virgen
+Virgil
+Voncile
+Wan
+Waneta
+Wanetta
+Wava
+Wen
+Wendie
+Wendolyn
+Wenona
+Wesley
+Whitley
+Wilhemina
+Willena
+Willetta
+Williemae
+Willodean
+Willow
+Winter
+Wynell
+Xenia
+Xiao
+Xochitl
+Xuan
+Yaeko
+Yael
+Yahaira
+Yajaira
+Yasmine
+Yasuko
+Yelena
+Yer
+Yessenia
+Yevette
+Yon
+Yoshie
+Youlanda
+Yuette
+Yuk
+Yuki
+Yulanda
+Yung
+Yuonne
+Yuri
+Yuriko
+Yvone
+Zada
+Zana
+Zenia
+Zetta
+Zonia
[19/21] incubator-usergrid git commit: USERGRID-871: fix broken load
test
Posted by to...@apache.org.
USERGRID-871: fix broken load test
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/d6368af5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/d6368af5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/d6368af5
Branch: refs/heads/two-dot-o-dev
Commit: d6368af5ca08b2671b3cc6fe5d06b8d9dae658ed
Parents: 32fefb9
Author: Mike Dunker <md...@apigee.com>
Authored: Mon Aug 3 12:18:02 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Mon Aug 3 12:18:02 2015 -0700
----------------------------------------------------------------------
.../loadtests/runAuditGetCollectionEntities.sh | 4 +-
stack/loadtests/runRandomEntityByUuidTest.sh | 2 +-
.../usergrid/scenarios/AuditScenarios.scala | 1 +
.../org/apache/usergrid/settings/Settings.scala | 72 +++++++++++++++++---
.../simulations/ConfigurableSimulation.scala | 1 +
5 files changed, 67 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d6368af5/stack/loadtests/runAuditGetCollectionEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runAuditGetCollectionEntities.sh b/stack/loadtests/runAuditGetCollectionEntities.sh
index f34ea54..673c2b7 100755
--- a/stack/loadtests/runAuditGetCollectionEntities.sh
+++ b/stack/loadtests/runAuditGetCollectionEntities.sh
@@ -38,7 +38,8 @@ ADMIN_PASSWORD=test
ORG=gatling
APP=millionentities
SCENARIO_TYPE=auditGetCollectionEntities
-SEARCH_LIMIT=1000
+SEARCH_LIMIT=177
+SEARCH_QUERY=order%20by%20name
AUTH_TYPE=token
TOKEN_TYPE=management
@@ -57,6 +58,7 @@ mvn gatling:execute \
-DtokenType=${TOKEN_TYPE} \
-DauditUuidFilename=${AUDIT_UUID_FILENAME} \
-DsearchLimit=${SEARCH_LIMIT} \
+-DsearchQuery=${SEARCH_QUERY} \
-Dgatling.simulationClass=org.apache.usergrid.simulations.AuditSimulation
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d6368af5/stack/loadtests/runRandomEntityByUuidTest.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runRandomEntityByUuidTest.sh b/stack/loadtests/runRandomEntityByUuidTest.sh
index 4a83eb5..50f15e8 100755
--- a/stack/loadtests/runRandomEntityByUuidTest.sh
+++ b/stack/loadtests/runRandomEntityByUuidTest.sh
@@ -55,7 +55,7 @@ AUTH_TYPE=anonymous
TOKEN_TYPE=management
END_CONDITION_TYPE=minutesElapsed
#END_CONDITION_TYPE=requestCount
-END_MINUTES=2
+END_MINUTES=10
END_REQUEST_COUNT=100
#Execute the test
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d6368af5/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
index b58ee07..93440ac 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
@@ -43,6 +43,7 @@ object AuditScenarios {
(if (Settings.searchLimit > 0) s"limit=${Settings.searchLimit}&" else "")
// remove trailing & or ?
+ println (url.dropRight(1))
url.dropRight(1)
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d6368af5/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index 3c1c2e2..663d4d6 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -116,6 +116,7 @@ object Settings {
val overallEntitySeed = initIntSetting(ConfigProperties.EntitySeed)
val searchLimit:Int = initIntSetting(ConfigProperties.SearchLimit)
val searchQuery = initStrSetting(ConfigProperties.SearchQuery)
+ println(s"searchQuery=${searchQuery}")
val endConditionType = initStrSetting(ConfigProperties.EndConditionType)
val endMinutes:Int = initIntSetting(ConfigProperties.EndMinutes)
val endRequestCount:Int = initIntSetting(ConfigProperties.EndRequestCount)
@@ -153,27 +154,76 @@ object Settings {
private val dummyTestCsv = ConfigProperties.getDefault(ConfigProperties.UuidFilename).toString
private val dummyAuditCsv = ConfigProperties.getDefault(ConfigProperties.AuditUuidFilename).toString
private val dummyAuditFailedCsv = ConfigProperties.getDefault(ConfigProperties.FailedUuidFilename).toString
+ private val dummyCaptureCsv = "/tmp/notused.csv"
private val uuidFilename = initStrSetting(ConfigProperties.UuidFilename)
private val auditUuidFilename = initStrSetting(ConfigProperties.AuditUuidFilename)
private val failedUuidFilename = initStrSetting(ConfigProperties.FailedUuidFilename)
// feeds require valid files, even if test won't be run
- val feedUuids = uuidFilename != dummyTestCsv && scenarioType == ScenarioType.UuidRandomInfinite
- val feedUuidFilename = uuidFilename
+ val feedUuids = scenarioType match {
+ case ScenarioType.UuidRandomInfinite => true
+ case _ => false
+ }
+ val feedUuidFilename = scenarioType match {
+ case ScenarioType.UuidRandomInfinite => uuidFilename
+ case _ => dummyTestCsv
+ }
+ if (feedUuids && feedUuidFilename == dummyTestCsv) {
+ println("Scenario requires CSV file containing UUIDs")
+ System.exit(1)
+ }
- val feedAuditUuids = uuidFilename != dummyAuditCsv && scenarioType == ScenarioType.AuditVerifyCollectionEntities
- val feedAuditUuidFilename = auditUuidFilename
+ val feedAuditUuids = scenarioType match {
+ case ScenarioType.AuditVerifyCollectionEntities => true
+ case _ => false
+ }
+ val feedAuditUuidFilename = scenarioType match {
+ case ScenarioType.AuditVerifyCollectionEntities => auditUuidFilename
+ case _ => dummyAuditCsv
+ }
+ if (feedAuditUuids && feedAuditUuidFilename == dummyAuditCsv) {
+ println("Scenario requires CSV file containing audit UUIDs")
+ System.exit(1)
+ }
- // also uses uuidFilename
- val captureUuids = uuidFilename != dummyTestCsv && (scenarioType == ScenarioType.LoadEntities || scenarioType == ScenarioType.GetByNameSequential)
- val captureUuidFilename = uuidFilename
+ val captureUuidFilename = scenarioType match {
+ case ScenarioType.LoadEntities => uuidFilename
+ case ScenarioType.GetByNameSequential => uuidFilename
+ case _ => dummyCaptureCsv // won't write to this file
+ }
+ val captureUuids = if (captureUuidFilename == dummyCaptureCsv) false
+ else scenarioType match {
+ case ScenarioType.LoadEntities => true
+ case ScenarioType.GetByNameSequential => true
+ case _ => false
+ }
- val captureAuditUuids = (auditUuidFilename != dummyAuditCsv && scenarioType == ScenarioType.AuditGetCollectionEntities) ||
- (failedUuidFilename != dummyAuditFailedCsv && scenarioType == ScenarioType.AuditVerifyCollectionEntities)
- println(s"auditUuidFilename=$auditUuidFilename")
+ val captureAuditUuidFilename = scenarioType match {
+ case ScenarioType.AuditGetCollectionEntities => auditUuidFilename
+ case ScenarioType.AuditVerifyCollectionEntities => failedUuidFilename
+ case _ => dummyCaptureCsv // won't write to this file
+ }
+ if (scenarioType == ScenarioType.AuditGetCollectionEntities && captureAuditUuidFilename == dummyCaptureCsv) {
+ println("Scenario requires CSV file location to capture audit UUIDs")
+ System.exit(1)
+ }
+ val captureAuditUuids = (scenarioType == ScenarioType.AuditGetCollectionEntities) ||
+ (scenarioType == ScenarioType.AuditVerifyCollectionEntities && captureAuditUuidFilename != dummyAuditFailedCsv)
+
+ //val feedUuids = uuidFilename != dummyTestCsv && scenarioType == ScenarioType.UuidRandomInfinite
+ //val feedAuditUuids = uuidFilename != dummyAuditCsv && scenarioType == ScenarioType.AuditVerifyCollectionEntities
+ // val captureUuids = uuidFilename != dummyTestCsv && (scenarioType == ScenarioType.LoadEntities || scenarioType == ScenarioType.GetByNameSequential)
+
+ //val captureAuditUuids = (auditUuidFilename != dummyAuditCsv && scenarioType == ScenarioType.AuditGetCollectionEntities) ||
+ // (failedUuidFilename != dummyAuditFailedCsv && scenarioType == ScenarioType.AuditVerifyCollectionEntities)
+ println(s"feedUuids=$feedUuids")
+ println(s"feedUuidFilename=$feedUuidFilename")
+ println(s"feedAuditUuids=$feedAuditUuids")
+ println(s"feedAuditUuidFilename=$feedAuditUuidFilename")
+ println(s"captureUuids=$captureUuids")
+ println(s"captureUuidFilename=$captureUuidFilename")
println(s"captureAuditUuids=$captureAuditUuids")
- val captureAuditUuidFilename = if (scenarioType == ScenarioType.AuditVerifyCollectionEntities) failedUuidFilename else auditUuidFilename
println(s"captureAuditUuidFilename=$captureAuditUuidFilename")
val purgeUsers:Int = initIntSetting(ConfigProperties.PurgeUsers)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d6368af5/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
index b923c46..e52e3d8 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
@@ -44,6 +44,7 @@ class ConfigurableSimulation extends Simulation {
case ScenarioType.NameRandomInfinite => EntityCollectionScenarios.getRandomEntitiesByName
case ScenarioType.UuidRandomInfinite => EntityCollectionScenarios.getRandomEntitiesByUuid
case ScenarioType.GetByNameSequential => EntityCollectionScenarios.getEntitiesByNameSequential
+ case _ => null
}
}
[16/21] incubator-usergrid git commit: USERGRID-871: add get by name
sequential scenario, plus fix Base64
Posted by to...@apache.org.
USERGRID-871: add get by name sequential scenario, plus fix Base64
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/15c1c59c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/15c1c59c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/15c1c59c
Branch: refs/heads/two-dot-o-dev
Commit: 15c1c59cef3092477e734de54a1d49db7e7df2fe
Parents: 0a0ef1b
Author: Mike Dunker <md...@apigee.com>
Authored: Thu Jul 30 17:08:43 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Thu Jul 30 17:08:43 2015 -0700
----------------------------------------------------------------------
.../loadtests/runGetEntitiesByNameSequential.sh | 106 +++++++++++++++++++
.../datagenerators/FeederGenerator.scala | 2 +-
.../apache/usergrid/enums/ScenarioType.scala | 4 +-
.../scenarios/EntityCollectionScenarios.scala | 52 ++++++++-
.../usergrid/scenarios/EntityScenarios.scala | 4 +-
.../org/apache/usergrid/settings/Headers.scala | 4 +-
.../org/apache/usergrid/settings/Settings.scala | 11 +-
.../simulations/ConfigurableSimulation.scala | 1 +
.../src/test/resources/logback-test.xml | 1 -
9 files changed, 170 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/15c1c59c/stack/loadtests/runGetEntitiesByNameSequential.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runGetEntitiesByNameSequential.sh b/stack/loadtests/runGetEntitiesByNameSequential.sh
new file mode 100755
index 0000000..d97edc2
--- /dev/null
+++ b/stack/loadtests/runGetEntitiesByNameSequential.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 8 ] || die "At least 8 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) NUM_ENTITIES ENTITY_WORKER_NUM ENTITY_WORKER_COUNT [UUID_FILENAME]"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+CONSTANT_USERS_PER_SEC="$4"
+CONSTANT_USERS_DURATION="$5"
+NUM_ENTITIES="$6"
+ENTITY_WORKER_NUM="$7"
+ENTITY_WORKER_COUNT="$8"
+UUID_FILENAME="$9"
+
+shift 9
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+#APP=$(date +%s)
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
+CREATE_ORG=false
+ORG=gatling
+CREATE_APP=false
+APP=millionentities
+COLLECTION=trivialentities
+SANDBOX_COLLECTION=false
+SCENARIO_TYPE=getByNameSequential
+LOAD_ENTITIES=false
+
+SKIP_SETUP=false
+#SEARCH_QUERY=order%20by%20specials%20desc
+#SEARCH_LIMIT=1000
+ENTITY_TYPE=trivial
+ENTITY_PREFIX=trivial
+ENTITY_SEED=1
+AUTH_TYPE=token
+TOKEN_TYPE=management
+END_CONDITION_TYPE=minutesElapsed
+#END_CONDITION_TYPE=requestCount
+END_MINUTES=2
+END_REQUEST_COUNT=100
+
+#Execute the test
+mvn gatling:execute \
+-DskipSetup=${SKIP_SETUP} \
+-DcreateOrg=${CREATE_ORG} \
+-Dorg=${ORG} \
+-DcreateApp=${CREATE_APP} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
+-DloadEntities=${LOAD_ENTITIES} \
+-DnumEntities=${NUM_ENTITIES} \
+-DentityType=${ENTITY_TYPE} \
+-DentityPrefix=${ENTITY_PREFIX} \
+-DentitySeed=${ENTITY_SEED} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
+-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
+-Dcollection=${COLLECTION} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DendConditionType=${END_CONDITION_TYPE} \
+-DendMinutes=${END_MINUTES} \
+-DendRequestCount=${END_REQUEST_COUNT} \
+-DentityWorkerCount=${ENTITY_WORKER_COUNT} \
+-DentityWorkerNum=${ENTITY_WORKER_NUM} \
+-DuuidFilename=${UUID_FILENAME} \
+-DsandboxCollection=${SANDBOX_COLLECTION} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
+
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/15c1c59c/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
index f218b5b..09030f5 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
@@ -227,7 +227,7 @@ object FeederGenerator {
// println(entityName)
- Map("entityName" -> entityName, "entity" -> entity, "entityUrl" -> entityUrl, "validEntity" -> validEntity, "entityNum" -> (i+1).toString)
+ Map("entityName" -> entityName, "entity" -> entity, "entityUrl" -> entityUrl, "validEntity" -> validEntity, "entityNum" -> (i+1).toString, "seededEntityNum" -> seededVal.toString)
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/15c1c59c/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
index db9a3af..760c837 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
@@ -7,8 +7,10 @@ object ScenarioType {
val DeleteEntities = "deleteEntities"
val UpdateEntities = "updateEntities"
val UuidRandomInfinite = "uuidRandomInfinite"
+ val GetByNameSequential = "getByNameSequential"
- val Values = Seq(GetAllByCursor,NameRandomInfinite,LoadEntities,DeleteEntities,UpdateEntities,UuidRandomInfinite)
+ val Values = Seq(GetAllByCursor,NameRandomInfinite,LoadEntities,DeleteEntities,UpdateEntities,UuidRandomInfinite,
+ GetByNameSequential)
def isValid(str: String): Boolean = {
Values.contains(str)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/15c1c59c/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
index b661d9c..5f679ec 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -196,7 +196,7 @@ object EntityCollectionScenarios {
// 200 for success, 400 if already exists
.check(status.in(Seq(200)), extractCreateUuid(SessionVarUuid)))
.exec(session => {
- Settings.addUuid(session("entityNum").as[String].toInt, session(SessionVarUuid).as[String])
+ Settings.addUuid(session("seededEntityNum").as[String].toInt, session(SessionVarUuid).as[String])
session
})
}
@@ -268,4 +268,54 @@ object EntityCollectionScenarios {
exec(updateEntity)
}
}
+
+ /*
+ * Get by name sequential
+ */
+ val getEntityByNameSequentialAnonymous = exec(
+ doIf("${validEntity}", "yes") {
+ exec(http("GET entity by name sequential (anonymous)")
+ .get("/" + Settings.collection + "/${entityName}")
+ .headers(Headers.authAnonymous)
+ .check(status.is(200), extractCreateUuid(SessionVarUuid)))
+ .exec(session => {
+ Settings.addUuid(session("seededEntityNum").as[String].toInt, session(SessionVarUuid).as[String])
+ session
+ })
+ }
+ )
+
+ val getEntityByNameSequentialWithToken = exec(
+ doIf("${validEntity}", "yes") {
+ exec(http("GET entity by name sequential (anonymous)")
+ .get("/" + Settings.collection + "/${entityName}")
+ .headers(Headers.authToken)
+ .check(status.is(200), extractCreateUuid(SessionVarUuid)))
+ .exec(session => {
+ Settings.addUuid(session("seededEntityNum").as[String].toInt, session(SessionVarUuid).as[String])
+ session
+ })
+ }
+ )
+
+ val getEntitiesByNameSequential = scenario("Get entities by name sequentially")
+ .exec(injectTokenIntoSession())
+ .exec(injectAuthType())
+ .asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
+ feed(FeederGenerator.generateCustomEntityFeeder(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
+ /*.exec{
+ session => if (session("validEntity").as[String] == "yes") { println("Loading entity #" + session("entityNum").as[String]) }
+ session
+ }*/
+ .doIf(session => session("validEntity").as[String] == "yes") {
+ tryMax(5) {
+ doIfOrElse(_ => Settings.authType == AuthType.Anonymous) {
+ exec(getEntityByNameSequentialAnonymous)
+ } {
+ exec(getEntityByNameSequentialWithToken)
+ }
+ }
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/15c1c59c/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
index 65d0111..df1657b 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
@@ -18,9 +18,7 @@ package org.apache.usergrid.scenarios
import io.gatling.core.Predef._
import io.gatling.http.Predef._
-import org.apache.usergrid.datagenerators.{EntityDataGenerator, FeederGenerator}
-import org.apache.usergrid.helpers.{Extractors,Utils}
-import org.apache.usergrid.settings.{Headers, Settings}
+import org.apache.usergrid.settings.Headers
/**
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/15c1c59c/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
index 04c4d3b..d158f0c 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
- package org.apache.usergrid.settings
+package org.apache.usergrid.settings
- import org.apache.usergrid.enums.AuthType
+import org.apache.usergrid.enums.AuthType
/**
*
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/15c1c59c/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index 387fd24..e4be5c8 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -17,10 +17,7 @@
package org.apache.usergrid.settings
import java.io.{PrintWriter, FileOutputStream}
-import java.nio.charset.StandardCharsets
-import java.util.{Date, Base64}
-
-
+import javax.xml.bind.DatatypeConverter
import io.gatling.http.Predef._
import io.gatling.http.config.HttpProtocolBuilder
import org.apache.usergrid.datagenerators.FeederGenerator
@@ -86,7 +83,9 @@ object Settings {
val userSeed:Int = initIntSetting(ConfigProperties.UserSeed)
val appUser = initStrSetting(ConfigProperties.AppUser)
val appUserPassword = initStrSetting(ConfigProperties.AppUserPassword)
- val appUserBase64 = Base64.getEncoder.encodeToString((appUser + ":" + appUserPassword).getBytes(StandardCharsets.UTF_8))
+
+ // val appUserBase64 = Base64.getEncoder.encodeToString((appUser + ":" + appUserPassword).getBytes(StandardCharsets.UTF_8))
+ val appUserBase64: String = DatatypeConverter.printBase64Binary((appUser + ":" + appUserPassword).getBytes("UTF-8"))
val totalNumEntities:Int = initIntSetting(ConfigProperties.NumEntities)
val numDevices:Int = initIntSetting(ConfigProperties.NumDevices)
@@ -152,7 +151,7 @@ object Settings {
// UUID log file, have to go through this because creating a csv feeder with an invalid csv file fails at maven compile time
private val dummyCsv = ConfigProperties.getDefault(ConfigProperties.UuidFilename).toString
private val uuidFilename = initStrSetting(ConfigProperties.UuidFilename)
- val captureUuids = uuidFilename != dummyCsv && scenarioType == ScenarioType.LoadEntities
+ val captureUuids = uuidFilename != dummyCsv && (scenarioType == ScenarioType.LoadEntities || scenarioType == ScenarioType.GetByNameSequential)
val feedUuids = uuidFilename != dummyCsv && scenarioType == ScenarioType.UuidRandomInfinite
val captureUuidFilename = if (captureUuids) uuidFilename else dummyCsv
val feedUuidFilename = if (feedUuids) uuidFilename else dummyCsv
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/15c1c59c/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
index da5189e..b923c46 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
@@ -43,6 +43,7 @@ class ConfigurableSimulation extends Simulation {
case ScenarioType.GetAllByCursor => EntityCollectionScenarios.getEntityPagesToEnd
case ScenarioType.NameRandomInfinite => EntityCollectionScenarios.getRandomEntitiesByName
case ScenarioType.UuidRandomInfinite => EntityCollectionScenarios.getRandomEntitiesByUuid
+ case ScenarioType.GetByNameSequential => EntityCollectionScenarios.getEntitiesByNameSequential
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/15c1c59c/stack/loadtests/src/test/resources/logback-test.xml
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/resources/logback-test.xml b/stack/loadtests/src/test/resources/logback-test.xml
index dd39a3e..646582b 100644
--- a/stack/loadtests/src/test/resources/logback-test.xml
+++ b/stack/loadtests/src/test/resources/logback-test.xml
@@ -27,7 +27,6 @@
<!-- Uncomment for logging ALL HTTP request and responses -->
<!-- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="TRACE" /> -->
- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="TRACE" />
<!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
<!-- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="DEBUG" /> -->
[06/21] incubator-usergrid git commit: USERGRID-871: refactor Gatling
load testing code
Posted by to...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.all.last.txt
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.all.last.txt b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.all.last.txt
new file mode 100644
index 0000000..f9de3d4
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.all.last.txt
@@ -0,0 +1,88799 @@
+SMITH 1.006 1.006 1
+JOHNSON 0.810 1.816 2
+WILLIAMS 0.699 2.515 3
+JONES 0.621 3.136 4
+BROWN 0.621 3.757 5
+DAVIS 0.480 4.237 6
+MILLER 0.424 4.660 7
+WILSON 0.339 5.000 8
+MOORE 0.312 5.312 9
+TAYLOR 0.311 5.623 10
+ANDERSON 0.311 5.934 11
+THOMAS 0.311 6.245 12
+JACKSON 0.310 6.554 13
+WHITE 0.279 6.834 14
+HARRIS 0.275 7.109 15
+MARTIN 0.273 7.382 16
+THOMPSON 0.269 7.651 17
+GARCIA 0.254 7.905 18
+MARTINEZ 0.234 8.140 19
+ROBINSON 0.233 8.372 20
+CLARK 0.231 8.603 21
+RODRIGUEZ 0.229 8.832 22
+LEWIS 0.226 9.058 23
+LEE 0.220 9.278 24
+WALKER 0.219 9.497 25
+HALL 0.200 9.698 26
+ALLEN 0.199 9.897 27
+YOUNG 0.193 10.090 28
+HERNANDEZ 0.192 10.282 29
+KING 0.190 10.472 30
+WRIGHT 0.189 10.662 31
+LOPEZ 0.187 10.849 32
+HILL 0.187 11.035 33
+SCOTT 0.185 11.220 34
+GREEN 0.183 11.403 35
+ADAMS 0.174 11.577 36
+BAKER 0.171 11.748 37
+GONZALEZ 0.166 11.915 38
+NELSON 0.162 12.077 39
+CARTER 0.162 12.239 40
+MITCHELL 0.160 12.399 41
+PEREZ 0.155 12.554 42
+ROBERTS 0.153 12.707 43
+TURNER 0.152 12.859 44
+PHILLIPS 0.149 13.008 45
+CAMPBELL 0.149 13.157 46
+PARKER 0.146 13.302 47
+EVANS 0.141 13.443 48
+EDWARDS 0.137 13.580 49
+COLLINS 0.134 13.714 50
+STEWART 0.133 13.847 51
+SANCHEZ 0.130 13.977 52
+MORRIS 0.125 14.102 53
+ROGERS 0.123 14.225 54
+REED 0.122 14.347 55
+COOK 0.120 14.467 56
+MORGAN 0.118 14.585 57
+BELL 0.117 14.702 58
+MURPHY 0.117 14.819 59
+BAILEY 0.115 14.934 60
+RIVERA 0.113 15.047 61
+COOPER 0.113 15.160 62
+RICHARDSON 0.112 15.272 63
+COX 0.110 15.382 64
+HOWARD 0.110 15.492 65
+WARD 0.108 15.600 66
+TORRES 0.108 15.708 67
+PETERSON 0.107 15.815 68
+GRAY 0.106 15.921 69
+RAMIREZ 0.105 16.026 70
+JAMES 0.105 16.131 71
+WATSON 0.103 16.233 72
+BROOKS 0.103 16.336 73
+KELLY 0.102 16.438 74
+SANDERS 0.100 16.537 75
+PRICE 0.099 16.637 76
+BENNETT 0.099 16.736 77
+WOOD 0.098 16.834 78
+BARNES 0.097 16.931 79
+ROSS 0.096 17.027 80
+HENDERSON 0.095 17.122 81
+COLEMAN 0.095 17.217 82
+JENKINS 0.095 17.312 83
+PERRY 0.094 17.406 84
+POWELL 0.093 17.499 85
+LONG 0.092 17.591 86
+PATTERSON 0.092 17.684 87
+HUGHES 0.092 17.776 88
+FLORES 0.092 17.868 89
+WASHINGTON 0.092 17.959 90
+BUTLER 0.091 18.050 91
+SIMMONS 0.091 18.141 92
+FOSTER 0.091 18.231 93
+GONZALES 0.087 18.318 94
+BRYANT 0.087 18.405 95
+ALEXANDER 0.085 18.490 96
+RUSSELL 0.085 18.574 97
+GRIFFIN 0.084 18.659 98
+DIAZ 0.084 18.742 99
+HAYES 0.083 18.825 100
+MYERS 0.083 18.908 101
+FORD 0.082 18.990 102
+HAMILTON 0.082 19.072 103
+GRAHAM 0.082 19.154 104
+SULLIVAN 0.081 19.234 105
+WALLACE 0.081 19.315 106
+WOODS 0.080 19.395 107
+COLE 0.080 19.476 108
+WEST 0.080 19.555 109
+JORDAN 0.078 19.634 110
+OWENS 0.078 19.711 111
+REYNOLDS 0.078 19.789 112
+FISHER 0.077 19.866 113
+ELLIS 0.077 19.943 114
+HARRISON 0.076 20.019 115
+GIBSON 0.075 20.094 116
+MCDONALD 0.075 20.169 117
+CRUZ 0.075 20.244 118
+MARSHALL 0.075 20.319 119
+ORTIZ 0.075 20.394 120
+GOMEZ 0.075 20.468 121
+MURRAY 0.074 20.543 122
+FREEMAN 0.074 20.617 123
+WELLS 0.073 20.690 124
+WEBB 0.072 20.762 125
+SIMPSON 0.070 20.832 126
+STEVENS 0.070 20.902 127
+TUCKER 0.070 20.971 128
+PORTER 0.069 21.041 129
+HUNTER 0.069 21.110 130
+HICKS 0.069 21.178 131
+CRAWFORD 0.068 21.246 132
+HENRY 0.068 21.314 133
+BOYD 0.068 21.381 134
+MASON 0.068 21.449 135
+MORALES 0.067 21.516 136
+KENNEDY 0.067 21.582 137
+WARREN 0.067 21.649 138
+DIXON 0.066 21.715 139
+RAMOS 0.066 21.782 140
+REYES 0.066 21.848 141
+BURNS 0.065 21.913 142
+GORDON 0.065 21.978 143
+SHAW 0.065 22.043 144
+HOLMES 0.065 22.108 145
+RICE 0.064 22.172 146
+ROBERTSON 0.064 22.236 147
+HUNT 0.063 22.299 148
+BLACK 0.063 22.362 149
+DANIELS 0.062 22.425 150
+PALMER 0.062 22.487 151
+MILLS 0.061 22.547 152
+NICHOLS 0.060 22.607 153
+GRANT 0.060 22.667 154
+KNIGHT 0.060 22.727 155
+FERGUSON 0.059 22.786 156
+ROSE 0.059 22.845 157
+STONE 0.059 22.904 158
+HAWKINS 0.059 22.963 159
+DUNN 0.058 23.022 160
+PERKINS 0.058 23.079 161
+HUDSON 0.058 23.137 162
+SPENCER 0.057 23.194 163
+GARDNER 0.057 23.251 164
+STEPHENS 0.057 23.308 165
+PAYNE 0.057 23.365 166
+PIERCE 0.056 23.421 167
+BERRY 0.056 23.477 168
+MATTHEWS 0.056 23.533 169
+ARNOLD 0.056 23.589 170
+WAGNER 0.055 23.645 171
+WILLIS 0.055 23.700 172
+RAY 0.055 23.755 173
+WATKINS 0.055 23.811 174
+OLSON 0.055 23.866 175
+CARROLL 0.055 23.921 176
+DUNCAN 0.055 23.976 177
+SNYDER 0.055 24.031 178
+HART 0.054 24.086 179
+CUNNINGHAM 0.054 24.140 180
+BRADLEY 0.054 24.194 181
+LANE 0.054 24.247 182
+ANDREWS 0.054 24.301 183
+RUIZ 0.054 24.355 184
+HARPER 0.054 24.408 185
+FOX 0.053 24.462 186
+RILEY 0.053 24.515 187
+ARMSTRONG 0.053 24.568 188
+CARPENTER 0.053 24.621 189
+WEAVER 0.053 24.673 190
+GREENE 0.053 24.726 191
+LAWRENCE 0.052 24.779 192
+ELLIOTT 0.052 24.831 193
+CHAVEZ 0.052 24.883 194
+SIMS 0.052 24.936 195
+AUSTIN 0.052 24.988 196
+PETERS 0.052 25.040 197
+KELLEY 0.052 25.092 198
+FRANKLIN 0.051 25.143 199
+LAWSON 0.051 25.195 200
+FIELDS 0.051 25.246 201
+GUTIERREZ 0.051 25.297 202
+RYAN 0.051 25.348 203
+SCHMIDT 0.051 25.400 204
+CARR 0.051 25.451 205
+VASQUEZ 0.051 25.502 206
+CASTILLO 0.051 25.552 207
+WHEELER 0.051 25.603 208
+CHAPMAN 0.050 25.653 209
+OLIVER 0.050 25.703 210
+MONTGOMERY 0.049 25.753 211
+RICHARDS 0.049 25.802 212
+WILLIAMSON 0.049 25.851 213
+JOHNSTON 0.049 25.900 214
+BANKS 0.048 25.948 215
+MEYER 0.048 25.996 216
+BISHOP 0.048 26.045 217
+MCCOY 0.048 26.093 218
+HOWELL 0.048 26.140 219
+ALVAREZ 0.048 26.188 220
+MORRISON 0.048 26.235 221
+HANSEN 0.047 26.283 222
+FERNANDEZ 0.047 26.330 223
+GARZA 0.047 26.377 224
+HARVEY 0.047 26.424 225
+LITTLE 0.046 26.470 226
+BURTON 0.046 26.516 227
+STANLEY 0.046 26.562 228
+NGUYEN 0.046 26.608 229
+GEORGE 0.046 26.653 230
+JACOBS 0.046 26.699 231
+REID 0.046 26.745 232
+KIM 0.045 26.790 233
+FULLER 0.045 26.835 234
+LYNCH 0.045 26.880 235
+DEAN 0.045 26.925 236
+GILBERT 0.045 26.970 237
+GARRETT 0.045 27.015 238
+ROMERO 0.045 27.059 239
+WELCH 0.044 27.104 240
+LARSON 0.044 27.148 241
+FRAZIER 0.044 27.192 242
+BURKE 0.044 27.235 243
+HANSON 0.043 27.279 244
+DAY 0.043 27.322 245
+MENDOZA 0.043 27.365 246
+MORENO 0.043 27.407 247
+BOWMAN 0.043 27.450 248
+MEDINA 0.042 27.492 249
+FOWLER 0.042 27.535 250
+BREWER 0.042 27.577 251
+HOFFMAN 0.042 27.619 252
+CARLSON 0.042 27.661 253
+SILVA 0.042 27.703 254
+PEARSON 0.042 27.744 255
+HOLLAND 0.042 27.786 256
+DOUGLAS 0.041 27.827 257
+FLEMING 0.041 27.868 258
+JENSEN 0.041 27.909 259
+VARGAS 0.041 27.950 260
+BYRD 0.041 27.991 261
+DAVIDSON 0.041 28.032 262
+HOPKINS 0.041 28.072 263
+MAY 0.040 28.113 264
+TERRY 0.040 28.153 265
+HERRERA 0.040 28.193 266
+WADE 0.040 28.233 267
+SOTO 0.040 28.273 268
+WALTERS 0.040 28.313 269
+CURTIS 0.040 28.352 270
+NEAL 0.039 28.392 271
+CALDWELL 0.039 28.431 272
+LOWE 0.039 28.471 273
+JENNINGS 0.039 28.510 274
+BARNETT 0.039 28.549 275
+GRAVES 0.039 28.588 276
+JIMENEZ 0.039 28.628 277
+HORTON 0.039 28.667 278
+SHELTON 0.039 28.706 279
+BARRETT 0.039 28.745 280
+OBRIEN 0.039 28.783 281
+CASTRO 0.039 28.822 282
+SUTTON 0.038 28.860 283
+GREGORY 0.038 28.899 284
+MCKINNEY 0.038 28.937 285
+LUCAS 0.038 28.975 286
+MILES 0.038 29.013 287
+CRAIG 0.038 29.051 288
+RODRIQUEZ 0.037 29.088 289
+CHAMBERS 0.037 29.126 290
+HOLT 0.037 29.163 291
+LAMBERT 0.037 29.200 292
+FLETCHER 0.037 29.237 293
+WATTS 0.037 29.274 294
+BATES 0.037 29.311 295
+HALE 0.037 29.348 296
+RHODES 0.037 29.385 297
+PENA 0.037 29.421 298
+BECK 0.037 29.458 299
+NEWMAN 0.036 29.494 300
+HAYNES 0.036 29.531 301
+MCDANIEL 0.036 29.567 302
+MENDEZ 0.036 29.603 303
+BUSH 0.036 29.639 304
+VAUGHN 0.036 29.675 305
+PARKS 0.035 29.711 306
+DAWSON 0.035 29.746 307
+SANTIAGO 0.035 29.781 308
+NORRIS 0.035 29.817 309
+HARDY 0.035 29.852 310
+LOVE 0.035 29.887 311
+STEELE 0.035 29.921 312
+CURRY 0.035 29.956 313
+POWERS 0.035 29.991 314
+SCHULTZ 0.035 30.025 315
+BARKER 0.035 30.060 316
+GUZMAN 0.034 30.094 317
+PAGE 0.034 30.129 318
+MUNOZ 0.034 30.163 319
+BALL 0.034 30.197 320
+KELLER 0.034 30.231 321
+CHANDLER 0.034 30.265 322
+WEBER 0.034 30.299 323
+LEONARD 0.034 30.333 324
+WALSH 0.033 30.366 325
+LYONS 0.033 30.400 326
+RAMSEY 0.033 30.433 327
+WOLFE 0.033 30.466 328
+SCHNEIDER 0.033 30.499 329
+MULLINS 0.033 30.532 330
+BENSON 0.033 30.565 331
+SHARP 0.033 30.598 332
+BOWEN 0.033 30.631 333
+DANIEL 0.033 30.663 334
+BARBER 0.032 30.696 335
+CUMMINGS 0.032 30.728 336
+HINES 0.032 30.760 337
+BALDWIN 0.032 30.793 338
+GRIFFITH 0.032 30.824 339
+VALDEZ 0.032 30.856 340
+HUBBARD 0.032 30.888 341
+SALAZAR 0.032 30.920 342
+REEVES 0.032 30.951 343
+WARNER 0.031 30.983 344
+STEVENSON 0.031 31.014 345
+BURGESS 0.031 31.045 346
+SANTOS 0.031 31.076 347
+TATE 0.031 31.107 348
+CROSS 0.031 31.138 349
+GARNER 0.031 31.169 350
+MANN 0.031 31.200 351
+MACK 0.031 31.231 352
+MOSS 0.031 31.262 353
+THORNTON 0.031 31.292 354
+DENNIS 0.031 31.323 355
+MCGEE 0.031 31.354 356
+FARMER 0.030 31.384 357
+DELGADO 0.030 31.415 358
+AGUILAR 0.030 31.445 359
+VEGA 0.030 31.475 360
+GLOVER 0.030 31.505 361
+MANNING 0.030 31.535 362
+COHEN 0.030 31.566 363
+HARMON 0.030 31.596 364
+RODGERS 0.030 31.626 365
+ROBBINS 0.030 31.656 366
+NEWTON 0.030 31.686 367
+TODD 0.030 31.716 368
+BLAIR 0.030 31.746 369
+HIGGINS 0.030 31.776 370
+INGRAM 0.030 31.806 371
+REESE 0.030 31.836 372
+CANNON 0.030 31.865 373
+STRICKLAND 0.030 31.895 374
+TOWNSEND 0.030 31.925 375
+POTTER 0.030 31.955 376
+GOODWIN 0.030 31.984 377
+WALTON 0.030 32.014 378
+ROWE 0.029 32.043 379
+HAMPTON 0.029 32.073 380
+ORTEGA 0.029 32.102 381
+PATTON 0.029 32.131 382
+SWANSON 0.029 32.161 383
+JOSEPH 0.029 32.190 384
+FRANCIS 0.029 32.219 385
+GOODMAN 0.029 32.248 386
+MALDONADO 0.029 32.277 387
+YATES 0.029 32.305 388
+BECKER 0.029 32.334 389
+ERICKSON 0.029 32.363 390
+HODGES 0.029 32.392 391
+RIOS 0.029 32.421 392
+CONNER 0.029 32.449 393
+ADKINS 0.029 32.478 394
+WEBSTER 0.028 32.506 395
+NORMAN 0.028 32.535 396
+MALONE 0.028 32.563 397
+HAMMOND 0.028 32.591 398
+FLOWERS 0.028 32.620 399
+COBB 0.028 32.648 400
+MOODY 0.028 32.676 401
+QUINN 0.028 32.704 402
+BLAKE 0.028 32.732 403
+MAXWELL 0.028 32.759 404
+POPE 0.028 32.787 405
+FLOYD 0.027 32.814 406
+OSBORNE 0.027 32.842 407
+PAUL 0.027 32.869 408
+MCCARTHY 0.027 32.896 409
+GUERRERO 0.027 32.924 410
+LINDSEY 0.027 32.951 411
+ESTRADA 0.027 32.978 412
+SANDOVAL 0.027 33.005 413
+GIBBS 0.027 33.032 414
+TYLER 0.027 33.059 415
+GROSS 0.027 33.086 416
+FITZGERALD 0.027 33.113 417
+STOKES 0.027 33.140 418
+DOYLE 0.027 33.167 419
+SHERMAN 0.027 33.193 420
+SAUNDERS 0.027 33.220 421
+WISE 0.027 33.247 422
+COLON 0.027 33.274 423
+GILL 0.027 33.300 424
+ALVARADO 0.027 33.327 425
+GREER 0.026 33.353 426
+PADILLA 0.026 33.380 427
+SIMON 0.026 33.406 428
+WATERS 0.026 33.432 429
+NUNEZ 0.026 33.459 430
+BALLARD 0.026 33.485 431
+SCHWARTZ 0.026 33.511 432
+MCBRIDE 0.026 33.536 433
+HOUSTON 0.026 33.562 434
+CHRISTENSEN 0.026 33.588 435
+KLEIN 0.026 33.614 436
+PRATT 0.026 33.640 437
+BRIGGS 0.026 33.666 438
+PARSONS 0.026 33.692 439
+MCLAUGHLIN 0.026 33.717 440
+ZIMMERMAN 0.026 33.743 441
+FRENCH 0.026 33.769 442
+BUCHANAN 0.026 33.794 443
+MORAN 0.026 33.820 444
+COPELAND 0.025 33.845 445
+ROY 0.025 33.871 446
+PITTMAN 0.025 33.896 447
+BRADY 0.025 33.922 448
+MCCORMICK 0.025 33.947 449
+HOLLOWAY 0.025 33.972 450
+BROCK 0.025 33.998 451
+POOLE 0.025 34.023 452
+FRANK 0.025 34.048 453
+LOGAN 0.025 34.073 454
+OWEN 0.025 34.098 455
+BASS 0.025 34.122 456
+MARSH 0.025 34.147 457
+DRAKE 0.025 34.172 458
+WONG 0.025 34.197 459
+JEFFERSON 0.025 34.221 460
+PARK 0.025 34.246 461
+MORTON 0.025 34.271 462
+ABBOTT 0.025 34.295 463
+SPARKS 0.025 34.320 464
+PATRICK 0.024 34.344 465
+NORTON 0.024 34.369 466
+HUFF 0.024 34.393 467
+CLAYTON 0.024 34.417 468
+MASSEY 0.024 34.442 469
+LLOYD 0.024 34.466 470
+FIGUEROA 0.024 34.490 471
+CARSON 0.024 34.514 472
+BOWERS 0.024 34.538 473
+ROBERSON 0.024 34.563 474
+BARTON 0.024 34.587 475
+TRAN 0.024 34.611 476
+LAMB 0.024 34.635 477
+HARRINGTON 0.024 34.659 478
+CASEY 0.024 34.683 479
+BOONE 0.024 34.706 480
+CORTEZ 0.024 34.730 481
+CLARKE 0.024 34.754 482
+MATHIS 0.024 34.778 483
+SINGLETON 0.024 34.801 484
+WILKINS 0.024 34.825 485
+CAIN 0.024 34.849 486
+BRYAN 0.024 34.872 487
+UNDERWOOD 0.024 34.896 488
+HOGAN 0.024 34.920 489
+MCKENZIE 0.023 34.943 490
+COLLIER 0.023 34.966 491
+LUNA 0.023 34.990 492
+PHELPS 0.023 35.013 493
+MCGUIRE 0.023 35.036 494
+ALLISON 0.023 35.059 495
+BRIDGES 0.023 35.083 496
+WILKERSON 0.023 35.106 497
+NASH 0.023 35.129 498
+SUMMERS 0.023 35.152 499
+ATKINS 0.023 35.175 500
+WILCOX 0.023 35.198 501
+PITTS 0.023 35.221 502
+CONLEY 0.023 35.244 503
+MARQUEZ 0.023 35.267 504
+BURNETT 0.023 35.290 505
+RICHARD 0.023 35.313 506
+COCHRAN 0.023 35.335 507
+CHASE 0.023 35.358 508
+DAVENPORT 0.023 35.381 509
+HOOD 0.023 35.404 510
+GATES 0.023 35.427 511
+CLAY 0.023 35.449 512
+AYALA 0.023 35.472 513
+SAWYER 0.023 35.495 514
+ROMAN 0.023 35.517 515
+VAZQUEZ 0.023 35.540 516
+DICKERSON 0.023 35.562 517
+HODGE 0.022 35.585 518
+ACOSTA 0.022 35.607 519
+FLYNN 0.022 35.630 520
+ESPINOZA 0.022 35.652 521
+NICHOLSON 0.022 35.675 522
+MONROE 0.022 35.697 523
+WOLF 0.022 35.719 524
+MORROW 0.022 35.741 525
+KIRK 0.022 35.763 526
+RANDALL 0.022 35.785 527
+ANTHONY 0.022 35.807 528
+WHITAKER 0.022 35.829 529
+OCONNOR 0.022 35.851 530
+SKINNER 0.022 35.873 531
+WARE 0.022 35.895 532
+MOLINA 0.022 35.916 533
+KIRBY 0.022 35.938 534
+HUFFMAN 0.022 35.960 535
+BRADFORD 0.022 35.982 536
+CHARLES 0.022 36.003 537
+GILMORE 0.022 36.025 538
+DOMINGUEZ 0.022 36.046 539
+ONEAL 0.022 36.068 540
+BRUCE 0.022 36.090 541
+LANG 0.021 36.111 542
+COMBS 0.021 36.132 543
+KRAMER 0.021 36.154 544
+HEATH 0.021 36.175 545
+HANCOCK 0.021 36.196 546
+GALLAGHER 0.021 36.218 547
+GAINES 0.021 36.239 548
+SHAFFER 0.021 36.260 549
+SHORT 0.021 36.281 550
+WIGGINS 0.021 36.302 551
+MATHEWS 0.021 36.323 552
+MCCLAIN 0.021 36.344 553
+FISCHER 0.021 36.365 554
+WALL 0.021 36.386 555
+SMALL 0.021 36.407 556
+MELTON 0.021 36.428 557
+HENSLEY 0.021 36.449 558
+BOND 0.021 36.470 559
+DYER 0.021 36.491 560
+CAMERON 0.021 36.511 561
+GRIMES 0.021 36.532 562
+CONTRERAS 0.021 36.553 563
+CHRISTIAN 0.021 36.573 564
+WYATT 0.021 36.594 565
+BAXTER 0.021 36.615 566
+SNOW 0.021 36.635 567
+MOSLEY 0.021 36.656 568
+SHEPHERD 0.021 36.677 569
+LARSEN 0.021 36.697 570
+HOOVER 0.021 36.718 571
+BEASLEY 0.020 36.738 572
+GLENN 0.020 36.758 573
+PETERSEN 0.020 36.779 574
+WHITEHEAD 0.020 36.799 575
+MEYERS 0.020 36.819 576
+KEITH 0.020 36.840 577
+GARRISON 0.020 36.860 578
+VINCENT 0.020 36.880 579
+SHIELDS 0.020 36.900 580
+HORN 0.020 36.920 581
+SAVAGE 0.020 36.941 582
+OLSEN 0.020 36.961 583
+SCHROEDER 0.020 36.981 584
+HARTMAN 0.020 37.001 585
+WOODARD 0.020 37.021 586
+MUELLER 0.020 37.041 587
+KEMP 0.020 37.061 588
+DELEON 0.020 37.081 589
+BOOTH 0.020 37.101 590
+PATEL 0.020 37.121 591
+CALHOUN 0.020 37.140 592
+WILEY 0.020 37.160 593
+EATON 0.020 37.180 594
+CLINE 0.020 37.200 595
+NAVARRO 0.020 37.220 596
+HARRELL 0.020 37.240 597
+LESTER 0.020 37.259 598
+HUMPHREY 0.020 37.279 599
+PARRISH 0.020 37.299 600
+DURAN 0.020 37.318 601
+HUTCHINSON 0.020 37.338 602
+HESS 0.020 37.358 603
+DORSEY 0.020 37.377 604
+BULLOCK 0.020 37.397 605
+ROBLES 0.020 37.416 606
+BEARD 0.019 37.436 607
+DALTON 0.019 37.455 608
+AVILA 0.019 37.475 609
+VANCE 0.019 37.494 610
+RICH 0.019 37.514 611
+BLACKWELL 0.019 37.533 612
+YORK 0.019 37.552 613
+JOHNS 0.019 37.572 614
+BLANKENSHIP 0.019 37.591 615
+TREVINO 0.019 37.610 616
+SALINAS 0.019 37.630 617
+CAMPOS 0.019 37.649 618
+PRUITT 0.019 37.668 619
+MOSES 0.019 37.688 620
+CALLAHAN 0.019 37.707 621
+GOLDEN 0.019 37.726 622
+MONTOYA 0.019 37.745 623
+HARDIN 0.019 37.764 624
+GUERRA 0.019 37.783 625
+MCDOWELL 0.019 37.802 626
+CAREY 0.019 37.821 627
+STAFFORD 0.019 37.840 628
+GALLEGOS 0.019 37.859 629
+HENSON 0.019 37.878 630
+WILKINSON 0.019 37.897 631
+BOOKER 0.019 37.916 632
+MERRITT 0.019 37.935 633
+MIRANDA 0.019 37.953 634
+ATKINSON 0.019 37.972 635
+ORR 0.019 37.991 636
+DECKER 0.019 38.010 637
+HOBBS 0.019 38.028 638
+PRESTON 0.019 38.047 639
+TANNER 0.019 38.066 640
+KNOX 0.019 38.084 641
+PACHECO 0.019 38.103 642
+STEPHENSON 0.018 38.121 643
+GLASS 0.018 38.140 644
+ROJAS 0.018 38.158 645
+SERRANO 0.018 38.176 646
+MARKS 0.018 38.195 647
+HICKMAN 0.018 38.213 648
+ENGLISH 0.018 38.231 649
+SWEENEY 0.018 38.249 650
+STRONG 0.018 38.267 651
+PRINCE 0.018 38.285 652
+MCCLURE 0.018 38.304 653
+CONWAY 0.018 38.322 654
+WALTER 0.018 38.340 655
+ROTH 0.018 38.358 656
+MAYNARD 0.018 38.376 657
+FARRELL 0.018 38.394 658
+LOWERY 0.018 38.411 659
+HURST 0.018 38.429 660
+NIXON 0.018 38.447 661
+WEISS 0.018 38.465 662
+TRUJILLO 0.018 38.483 663
+ELLISON 0.018 38.500 664
+SLOAN 0.018 38.518 665
+JUAREZ 0.018 38.536 666
+WINTERS 0.018 38.553 667
+MCLEAN 0.018 38.571 668
+RANDOLPH 0.018 38.588 669
+LEON 0.018 38.606 670
+BOYER 0.018 38.624 671
+VILLARREAL 0.018 38.641 672
+MCCALL 0.018 38.659 673
+GENTRY 0.018 38.676 674
+CARRILLO 0.017 38.694 675
+KENT 0.017 38.711 676
+AYERS 0.017 38.729 677
+LARA 0.017 38.746 678
+SHANNON 0.017 38.763 679
+SEXTON 0.017 38.781 680
+PACE 0.017 38.798 681
+HULL 0.017 38.815 682
+LEBLANC 0.017 38.833 683
+BROWNING 0.017 38.850 684
+VELASQUEZ 0.017 38.867 685
+LEACH 0.017 38.884 686
+CHANG 0.017 38.901 687
+HOUSE 0.017 38.918 688
+SELLERS 0.017 38.936 689
+HERRING 0.017 38.953 690
+NOBLE 0.017 38.970 691
+FOLEY 0.017 38.987 692
+BARTLETT 0.017 39.004 693
+MERCADO 0.017 39.021 694
+LANDRY 0.017 39.037 695
+DURHAM 0.017 39.054 696
+WALLS 0.017 39.071 697
+BARR 0.017 39.088 698
+MCKEE 0.017 39.105 699
+BAUER 0.017 39.122 700
+RIVERS 0.017 39.139 701
+EVERETT 0.017 39.155 702
+BRADSHAW 0.017 39.172 703
+PUGH 0.017 39.189 704
+VELEZ 0.017 39.206 705
+RUSH 0.017 39.222 706
+ESTES 0.017 39.239 707
+DODSON 0.017 39.255 708
+MORSE 0.017 39.272 709
+SHEPPARD 0.017 39.289 710
+WEEKS 0.017 39.305 711
+CAMACHO 0.017 39.322 712
+BEAN 0.017 39.338 713
+BARRON 0.017 39.355 714
+LIVINGSTON 0.017 39.371 715
+MIDDLETON 0.016 39.388 716
+SPEARS 0.016 39.404 717
+BRANCH 0.016 39.420 718
+BLEVINS 0.016 39.437 719
+CHEN 0.016 39.453 720
+KERR 0.016 39.469 721
+MCCONNELL 0.016 39.486 722
+HATFIELD 0.016 39.502 723
+HARDING 0.016 39.518 724
+ASHLEY 0.016 39.535 725
+SOLIS 0.016 39.551 726
+HERMAN 0.016 39.567 727
+FROST 0.016 39.583 728
+GILES 0.016 39.599 729
+BLACKBURN 0.016 39.616 730
+WILLIAM 0.016 39.632 731
+PENNINGTON 0.016 39.648 732
+WOODWARD 0.016 39.664 733
+FINLEY 0.016 39.680 734
+MCINTOSH 0.016 39.696 735
+KOCH 0.016 39.713 736
+BEST 0.016 39.729 737
+SOLOMON 0.016 39.745 738
+MCCULLOUGH 0.016 39.761 739
+DUDLEY 0.016 39.777 740
+NOLAN 0.016 39.793 741
+BLANCHARD 0.016 39.809 742
+RIVAS 0.016 39.825 743
+BRENNAN 0.016 39.841 744
+MEJIA 0.016 39.856 745
+KANE 0.016 39.872 746
+BENTON 0.016 39.888 747
+JOYCE 0.016 39.904 748
+BUCKLEY 0.016 39.920 749
+HALEY 0.016 39.936 750
+VALENTINE 0.016 39.952 751
+MADDOX 0.016 39.967 752
+RUSSO 0.016 39.983 753
+MCKNIGHT 0.016 39.999 754
+BUCK 0.016 40.015 755
+MOON 0.016 40.030 756
+MCMILLAN 0.016 40.046 757
+CROSBY 0.016 40.062 758
+BERG 0.016 40.077 759
+DOTSON 0.016 40.093 760
+MAYS 0.016 40.109 761
+ROACH 0.016 40.124 762
+CHURCH 0.016 40.140 763
+CHAN 0.016 40.155 764
+RICHMOND 0.016 40.171 765
+MEADOWS 0.016 40.187 766
+FAULKNER 0.016 40.202 767
+ONEILL 0.016 40.218 768
+KNAPP 0.016 40.233 769
+KLINE 0.015 40.248 770
+BARRY 0.015 40.264 771
+OCHOA 0.015 40.279 772
+JACOBSON 0.015 40.295 773
+GAY 0.015 40.310 774
+AVERY 0.015 40.326 775
+HENDRICKS 0.015 40.341 776
+HORNE 0.015 40.356 777
+SHEPARD 0.015 40.372 778
+HEBERT 0.015 40.387 779
+CHERRY 0.015 40.402 780
+CARDENAS 0.015 40.418 781
+MCINTYRE 0.015 40.433 782
+WHITNEY 0.015 40.448 783
+WALLER 0.015 40.463 784
+HOLMAN 0.015 40.478 785
+DONALDSON 0.015 40.494 786
+CANTU 0.015 40.509 787
+TERRELL 0.015 40.524 788
+MORIN 0.015 40.539 789
+GILLESPIE 0.015 40.555 790
+FUENTES 0.015 40.570 791
+TILLMAN 0.015 40.585 792
+SANFORD 0.015 40.600 793
+BENTLEY 0.015 40.615 794
+PECK 0.015 40.630 795
+KEY 0.015 40.645 796
+SALAS 0.015 40.660 797
+ROLLINS 0.015 40.676 798
+GAMBLE 0.015 40.691 799
+DICKSON 0.015 40.706 800
+BATTLE 0.015 40.721 801
+SANTANA 0.015 40.736 802
+CABRERA 0.015 40.751 803
+CERVANTES 0.015 40.766 804
+HOWE 0.015 40.781 805
+HINTON 0.015 40.796 806
+HURLEY 0.015 40.811 807
+SPENCE 0.015 40.825 808
+ZAMORA 0.015 40.840 809
+YANG 0.015 40.855 810
+MCNEIL 0.015 40.870 811
+SUAREZ 0.015 40.885 812
+CASE 0.015 40.900 813
+PETTY 0.015 40.915 814
+GOULD 0.015 40.929 815
+MCFARLAND 0.015 40.944 816
+SAMPSON 0.015 40.959 817
+CARVER 0.015 40.974 818
+BRAY 0.015 40.989 819
+ROSARIO 0.015 41.003 820
+MACDONALD 0.015 41.018 821
+STOUT 0.015 41.033 822
+HESTER 0.015 41.047 823
+MELENDEZ 0.015 41.062 824
+DILLON 0.015 41.077 825
+FARLEY 0.015 41.091 826
+HOPPER 0.015 41.106 827
+GALLOWAY 0.015 41.121 828
+POTTS 0.015 41.135 829
+BERNARD 0.015 41.150 830
+JOYNER 0.014 41.164 831
+STEIN 0.014 41.179 832
+AGUIRRE 0.014 41.193 833
+OSBORN 0.014 41.208 834
+MERCER 0.014 41.222 835
+BENDER 0.014 41.236 836
+FRANCO 0.014 41.251 837
+ROWLAND 0.014 41.265 838
+SYKES 0.014 41.280 839
+BENJAMIN 0.014 41.294 840
+TRAVIS 0.014 41.308 841
+PICKETT 0.014 41.323 842
+CRANE 0.014 41.337 843
+SEARS 0.014 41.351 844
+MAYO 0.014 41.365 845
+DUNLAP 0.014 41.379 846
+HAYDEN 0.014 41.394 847
+WILDER 0.014 41.408 848
+MCKAY 0.014 41.422 849
+COFFEY 0.014 41.436 850
+MCCARTY 0.014 41.450 851
+EWING 0.014 41.464 852
+COOLEY 0.014 41.478 853
+VAUGHAN 0.014 41.492 854
+BONNER 0.014 41.506 855
+COTTON 0.014 41.520 856
+HOLDER 0.014 41.534 857
+STARK 0.014 41.548 858
+FERRELL 0.014 41.562 859
+CANTRELL 0.014 41.575 860
+FULTON 0.014 41.589 861
+LYNN 0.014 41.603 862
+LOTT 0.014 41.617 863
+CALDERON 0.014 41.631 864
+ROSA 0.014 41.644 865
+POLLARD 0.014 41.658 866
+HOOPER 0.014 41.672 867
+BURCH 0.014 41.686 868
+MULLEN 0.014 41.700 869
+FRY 0.014 41.713 870
+RIDDLE 0.014 41.727 871
+LEVY 0.014 41.741 872
+DAVID 0.014 41.754 873
+DUKE 0.014 41.768 874
+ODONNELL 0.014 41.782 875
+GUY 0.014 41.795 876
+MICHAEL 0.014 41.809 877
+BRITT 0.014 41.823 878
+FREDERICK 0.014 41.836 879
+DAUGHERTY 0.014 41.850 880
+BERGER 0.014 41.864 881
+DILLARD 0.014 41.877 882
+ALSTON 0.014 41.891 883
+JARVIS 0.014 41.904 884
+FRYE 0.014 41.918 885
+RIGGS 0.014 41.932 886
+CHANEY 0.014 41.945 887
+ODOM 0.013 41.959 888
+DUFFY 0.013 41.972 889
+FITZPATRICK 0.013 41.986 890
+VALENZUELA 0.013 41.999 891
+MERRILL 0.013 42.012 892
+MAYER 0.013 42.026 893
+ALFORD 0.013 42.039 894
+MCPHERSON 0.013 42.053 895
+ACEVEDO 0.013 42.066 896
+DONOVAN 0.013 42.079 897
+BARRERA 0.013 42.093 898
+ALBERT 0.013 42.106 899
+COTE 0.013 42.119 900
+REILLY 0.013 42.133 901
+COMPTON 0.013 42.146 902
+RAYMOND 0.013 42.159 903
+MOONEY 0.013 42.173 904
+MCGOWAN 0.013 42.186 905
+CRAFT 0.013 42.199 906
+CLEVELAND 0.013 42.212 907
+CLEMONS 0.013 42.226 908
+WYNN 0.013 42.239 909
+NIELSEN 0.013 42.252 910
+BAIRD 0.013 42.265 911
+STANTON 0.013 42.278 912
+SNIDER 0.013 42.292 913
+ROSALES 0.013 42.305 914
+BRIGHT 0.013 42.318 915
+WITT 0.013 42.331 916
+STUART 0.013 42.344 917
+HAYS 0.013 42.357 918
+HOLDEN 0.013 42.371 919
+RUTLEDGE 0.013 42.384 920
+KINNEY 0.013 42.397 921
+CLEMENTS 0.013 42.410 922
+CASTANEDA 0.013 42.423 923
+SLATER 0.013 42.436 924
+HAHN 0.013 42.449 925
+EMERSON 0.013 42.462 926
+CONRAD 0.013 42.475 927
+BURKS 0.013 42.488 928
+DELANEY 0.013 42.501 929
+PATE 0.013 42.514 930
+LANCASTER 0.013 42.527 931
+SWEET 0.013 42.540 932
+JUSTICE 0.013 42.552 933
+TYSON 0.013 42.565 934
+SHARPE 0.013 42.578 935
+WHITFIELD 0.013 42.591 936
+TALLEY 0.013 42.604 937
+MACIAS 0.013 42.617 938
+IRWIN 0.013 42.629 939
+BURRIS 0.013 42.642 940
+RATLIFF 0.013 42.655 941
+MCCRAY 0.013 42.668 942
+MADDEN 0.013 42.681 943
+KAUFMAN 0.013 42.693 944
+BEACH 0.013 42.706 945
+GOFF 0.013 42.719 946
+CASH 0.013 42.732 947
+BOLTON 0.013 42.744 948
+MCFADDEN 0.013 42.757 949
+LEVINE 0.013 42.770 950
+GOOD 0.013 42.782 951
+BYERS 0.013 42.795 952
+KIRKLAND 0.013 42.808 953
+KIDD 0.013 42.821 954
+WORKMAN 0.013 42.833 955
+CARNEY 0.013 42.846 956
+DALE 0.013 42.859 957
+MCLEOD 0.013 42.871 958
+HOLCOMB 0.013 42.884 959
+ENGLAND 0.013 42.896 960
+FINCH 0.013 42.909 961
+HEAD 0.012 42.921 962
+BURT 0.012 42.934 963
+HENDRIX 0.012 42.946 964
+SOSA 0.012 42.959 965
+HANEY 0.012 42.971 966
+FRANKS 0.012 42.984 967
+SARGENT 0.012 42.996 968
+NIEVES 0.012 43.009 969
+DOWNS 0.012 43.021 970
+RASMUSSEN 0.012 43.033 971
+BIRD 0.012 43.046 972
+HEWITT 0.012 43.058 973
+LINDSAY 0.012 43.071 974
+LE 0.012 43.083 975
+FOREMAN 0.012 43.095 976
+VALENCIA 0.012 43.108 977
+ONEIL 0.012 43.120 978
+DELACRUZ 0.012 43.132 979
+VINSON 0.012 43.145 980
+DEJESUS 0.012 43.157 981
+HYDE 0.012 43.169 982
+FORBES 0.012 43.182 983
+GILLIAM 0.012 43.194 984
+GUTHRIE 0.012 43.206 985
+WOOTEN 0.012 43.218 986
+HUBER 0.012 43.231 987
+BARLOW 0.012 43.243 988
+BOYLE 0.012 43.255 989
+MCMAHON 0.012 43.267 990
+BUCKNER 0.012 43.279 991
+ROCHA 0.012 43.291 992
+PUCKETT 0.012 43.303 993
+LANGLEY 0.012 43.315 994
+KNOWLES 0.012 43.328 995
+COOKE 0.012 43.340 996
+VELAZQUEZ 0.012 43.352 997
+WHITLEY 0.012 43.364 998
+NOEL 0.012 43.376 999
+VANG 0.012 43.388 1000
+SHEA 0.012 43.399 1001
+ROUSE 0.012 43.411 1002
+HARTLEY 0.012 43.423 1003
+MAYFIELD 0.012 43.435 1004
+ELDER 0.012 43.447 1005
+RANKIN 0.012 43.459 1006
+HANNA 0.012 43.471 1007
+COWAN 0.012 43.483 1008
+LUCERO 0.012 43.495 1009
+ARROYO 0.012 43.507 1010
+SLAUGHTER 0.012 43.519 1011
+HAAS 0.012 43.531 1012
+OCONNELL 0.012 43.542 1013
+MINOR 0.012 43.554 1014
+KENDRICK 0.012 43.566 1015
+SHIRLEY 0.012 43.578 1016
+KENDALL 0.012 43.590 1017
+BOUCHER 0.012 43.602 1018
+ARCHER 0.012 43.613 1019
+BOGGS 0.012 43.625 1020
+ODELL 0.012 43.637 1021
+DOUGHERTY 0.012 43.649 1022
+ANDERSEN 0.012 43.661 1023
+NEWELL 0.012 43.672 1024
+CROWE 0.012 43.684 1025
+WANG 0.012 43.696 1026
+FRIEDMAN 0.012 43.708 1027
+BLAND 0.012 43.719 1028
+SWAIN 0.012 43.731 1029
+HOLLEY 0.012 43.743 1030
+FELIX 0.012 43.754 1031
+PEARCE 0.012 43.766 1032
+CHILDS 0.012 43.778 1033
+YARBROUGH 0.012 43.789 1034
+GALVAN 0.012 43.801 1035
+PROCTOR 0.012 43.812 1036
+MEEKS 0.012 43.824 1037
+LOZANO 0.012 43.836 1038
+MORA 0.012 43.847 1039
+RANGEL 0.012 43.859 1040
+BACON 0.012 43.870 1041
+VILLANUEVA 0.012 43.882 1042
+SCHAEFER 0.012 43.893 1043
+ROSADO 0.012 43.905 1044
+HELMS 0.012 43.917 1045
+BOYCE 0.012 43.928 1046
+GOSS 0.012 43.940 1047
+STINSON 0.011 43.951 1048
+SMART 0.011 43.963 1049
+LAKE 0.011 43.974 1050
+IBARRA 0.011 43.986 1051
+HUTCHINS 0.011 43.997 1052
+COVINGTON 0.011 44.009 1053
+REYNA 0.011 44.020 1054
+GREGG 0.011 44.032 1055
+WERNER 0.011 44.043 1056
+CROWLEY 0.011 44.054 1057
+HATCHER 0.011 44.066 1058
+MACKEY 0.011 44.077 1059
+BUNCH 0.011 44.089 1060
+WOMACK 0.011 44.100 1061
+POLK 0.011 44.111 1062
+JAMISON 0.011 44.123 1063
+DODD 0.011 44.134 1064
+CHILDRESS 0.011 44.146 1065
+CHILDERS 0.011 44.157 1066
+CAMP 0.011 44.168 1067
+VILLA 0.011 44.180 1068
+DYE 0.011 44.191 1069
+SPRINGER 0.011 44.202 1070
+MAHONEY 0.011 44.214 1071
+DAILEY 0.011 44.225 1072
+BELCHER 0.011 44.236 1073
+LOCKHART 0.011 44.248 1074
+GRIGGS 0.011 44.259 1075
+COSTA 0.011 44.270 1076
+CONNOR 0.011 44.281 1077
+BRANDT 0.011 44.293 1078
+WINTER 0.011 44.304 1079
+WALDEN 0.011 44.315 1080
+MOSER 0.011 44.326 1081
+TRACY 0.011 44.338 1082
+TATUM 0.011 44.349 1083
+MCCANN 0.011 44.360 1084
+AKERS 0.011 44.371 1085
+LUTZ 0.011 44.382 1086
+PRYOR 0.011 44.393 1087
+LAW 0.011 44.404 1088
+OROZCO 0.011 44.415 1089
+MCALLISTER 0.011 44.427 1090
+LUGO 0.011 44.438 1091
+DAVIES 0.011 44.449 1092
+SHOEMAKER 0.011 44.460 1093
+MADISON 0.011 44.471 1094
+RUTHERFORD 0.011 44.482 1095
+NEWSOME 0.011 44.493 1096
+MAGEE 0.011 44.504 1097
+CHAMBERLAIN 0.011 44.515 1098
+BLANTON 0.011 44.526 1099
+SIMMS 0.011 44.537 1100
+GODFREY 0.011 44.548 1101
+FLANAGAN 0.011 44.559 1102
+CRUM 0.011 44.570 1103
+CORDOVA 0.011 44.581 1104
+ESCOBAR 0.011 44.592 1105
+DOWNING 0.011 44.603 1106
+SINCLAIR 0.011 44.614 1107
+DONAHUE 0.011 44.625 1108
+KRUEGER 0.011 44.636 1109
+MCGINNIS 0.011 44.647 1110
+GORE 0.011 44.658 1111
+FARRIS 0.011 44.669 1112
+WEBBER 0.011 44.680 1113
+CORBETT 0.011 44.691 1114
+ANDRADE 0.011 44.701 1115
+STARR 0.011 44.712 1116
+LYON 0.011 44.723 1117
+YODER 0.011 44.734 1118
+HASTINGS 0.011 44.745 1119
+MCGRATH 0.011 44.756 1120
+SPIVEY 0.011 44.767 1121
+KRAUSE 0.011 44.778 1122
+HARDEN 0.011 44.788 1123
+CRABTREE 0.011 44.799 1124
+KIRKPATRICK 0.011 44.810 1125
+HOLLIS 0.011 44.821 1126
+BRANDON 0.011 44.832 1127
+ARRINGTON 0.011 44.843 1128
+ERVIN 0.011 44.853 1129
+CLIFTON 0.011 44.864 1130
+RITTER 0.011 44.875 1131
+MCGHEE 0.011 44.886 1132
+BOLDEN 0.011 44.897 1133
+MALONEY 0.011 44.907 1134
+GAGNON 0.011 44.918 1135
+DUNBAR 0.011 44.929 1136
+PONCE 0.011 44.940 1137
+PIKE 0.011 44.950 1138
+MAYES 0.011 44.961 1139
+HEARD 0.011 44.972 1140
+BEATTY 0.011 44.983 1141
+MOBLEY 0.011 44.993 1142
+KIMBALL 0.011 45.004 1143
+BUTTS 0.011 45.015 1144
+MONTES 0.011 45.026 1145
+HERBERT 0.011 45.036 1146
+GRADY 0.011 45.047 1147
+ELDRIDGE 0.011 45.058 1148
+BRAUN 0.011 45.068 1149
+HAMM 0.011 45.079 1150
+GIBBONS 0.011 45.090 1151
+SEYMOUR 0.011 45.100 1152
+MOYER 0.011 45.111 1153
+MANLEY 0.011 45.122 1154
+HERRON 0.011 45.132 1155
+PLUMMER 0.011 45.143 1156
+ELMORE 0.011 45.153 1157
+CRAMER 0.011 45.164 1158
+GARY 0.011 45.175 1159
+RUCKER 0.011 45.185 1160
+HILTON 0.011 45.196 1161
+BLUE 0.011 45.206 1162
+PIERSON 0.011 45.217 1163
+FONTENOT 0.011 45.227 1164
+FIELD 0.011 45.238 1165
+RUBIO 0.011 45.248 1166
+GRACE 0.011 45.259 1167
+GOLDSTEIN 0.011 45.269 1168
+ELKINS 0.011 45.280 1169
+WILLS 0.010 45.290 1170
+NOVAK 0.010 45.301 1171
+JOHN 0.010 45.311 1172
+HICKEY 0.010 45.322 1173
+WORLEY 0.010 45.332 1174
+GORMAN 0.010 45.343 1175
+KATZ 0.010 45.353 1176
+DICKINSON 0.010 45.364 1177
+BROUSSARD 0.010 45.374 1178
+FRITZ 0.010 45.384 1179
+WOODRUFF 0.010 45.395 1180
+CROW 0.010 45.405 1181
+CHRISTOPHER 0.010 45.416 1182
+BRITTON 0.010 45.426 1183
+FORREST 0.010 45.436 1184
+NANCE 0.010 45.447 1185
+LEHMAN 0.010 45.457 1186
+BINGHAM 0.010 45.467 1187
+ZUNIGA 0.010 45.478 1188
+WHALEY 0.010 45.488 1189
+SHAFER 0.010 45.498 1190
+COFFMAN 0.010 45.509 1191
+STEWARD 0.010 45.519 1192
+DELAROSA 0.010 45.529 1193
+NIX 0.010 45.540 1194
+NEELY 0.010 45.550 1195
+NUMBERS 0.010 45.560 1196
+MATA 0.010 45.571 1197
+MANUEL 0.010 45.581 1198
+DAVILA 0.010 45.591 1199
+MCCABE 0.010 45.601 1200
+KESSLER 0.010 45.612 1201
+EMERY 0.010 45.622 1202
+BOWLING 0.010 45.632 1203
+HINKLE 0.010 45.643 1204
+WELSH 0.010 45.653 1205
+PAGAN 0.010 45.663 1206
+GOLDBERG 0.010 45.673 1207
+GOINS 0.010 45.683 1208
+CROUCH 0.010 45.694 1209
+CUEVAS 0.010 45.704 1210
+QUINONES 0.010 45.714 1211
+MCDERMOTT 0.010 45.724 1212
+HENDRICKSON 0.010 45.734 1213
+SAMUELS 0.010 45.745 1214
+DENTON 0.010 45.755 1215
+BERGERON 0.010 45.765 1216
+LAM 0.010 45.775 1217
+IVEY 0.010 45.785 1218
+LOCKE 0.010 45.795 1219
+HAINES 0.010 45.805 1220
+THURMAN 0.010 45.815 1221
+SNELL 0.010 45.825 1222
+HOSKINS 0.010 45.836 1223
+BYRNE 0.010 45.846 1224
+MILTON 0.010 45.856 1225
+WINSTON 0.010 45.866 1226
+ARTHUR 0.010 45.876 1227
+ARIAS 0.010 45.886 1228
+STANFORD 0.010 45.896 1229
+ROE 0.010 45.906 1230
+CORBIN 0.010 45.916 1231
+BELTRAN 0.010 45.926 1232
+CHAPPELL 0.010 45.936 1233
+HURT 0.010 45.946 1234
+DOWNEY 0.010 45.956 1235
+DOOLEY 0.010 45.966 1236
+TUTTLE 0.010 45.976 1237
+COUCH 0.010 45.986 1238
+PAYTON 0.010 45.996 1239
+MCELROY 0.010 46.006 1240
+CROCKETT 0.010 46.016 1241
+GROVES 0.010 46.026 1242
+CLEMENT 0.010 46.036 1243
+LESLIE 0.010 46.046 1244
+CARTWRIGHT 0.010 46.055 1245
+DICKEY 0.010 46.065 1246
+MCGILL 0.010 46.075 1247
+DUBOIS 0.010 46.085 1248
+MUNIZ 0.010 46.095 1249
+ERWIN 0.010 46.105 1250
+SELF 0.010 46.115 1251
+TOLBERT 0.010 46.125 1252
+DEMPSEY 0.010 46.134 1253
+CISNEROS 0.010 46.144 1254
+SEWELL 0.010 46.154 1255
+LATHAM 0.010 46.164 1256
+GARLAND 0.010 46.174 1257
+VIGIL 0.010 46.183 1258
+TAPIA 0.010 46.193 1259
+STERLING 0.010 46.203 1260
+RAINEY 0.010 46.213 1261
+NORWOOD 0.010 46.223 1262
+LACY 0.010 46.232 1263
+STROUD 0.010 46.242 1264
+MEADE 0.010 46.252 1265
+AMOS 0.010 46.262 1266
+TIPTON 0.010 46.271 1267
+LORD 0.010 46.281 1268
+KUHN 0.010 46.291 1269
+HILLIARD 0.010 46.301 1270
+BONILLA 0.010 46.311 1271
+TEAGUE 0.010 46.320 1272
+COURTNEY 0.010 46.330 1273
+GUNN 0.010 46.340 1274
+HO 0.010 46.349 1275
+GREENWOOD 0.010 46.359 1276
+CORREA 0.010 46.369 1277
+REECE 0.010 46.378 1278
+WESTON 0.010 46.388 1279
+POE 0.010 46.398 1280
+TRENT 0.010 46.407 1281
+PINEDA 0.010 46.417 1282
+PHIPPS 0.010 46.427 1283
+FREY 0.010 46.436 1284
+KAISER 0.010 46.446 1285
+AMES 0.010 46.456 1286
+PAIGE 0.010 46.465 1287
+GUNTER 0.010 46.475 1288
+SCHMITT 0.010 46.484 1289
+MILLIGAN 0.010 46.494 1290
+ESPINOSA 0.010 46.503 1291
+CARLTON 0.010 46.513 1292
+BOWDEN 0.010 46.523 1293
+VICKERS 0.010 46.532 1294
+LOWRY 0.010 46.542 1295
+PRITCHARD 0.010 46.551 1296
+COSTELLO 0.010 46.561 1297
+PIPER 0.009 46.570 1298
+MCCLELLAN 0.009 46.580 1299
+LOVELL 0.009 46.589 1300
+DREW 0.009 46.599 1301
+SHEEHAN 0.009 46.608 1302
+QUICK 0.009 46.617 1303
+HATCH 0.009 46.627 1304
+DOBSON 0.009 46.636 1305
+SINGH 0.009 46.646 1306
+JEFFRIES 0.009 46.655 1307
+HOLLINGSWORTH 0.009 46.665 1308
+SORENSEN 0.009 46.674 1309
+MEZA 0.009 46.684 1310
+FINK 0.009 46.693 1311
+DONNELLY 0.009 46.702 1312
+BURRELL 0.009 46.712 1313
+BRUNO 0.009 46.721 1314
+TOMLINSON 0.009 46.731 1315
+COLBERT 0.009 46.740 1316
+BILLINGS 0.009 46.749 1317
+RITCHIE 0.009 46.759 1318
+HELTON 0.009 46.768 1319
+SUTHERLAND 0.009 46.777 1320
+PEOPLES 0.009 46.787 1321
+MCQUEEN 0.009 46.796 1322
+GASTON 0.009 46.806 1323
+THOMASON 0.009 46.815 1324
+MCKINLEY 0.009 46.824 1325
+GIVENS 0.009 46.834 1326
+CROCKER 0.009 46.843 1327
+VOGEL 0.009 46.852 1328
+ROBISON 0.009 46.862 1329
+DUNHAM 0.009 46.871 1330
+COKER 0.009 46.880 1331
+SWARTZ 0.009 46.890 1332
+KEYS 0.009 46.899 1333
+LILLY 0.009 46.908 1334
+LADNER 0.009 46.917 1335
+HANNAH 0.009 46.927 1336
+WILLARD 0.009 46.936 1337
+RICHTER 0.009 46.945 1338
+HARGROVE 0.009 46.955 1339
+EDMONDS 0.009 46.964 1340
+BRANTLEY 0.009 46.973 1341
+ALBRIGHT 0.009 46.982 1342
+MURDOCK 0.009 46.992 1343
+BOSWELL 0.009 47.001 1344
+MULLER 0.009 47.010 1345
+QUINTERO 0.009 47.019 1346
+PADGETT 0.009 47.028 1347
+KENNEY 0.009 47.038 1348
+DALY 0.009 47.047 1349
+CONNOLLY 0.009 47.056 1350
+PIERRE 0.009 47.065 1351
+INMAN 0.009 47.074 1352
+QUINTANA 0.009 47.084 1353
+LUND 0.009 47.093 1354
+BARNARD 0.009 47.102 1355
+VILLEGAS 0.009 47.111 1356
+SIMONS 0.009 47.120 1357
+LAND 0.009 47.129 1358
+HUGGINS 0.009 47.138 1359
+TIDWELL 0.009 47.148 1360
+SANDERSON 0.009 47.157 1361
+BULLARD 0.009 47.166 1362
+MCCLENDON 0.009 47.175 1363
+DUARTE 0.009 47.184 1364
+DRAPER 0.009 47.193 1365
+MEREDITH 0.009 47.202 1366
+MARRERO 0.009 47.211 1367
+DWYER 0.009 47.220 1368
+ABRAMS 0.009 47.230 1369
+STOVER 0.009 47.239 1370
+GOODE 0.009 47.248 1371
+FRASER 0.009 47.257 1372
+CREWS 0.009 47.266 1373
+BERNAL 0.009 47.275 1374
+SMILEY 0.009 47.284 1375
+GODWIN 0.009 47.293 1376
+FISH 0.009 47.302 1377
+CONKLIN 0.009 47.311 1378
+MCNEAL 0.009 47.320 1379
+BACA 0.009 47.329 1380
+ESPARZA 0.009 47.338 1381
+CROWDER 0.009 47.347 1382
+BOWER 0.009 47.356 1383
+NICHOLAS 0.009 47.365 1384
+CHUNG 0.009 47.374 1385
+BREWSTER 0.009 47.383 1386
+MCNEILL 0.009 47.392 1387
+DICK 0.009 47.401 1388
+RODRIGUES 0.009 47.409 1389
+LEAL 0.009 47.418 1390
+COATES 0.009 47.427 1391
+RAINES 0.009 47.436 1392
+MCCAIN 0.009 47.445 1393
+MCCORD 0.009 47.454 1394
+MINER 0.009 47.463 1395
+HOLBROOK 0.009 47.472 1396
+SWIFT 0.009 47.481 1397
+DUKES 0.009 47.489 1398
+CARLISLE 0.009 47.498 1399
+ALDRIDGE 0.009 47.507 1400
+ACKERMAN 0.009 47.516 1401
+STARKS 0.009 47.525 1402
+RICKS 0.009 47.533 1403
+HOLLIDAY 0.009 47.542 1404
+FERRIS 0.009 47.551 1405
+HAIRSTON 0.009 47.560 1406
+SHEFFIELD 0.009 47.569 1407
+LANGE 0.009 47.577 1408
+FOUNTAIN 0.009 47.586 1409
+MARINO 0.009 47.595 1410
+DOSS 0.009 47.604 1411
+BETTS 0.009 47.612 1412
+KAPLAN 0.009 47.621 1413
+CARMICHAEL 0.009 47.630 1414
+BLOOM 0.009 47.639 1415
+RUFFIN 0.009 47.647 1416
+PENN 0.009 47.656 1417
+KERN 0.009 47.665 1418
+BOWLES 0.009 47.673 1419
+SIZEMORE 0.009 47.682 1420
+LARKIN 0.009 47.691 1421
+DUPREE 0.009 47.699 1422
+JEWELL 0.009 47.708 1423
+SILVER 0.009 47.717 1424
+SEALS 0.009 47.726 1425
+METCALF 0.009 47.734 1426
+HUTCHISON 0.009 47.743 1427
+HENLEY 0.009 47.751 1428
+FARR 0.009 47.760 1429
+CASTLE 0.009 47.769 1430
+MCCAULEY 0.009 47.777 1431
+HANKINS 0.009 47.786 1432
+GUSTAFSON 0.009 47.795 1433
+DEAL 0.009 47.803 1434
+CURRAN 0.009 47.812 1435
+ASH 0.009 47.821 1436
+WADDELL 0.009 47.829 1437
+RAMEY 0.009 47.838 1438
+CATES 0.009 47.847 1439
+POLLOCK 0.009 47.855 1440
+MAJOR 0.009 47.864 1441
+IRVIN 0.009 47.872 1442
+CUMMINS 0.009 47.881 1443
+MESSER 0.009 47.890 1444
+HELLER 0.009 47.898 1445
+DEWITT 0.009 47.907 1446
+LIN 0.009 47.915 1447
+FUNK 0.009 47.924 1448
+CORNETT 0.009 47.932 1449
+PALACIOS 0.009 47.941 1450
+GALINDO 0.009 47.949 1451
+CANO 0.009 47.958 1452
+HATHAWAY 0.009 47.966 1453
+SINGER 0.008 47.975 1454
+PHAM 0.008 47.983 1455
+ENRIQUEZ 0.008 47.992 1456
+AARON 0.008 48.000 1457
+SALGADO 0.008 48.009 1458
+PELLETIER 0.008 48.017 1459
+PAINTER 0.008 48.026 1460
+WISEMAN 0.008 48.034 1461
+BLOUNT 0.008 48.043 1462
+HAND 0.008 48.051 1463
+FELICIANO 0.008 48.059 1464
+TEMPLE 0.008 48.068 1465
+HOUSER 0.008 48.076 1466
+DOHERTY 0.008 48.085 1467
+MEAD 0.008 48.093 1468
+MCGRAW 0.008 48.101 1469
+TONEY 0.008 48.110 1470
+SWAN 0.008 48.118 1471
+MELVIN 0.008 48.126 1472
+CAPPS 0.008 48.135 1473
+BLANCO 0.008 48.143 1474
+BLACKMON 0.008 48.152 1475
+WESLEY 0.008 48.160 1476
+THOMSON 0.008 48.168 1477
+MCMANUS 0.008 48.177 1478
+FAIR 0.008 48.185 1479
+BURKETT 0.008 48.193 1480
+POST 0.008 48.202 1481
+GLEASON 0.008 48.210 1482
+RUDOLPH 0.008 48.218 1483
+OTT 0.008 48.227 1484
+DICKENS 0.008 48.235 1485
+CORMIER 0.008 48.243 1486
+VOSS 0.008 48.251 1487
+RUSHING 0.008 48.260 1488
+ROSENBERG 0.008 48.268 1489
+HURD 0.008 48.276 1490
+DUMAS 0.008 48.285 1491
+BENITEZ 0.008 48.293 1492
+ARELLANO 0.008 48.301 1493
+STORY 0.008 48.309 1494
+MARIN 0.008 48.318 1495
+CAUDILL 0.008 48.326 1496
+BRAGG 0.008 48.334 1497
+JARAMILLO 0.008 48.343 1498
+HUERTA 0.008 48.351 1499
+GIPSON 0.008 48.359 1500
+COLVIN 0.008 48.367 1501
+BIGGS 0.008 48.376 1502
+VELA 0.008 48.384 1503
+PLATT 0.008 48.392 1504
+CASSIDY 0.008 48.400 1505
+TOMPKINS 0.008 48.408 1506
+MCCOLLUM 0.008 48.417 1507
+KAY 0.008 48.425 1508
+GABRIEL 0.008 48.433 1509
+DOLAN 0.008 48.441 1510
+DALEY 0.008 48.450 1511
+CRUMP 0.008 48.458 1512
+STREET 0.008 48.466 1513
+SNEED 0.008 48.474 1514
+KILGORE 0.008 48.482 1515
+GROVE 0.008 48.491 1516
+GRIMM 0.008 48.499 1517
+DAVISON 0.008 48.507 1518
+BRUNSON 0.008 48.515 1519
+PRATER 0.008 48.523 1520
+MARCUM 0.008 48.531 1521
+DEVINE 0.008 48.540 1522
+KYLE 0.008 48.548 1523
+DODGE 0.008 48.556 1524
+STRATTON 0.008 48.564 1525
+ROSAS 0.008 48.572 1526
+CHOI 0.008 48.580 1527
+TRIPP 0.008 48.589 1528
+LEDBETTER 0.008 48.597 1529
+LAY 0.008 48.605 1530
+HIGHTOWER 0.008 48.613 1531
+HAYWOOD 0.008 48.621 1532
+FELDMAN 0.008 48.629 1533
+EPPS 0.008 48.637 1534
+YEAGER 0.008 48.645 1535
+POSEY 0.008 48.653 1536
+SYLVESTER 0.008 48.662 1537
+SCRUGGS 0.008 48.670 1538
+COPE 0.008 48.678 1539
+STUBBS 0.008 48.686 1540
+RICHEY 0.008 48.694 1541
+OVERTON 0.008 48.702 1542
+TROTTER 0.008 48.710 1543
+SPRAGUE 0.008 48.718 1544
+CORDERO 0.008 48.726 1545
+BUTCHER 0.008 48.734 1546
+BURGER 0.008 48.742 1547
+STILES 0.008 48.750 1548
+BURGOS 0.008 48.758 1549
+WOODSON 0.008 48.766 1550
+HORNER 0.008 48.774 1551
+BASSETT 0.008 48.782 1552
+PURCELL 0.008 48.790 1553
+HASKINS 0.008 48.798 1554
+GEE 0.008 48.806 1555
+AKINS 0.008 48.814 1556
+ABRAHAM 0.008 48.823 1557
+HOYT 0.008 48.830 1558
+ZIEGLER 0.008 48.838 1559
+SPAULDING 0.008 48.846 1560
+HADLEY 0.008 48.854 1561
+GRUBBS 0.008 48.862 1562
+SUMNER 0.008 48.870 1563
+MURILLO 0.008 48.878 1564
+ZAVALA 0.008 48.886 1565
+SHOOK 0.008 48.894 1566
+LOCKWOOD 0.008 48.902 1567
+JARRETT 0.008 48.910 1568
+DRISCOLL 0.008 48.918 1569
+DAHL 0.008 48.926 1570
+THORPE 0.008 48.934 1571
+SHERIDAN 0.008 48.942 1572
+REDMOND 0.008 48.949 1573
+PUTNAM 0.008 48.957 1574
+MCWILLIAMS 0.008 48.965 1575
+MCRAE 0.008 48.973 1576
+CORNELL 0.008 48.981 1577
+FELTON 0.008 48.989 1578
+ROMANO 0.008 48.997 1579
+JOINER 0.008 49.005 1580
+SADLER 0.008 49.012 1581
+HEDRICK 0.008 49.020 1582
+HAGER 0.008 49.028 1583
+HAGEN 0.008 49.036 1584
+FITCH 0.008 49.044 1585
+COULTER 0.008 49.052 1586
+THACKER 0.008 49.059 1587
+MANSFIELD 0.008 49.067 1588
+LANGSTON 0.008 49.075 1589
+GUIDRY 0.008 49.083 1590
+FERREIRA 0.008 49.091 1591
+CORLEY 0.008 49.098 1592
+CONN 0.008 49.106 1593
+ROSSI 0.008 49.114 1594
+LACKEY 0.008 49.122 1595
+CODY 0.008 49.130 1596
+BAEZ 0.008 49.137 1597
+SAENZ 0.008 49.145 1598
+MCNAMARA 0.008 49.153 1599
+DARNELL 0.008 49.160 1600
+MICHEL 0.008 49.168 1601
+MCMULLEN 0.008 49.176 1602
+MCKENNA 0.008 49.184 1603
+MCDONOUGH 0.008 49.191 1604
+LINK 0.008 49.199 1605
+ENGEL 0.008 49.207 1606
+BROWNE 0.008 49.215 1607
+ROPER 0.008 49.222 1608
+PEACOCK 0.008 49.230 1609
+EUBANKS 0.008 49.238 1610
+DRUMMOND 0.008 49.245 1611
+STRINGER 0.008 49.253 1612
+PRITCHETT 0.008 49.261 1613
+PARHAM 0.008 49.268 1614
+MIMS 0.008 49.276 1615
+LANDERS 0.008 49.284 1616
+HAM 0.008 49.291 1617
+GRAYSON 0.008 49.299 1618
+STACY 0.008 49.307 1619
+SCHAFER 0.008 49.314 1620
+EGAN 0.008 49.322 1621
+TIMMONS 0.008 49.330 1622
+OHARA 0.008 49.337 1623
+KEEN 0.008 49.345 1624
+HAMLIN 0.008 49.353 1625
+FINN 0.008 49.360 1626
+CORTES 0.008 49.368 1627
+MCNAIR 0.008 49.376 1628
+LOUIS 0.008 49.383 1629
+CLIFFORD 0.008 49.391 1630
+NADEAU 0.008 49.398 1631
+MOSELEY 0.008 49.406 1632
+MICHAUD 0.008 49.414 1633
+ROSEN 0.008 49.421 1634
+OAKES 0.008 49.429 1635
+KURTZ 0.008 49.436 1636
+JEFFERS 0.008 49.444 1637
+CALLOWAY 0.008 49.452 1638
+BEAL 0.008 49.459 1639
+BAUTISTA 0.008 49.467 1640
+WINN 0.008 49.474 1641
+SUGGS 0.008 49.482 1642
+STERN 0.008 49.490 1643
+STAPLETON 0.008 49.497 1644
+LYLES 0.008 49.505 1645
+LAIRD 0.008 49.512 1646
+MONTANO 0.008 49.520 1647
+DIAMOND 0.008 49.527 1648
+DAWKINS 0.008 49.535 1649
+ROLAND 0.008 49.543 1650
+HAGAN 0.008 49.550 1651
+GOLDMAN 0.008 49.558 1652
+BRYSON 0.008 49.565 1653
+BARAJAS 0.008 49.573 1654
+LOVETT 0.008 49.580 1655
+SEGURA 0.008 49.588 1656
+METZ 0.008 49.595 1657
+LOCKETT 0.008 49.603 1658
+LANGFORD 0.008 49.610 1659
+HINSON 0.008 49.618 1660
+EASTMAN 0.008 49.625 1661
+ROCK 0.008 49.633 1662
+HOOKS 0.008 49.640 1663
+WOODY 0.007 49.648 1664
+SMALLWOOD 0.007 49.655 1665
+SHAPIRO 0.007 49.663 1666
+CROWELL 0.007 49.670 1667
+WHALEN 0.007 49.678 1668
+TRIPLETT 0.007 49.685 1669
+HOOKER 0.007 49.693 1670
+CHATMAN 0.007 49.700 1671
+ALDRICH 0.007 49.708 1672
+CAHILL 0.007 49.715 1673
+YOUNGBLOOD 0.007 49.723 1674
+YBARRA 0.007 49.730 1675
+STALLINGS 0.007 49.738 1676
+SHEETS 0.007 49.745 1677
+SAMUEL 0.007 49.752 1678
+REEDER 0.007 49.760 1679
+PERSON 0.007 49.767 1680
+PACK 0.007 49.775 1681
+LACEY 0.007 49.782 1682
+CONNELLY 0.007 49.790 1683
+BATEMAN 0.007 49.797 1684
+ABERNATHY 0.007 49.804 1685
+WINKLER 0.007 49.812 1686
+WILKES 0.007 49.819 1687
+MASTERS 0.007 49.827 1688
+HACKETT 0.007 49.834 1689
+GRANGER 0.007 49.841 1690
+GILLIS 0.007 49.849 1691
+SCHMITZ 0.007 49.856 1692
+SAPP 0.007 49.863 1693
+NAPIER 0.007 49.871 1694
+SOUZA 0.007 49.878 1695
+LANIER 0.007 49.886 1696
+GOMES 0.007 49.893 1697
+WEIR 0.007 49.900 1698
+OTERO 0.007 49.908 1699
+LEDFORD 0.007 49.915 1700
+BURROUGHS 0.007 49.922 1701
+BABCOCK 0.007 49.930 1702
+VENTURA 0.007 49.937 1703
+SIEGEL 0.007 49.944 1704
+DUGAN 0.007 49.952 1705
+CLINTON 0.007 49.959 1706
+CHRISTIE 0.007 49.966 1707
+BLEDSOE 0.007 49.974 1708
+ATWOOD 0.007 49.981 1709
+WRAY 0.007 49.988 1710
+VARNER 0.007 49.996 1711
+SPANGLER 0.007 50.003 1712
+OTTO 0.007 50.010 1713
+ANAYA 0.007 50.017 1714
+STALEY 0.007 50.025 1715
+KRAFT 0.007 50.032 1716
+FOURNIER 0.007 50.039 1717
+EDDY 0.007 50.047 1718
+BELANGER 0.007 50.054 1719
+WOLFF 0.007 50.061 1720
+THORNE 0.007 50.069 1721
+BYNUM 0.007 50.076 1722
+BURNETTE 0.007 50.083 1723
+BOYKIN 0.007 50.090 1724
+SWENSON 0.007 50.098 1725
+PURVIS 0.007 50.105 1726
+PINA 0.007 50.112 1727
+KHAN 0.007 50.119 1728
+DUVALL 0.007 50.127 1729
+DARBY 0.007 50.134 1730
+XIONG 0.007 50.141 1731
+KAUFFMAN 0.007 50.148 1732
+ALI 0.007 50.156 1733
+YU 0.007 50.163 1734
+HEALY 0.007 50.170 1735
+ENGLE 0.007 50.177 1736
+CORONA 0.007 50.185 1737
+BENOIT 0.007 50.192 1738
+VALLE 0.007 50.199 1739
+STEINER 0.007 50.206 1740
+SPICER 0.007 50.214 1741
+SHAVER 0.007 50.221 1742
+RANDLE 0.007 50.228 1743
+LUNDY 0.007 50.235 1744
+DOW 0.007 50.242 1745
+CHIN 0.007 50.250 1746
+CALVERT 0.007 50.257 1747
+STATON 0.007 50.264 1748
+NEFF 0.007 50.271 1749
+KEARNEY 0.007 50.278 1750
+DARDEN 0.007 50.286 1751
+OAKLEY 0.007 50.293 1752
+MEDEIROS 0.007 50.300 1753
+MCCRACKEN 0.007 50.307 1754
+CRENSHAW 0.007 50.314 1755
+BLOCK 0.007 50.322 1756
+BEAVER 0.007 50.329 1757
+PERDUE 0.007 50.336 1758
+DILL 0.007 50.343 1759
+WHITTAKER 0.007 50.350 1760
+TOBIN 0.007 50.357 1761
+CORNELIUS 0.007 50.365 1762
+WASHBURN 0.007 50.372 1763
+HOGUE 0.007 50.379 1764
+GOODRICH 0.007 50.386 1765
+EASLEY 0.007 50.393 1766
+BRAVO 0.007 50.400 1767
+DENNISON 0.007 50.407 1768
+VERA 0.007 50.414 1769
+SHIPLEY 0.007 50.422 1770
+KERNS 0.007 50.429 1771
+JORGENSEN 0.007 50.436 1772
+CRAIN 0.007 50.443 1773
+ABEL 0.007 50.450 1774
+VILLALOBOS 0.007 50.457 1775
+MAURER 0.007 50.464 1776
+LONGORIA 0.007 50.471 1777
+KEENE 0.007 50.478 1778
+COON 0.007 50.485 1779
+SIERRA 0.007 50.492 1780
+WITHERSPOON 0.007 50.499 1781
+STAPLES 0.007 50.506 1782
+PETTIT 0.007 50.513 1783
+KINCAID 0.007 50.520 1784
+EASON 0.007 50.528 1785
+MADRID 0.007 50.535 1786
+ECHOLS 0.007 50.542 1787
+LUSK 0.007 50.549 1788
+WU 0.007 50.556 1789
+STAHL 0.007 50.563 1790
+CURRIE 0.007 50.570 1791
+THAYER 0.007 50.577 1792
+SHULTZ 0.007 50.584 1793
+SHERWOOD 0.007 50.591 1794
+MCNALLY 0.007 50.598 1795
+SEAY 0.007 50.604 1796
+NORTH 0.007 50.611 1797
+MAHER 0.007 50.618 1798
+KENNY 0.007 50.625 1799
+HOPE 0.007 50.632 1800
+GAGNE 0.007 50.639 1801
+BARROW 0.007 50.646 1802
+NAVA 0.007 50.653 1803
+MYLES 0.007 50.660 1804
+MORELAND 0.007 50.667 1805
+HONEYCUTT 0.007 50.674 1806
+HEARN 0.007 50.681 1807
+DIGGS 0.007 50.688 1808
+CARON 0.007 50.695 1809
+WHITTEN 0.007 50.702 1810
+WESTBROOK 0.007 50.709 1811
+STOVALL 0.007 50.716 1812
+RAGLAND 0.007 50.723 1813
+QUEEN 0.007 50.730 1814
+MUNSON 0.007 50.736 1815
+MEIER 0.007 50.743 1816
+LOONEY 0.007 50.750 1817
+KIMBLE 0.007 50.757 1818
+JOLLY 0.007 50.764 1819
+HOBSON 0.007 50.771 1820
+LONDON 0.007 50.778 1821
+GODDARD 0.007 50.785 1822
+CULVER 0.007 50.792 1823
+BURR 0.007 50.799 1824
+PRESLEY 0.007 50.806 1825
+NEGRON 0.007 50.813 1826
+CONNELL 0.007 50.819 1827
+TOVAR 0.007 50.826 1828
+MARCUS 0.007 50.833 1829
+HUDDLESTON 0.007 50.840 1830
+HAMMER 0.007 50.847 1831
+ASHBY 0.007 50.854 1832
+SALTER 0.007 50.861 1833
+ROOT 0.007 50.868 1834
+PENDLETON 0.007 50.875 1835
+OLEARY 0.007 50.881 1836
+NICKERSON 0.007 50.888 1837
+MYRICK 0.007 50.895 1838
+JUDD 0.007 50.902 1839
+JACOBSEN 0.007 50.909 1840
+ELLIOT 0.007 50.916 1841
+BAIN 0.007 50.923 1842
+ADAIR 0.007 50.929 1843
+STARNES 0.007 50.936 1844
+SHELDON 0.007 50.943 1845
+MATOS 0.007 50.950 1846
+LIGHT 0.007 50.957 1847
+BUSBY 0.007 50.964 1848
+HERNDON 0.007 50.971 1849
+HANLEY 0.007 50.977 1850
+BELLAMY 0.007 50.984 1851
+JACK 0.007 50.991 1852
+DOTY 0.007 50.998 1853
+BARTLEY 0.007 51.005 1854
+YAZZIE 0.007 51.011 1855
+ROWELL 0.007 51.018 1856
+PARSON 0.007 51.025 1857
+GIFFORD 0.007 51.032 1858
+CULLEN 0.007 51.039 1859
+CHRISTIANSEN 0.007 51.045 1860
+BENAVIDES 0.007 51.052 1861
+BARNHART 0.007 51.059 1862
+TALBOT 0.007 51.066 1863
+MOCK 0.007 51.072 1864
+CRANDALL 0.007 51.079 1865
+CONNORS 0.007 51.086 1866
+BONDS 0.007 51.093 1867
+WHITT 0.007 51.099 1868
+GAGE 0.007 51.106 1869
+BERGMAN 0.007 51.113 1870
+ARREDONDO 0.007 51.120 1871
+ADDISON 0.007 51.126 1872
+MARION 0.007 51.133 1873
+LUJAN 0.007 51.140 1874
+DOWDY 0.007 51.147 1875
+JERNIGAN 0.007 51.153 1876
+HUYNH 0.007 51.160 1877
+BOUCHARD 0.007 51.167 1878
+DUTTON 0.007 51.173 1879
+RHOADES 0.007 51.180 1880
+OUELLETTE 0.007 51.187 1881
+KISER 0.007 51.193 1882
+RUBIN 0.007 51.200 1883
+HERRINGTON 0.007 51.207 1884
+HARE 0.007 51.213 1885
+DENNY 0.007 51.220 1886
+BLACKMAN 0.007 51.227 1887
+BABB 0.007 51.233 1888
+ALLRED 0.007 51.240 1889
+RUDD 0.007 51.247 1890
+PAULSON 0.007 51.253 1891
+OGDEN 0.007 51.260 1892
+KOENIG 0.007 51.267 1893
+JACOB 0.007 51.273 1894
+IRVING 0.007 51.280 1895
+GEIGER 0.007 51.287 1896
+BEGAY 0.007 51.293 1897
+PARRA 0.007 51.300 1898
+CHAMPION 0.007 51.306 1899
+LASSITER 0.007 51.313 1900
+HAWK 0.007 51.320 1901
+ESPOSITO 0.007 51.326 1902
+CHO 0.007 51.333 1903
+WALDRON 0.007 51.340 1904
+VERNON 0.007 51.346 1905
+RANSOM 0.007 51.353 1906
+PRATHER 0.007 51.359 1907
+KEENAN 0.007 51.366 1908
+JEAN 0.007 51.373 1909
+GROVER 0.007 51.379 1910
+CHACON 0.007 51.386 1911
+VICK 0.007 51.392 1912
+SANDS 0.007 51.399 1913
+ROARK 0.007 51.405 1914
+PARR 0.007 51.412 1915
+MAYBERRY 0.007 51.419 1916
+GREENBERG 0.007 51.425 1917
+COLEY 0.007 51.432 1918
+BRUNER 0.007 51.438 1919
+WHITMAN 0.007 51.445 1920
+SKAGGS 0.007 51.451 1921
+SHIPMAN 0.007 51.458 1922
+MEANS 0.007 51.465 1923
+LEARY 0.007 51.471 1924
+HUTTON 0.007 51.478 1925
+ROMO 0.007 51.484 1926
+MEDRANO 0.007 51.491 1927
+LADD 0.007 51.497 1928
+KRUSE 0.007 51.504 1929
+FRIEND 0.007 51.511 1930
+DARLING 0.007 51.517 1931
+ASKEW 0.007 51.524 1932
+VALENTIN 0.007 51.530 1933
+SCHULZ 0.007 51.537 1934
+ALFARO 0.007 51.543 1935
+TABOR 0.007 51.550 1936
+MOHR 0.007 51.556 1937
+GALLO 0.007 51.563 1938
+BERMUDEZ 0.007 51.569 1939
+PEREIRA 0.007 51.576 1940
+ISAAC 0.007 51.582 1941
+BLISS 0.007 51.589 1942
+REAVES 0.006 51.595 1943
+FLINT 0.006 51.602 1944
+COMER 0.006 51.608 1945
+BOSTON 0.006 51.615 1946
+WOODALL 0.006 51.621 1947
+NAQUIN 0.006 51.628 1948
+GUEVARA 0.006 51.634 1949
+EARL 0.006 51.641 1950
+DELONG 0.006 51.647 1951
+CARRIER 0.006 51.654 1952
+PICKENS 0.006 51.660 1953
+BRAND 0.006 51.666 1954
+TILLEY 0.006 51.673 1955
+SCHAFFER 0.006 51.679 1956
+READ 0.006 51.686 1957
+LIM 0.006 51.692 1958
+KNUTSON 0.006 51.699 1959
+FENTON 0.006 51.705 1960
+DORAN 0.006 51.712 1961
+CHU 0.006 51.718 1962
+VOGT 0.006 51.724 1963
+VANN 0.006 51.731 1964
+PRESCOTT 0.006 51.737 1965
+MCLAIN 0.006 51.744 1966
+LANDIS 0.006 51.750 1967
+CORCORAN 0.006 51.757 1968
+AMBROSE 0.006 51.763 1969
+ZAPATA 0.006 51.769 1970
+HYATT 0.006 51.776 1971
+HEMPHILL 0.006 51.782 1972
+FAULK 0.006 51.789 1973
+CALL 0.006 51.795 1974
+DOVE 0.006 51.801 1975
+BOUDREAUX 0.006 51.808 1976
+ARAGON 0.006 51.814 1977
+WHITLOCK 0.006 51.821 1978
+TREJO 0.006 51.827 1979
+TACKETT 0.006 51.833 1980
+SHEARER 0.006 51.840 1981
+SALDANA 0.006 51.846 1982
+HANKS 0.006 51.852 1983
+GOLD 0.006 51.859 1984
+DRIVER 0.006 51.865 1985
+MCKINNON 0.006 51.871 1986
+KOEHLER 0.006 51.878 1987
+CHAMPAGNE 0.006 51.884 1988
+BOURGEOIS 0.006 51.891 1989
+POOL 0.006 51.897 1990
+KEYES 0.006 51.903 1991
+GOODSON 0.006 51.910 1992
+FOOTE 0.006 51.916 1993
+EARLY 0.006 51.922 1994
+LUNSFORD 0.006 51.929 1995
+GOLDSMITH 0.006 51.935 1996
+FLOOD 0.006 51.941 1997
+WINSLOW 0.006 51.948 1998
+SAMS 0.006 51.954 1999
+REAGAN 0.006 51.960 2000
+MCCLOUD 0.006 51.967 2001
+HOUGH 0.006 51.973 2002
+ESQUIVEL 0.006 51.979 2003
+NAYLOR 0.006 51.985 2004
+LOOMIS 0.006 51.992 2005
+CORONADO 0.006 51.998 2006
+LUDWIG 0.006 52.004 2007
+BRASWELL 0.006 52.011 2008
+BEARDEN 0.006 52.017 2009
+SHERRILL 0.006 52.023 2010
+HUANG 0.006 52.029 2011
+FAGAN 0.006 52.036 2012
+EZELL 0.006 52.042 2013
+EDMONDSON 0.006 52.048 2014
+CYR 0.006 52.054 2015
+CRONIN 0.006 52.061 2016
+NUNN 0.006 52.067 2017
+LEMON 0.006 52.073 2018
+GUILLORY 0.006 52.079 2019
+GRIER 0.006 52.086 2020
+DUBOSE 0.006 52.092 2021
+TRAYLOR 0.006 52.098 2022
+RYDER 0.006 52.104 2023
+DOBBINS 0.006 52.111 2024
+COYLE 0.006 52.117 2025
+APONTE 0.006 52.123 2026
+WHITMORE 0.006 52.129 2027
+SMALLS 0.006 52.136 2028
+ROWAN 0.006 52.142 2029
+MALLOY 0.006 52.148 2030
+CARDONA 0.006 52.154 2031
+BRAXTON 0.006 52.160 2032
+BORDEN 0.006 52.167 2033
+HUMPHRIES 0.006 52.173 2034
+CARRASCO 0.006 52.179 2035
+RUFF 0.006 52.185 2036
+METZGER 0.006 52.191 2037
+HUNTLEY 0.006 52.198 2038
+HINOJOSA 0.006 52.204 2039
+FINNEY 0.006 52.210 2040
+MADSEN 0.006 52.216 2041
+HONG 0.006 52.222 2042
+HILLS 0.006 52.228 2043
+ERNST 0.006 52.235 2044
+DOZIER 0.006 52.241 2045
+BURKHART 0.006 52.247 2046
+BOWSER 0.006 52.253 2047
+PERALTA 0.006 52.259 2048
+DAIGLE 0.006 52.265 2049
+WHITTINGTON 0.006 52.272 2050
+SORENSON 0.006 52.278 2051
+SAUCEDO 0.006 52.284 2052
+ROCHE 0.006 52.290 2053
+REDDING 0.006 52.296 2054
+LOYD 0.006 52.302 2055
+FUGATE 0.006 52.308 2056
+AVALOS 0.006 52.315 2057
+WAITE 0.006 52.321 2058
+LIND 0.006 52.327 2059
+HUSTON 0.006 52.333 2060
+HAY 0.006 52.339 2061
+BENEDICT 0.006 52.345 2062
+HAWTHORNE 0.006 52.351 2063
+HAMBY 0.006 52.357 2064
+BOYLES 0.006 52.363 2065
+BOLES 0.006 52.370 2066
+REGAN 0.006 52.376 2067
+FAUST 0.006 52.382 2068
+CROOK 0.006 52.388 2069
+BEAM 0.006 52.394 2070
+BARGER 0.006 52.400 2071
+HINDS 0.006 52.406 2072
+GALLARDO 0.006 52.412 2073
+ELIAS 0.006 52.418 2074
+WILLOUGHBY 0.006 52.424 2075
+WILLINGHAM 0.006 52.430 2076
+WILBURN 0.006 52.436 2077
+ECKERT 0.006 52.442 2078
+BUSCH 0.006 52.448 2079
+ZEPEDA 0.006 52.455 2080
+WORTHINGTON 0.006 52.461 2081
+TINSLEY 0.006 52.467 2082
+RUSS 0.006 52.473 2083
+LI 0.006 52.479 2084
+HOFF 0.006 52.485 2085
+HAWLEY 0.006 52.491 2086
+CARMONA 0.006 52.497 2087
+VARELA 0.006 52.503 2088
+RECTOR 0.006 52.509 2089
+NEWCOMB 0.006 52.515 2090
+MALLORY 0.006 52.521 2091
+KINSEY 0.006 52.527 2092
+DUBE 0.006 52.533 2093
+WHATLEY 0.006 52.539 2094
+STRANGE 0.006 52.545 2095
+RAGSDALE 0.006 52.551 2096
+IVY 0.006 52.557 2097
+BERNSTEIN 0.006 52.563 2098
+BECERRA 0.006 52.569 2099
+YOST 0.006 52.575 2100
+MATTSON 0.006 52.581 2101
+LY 0.006 52.587 2102
+FELDER 0.006 52.593 2103
+CHEEK 0.006 52.599 2104
+LUKE 0.006 52.605 2105
+HANDY 0.006 52.611 2106
+GROSSMAN 0.006 52.617 2107
+GAUTHIER 0.006 52.623 2108
+ESCOBEDO 0.006 52.629 2109
+BRADEN 0.006 52.635 2110
+BECKMAN 0.006 52.641 2111
+MOTT 0.006 52.647 2112
+HILLMAN 0.006 52.653 2113
+GIL 0.006 52.659 2114
+FLAHERTY 0.006 52.665 2115
+DYKES 0.006 52.671 2116
+DOE 0.006 52.677 2117
+STOCKTON 0.006 52.683 2118
+STEARNS 0.006 52.688 2119
+LOFTON 0.006 52.694 2120
+KITCHEN 0.006 52.700 2121
+COATS 0.006 52.706 2122
+CAVAZOS 0.006 52.712 2123
+BEAVERS 0.006 52.718 2124
+BARRIOS 0.006 52.724 2125
+TANG 0.006 52.730 2126
+PARISH 0.006 52.736 2127
+MOSHER 0.006 52.742 2128
+LINCOLN 0.006 52.748 2129
+CARDWELL 0.006 52.754 2130
+COLES 0.006 52.760 2131
+BURNHAM 0.006 52.766 2132
+WELLER 0.006 52.772 2133
+LEMONS 0.006 52.777 2134
+BEEBE 0.006 52.783 2135
+AGUILERA 0.006 52.789 2136
+RING 0.006 52.795 2137
+PARNELL 0.006 52.801 2138
+HARMAN 0.006 52.807 2139
+COUTURE 0.006 52.813 2140
+ALLEY 0.006 52.819 2141
+SCHUMACHER 0.006 52.825 2142
+REDD 0.006 52.830 2143
+DOBBS 0.006 52.836 2144
+BLUM 0.006 52.842 2145
+BLALOCK 0.006 52.848 2146
+MERCHANT 0.006 52.854 2147
+ENNIS 0.006 52.860 2148
+DENSON 0.006 52.866 2149
+COTTRELL 0.006 52.871 2150
+CHESTER 0.006 52.877 2151
+BRANNON 0.006 52.883 2152
+BAGLEY 0.006 52.889 2153
+AVILES 0.006 52.895 2154
+WATT 0.006 52.901 2155
+SOUSA 0.006 52.906 2156
+ROSENTHAL 0.006 52.912 2157
+ROONEY 0.006 52.918 2158
+DIETZ 0.006 52.924 2159
+BLANK 0.006 52.930 2160
+PAQUETTE 0.006 52.936 2161
+MCCLELLAND 0.006 52.941 2162
+DUFF 0.006 52.947 2163
+VELASCO 0.006 52.953 2164
+LENTZ 0.006 52.959 2165
+GRUBB 0.006 52.965 2166
+BURROWS 0.006 52.970 2167
+BARBOUR 0.006 52.976 2168
+ULRICH 0.006 52.982 2169
+SHOCKLEY 0.006 52.988 2170
+RADER 0.006 52.994 2171
+GERMAN 0.006 52.999 2172
+BEYER 0.006 53.005 2173
+MIXON 0.006 53.011 2174
+LAYTON 0.006 53.017 2175
+ALTMAN 0.006 53.022 2176
+ALONZO 0.006 53.028 2177
+WEATHERS 0.006 53.034 2178
+TITUS 0.006 53.040 2179
+STONER 0.006 53.046 2180
+SQUIRES 0.006 53.051 2181
+SHIPP 0.006 53.057 2182
+PRIEST 0.006 53.063 2183
+LIPSCOMB 0.006 53.069 2184
+CUTLER 0.006 53.074 2185
+CABALLERO 0.006 53.080 2186
+ZIMMER 0.006 53.086 2187
+WILLETT 0.006 53.092 2188
+THURSTON 0.006 53.097 2189
+STOREY 0.006 53.103 2190
+MEDLEY 0.006 53.109 2191
+LYLE 0.006 53.114 2192
+EPPERSON 0.006 53.120 2193
+SHAH 0.006 53.126 2194
+MCMILLIAN 0.006 53.132 2195
+BAGGETT 0.006 53.137 2196
+TORREZ 0.006 53.143 2197
+LAWS 0.006 53.149 2198
+HIRSCH 0.006 53.155 2199
+DENT 0.006 53.160 2200
+COREY 0.006 53.166 2201
+POIRIER 0.006 53.172 2202
+PEACHEY 0.006 53.177 2203
+JACQUES 0.006 53.183 2204
+FARRAR 0.006 53.189 2205
+CREECH 0.006 53.194 2206
+BARTH 0.006 53.200 2207
+TRIMBLE 0.006 53.206 2208
+FRANCE 0.006 53.211 2209
+DUPRE 0.006 53.217 2210
+ALBRECHT 0.006 53.223 2211
+SAMPLE 0.006 53.228 2212
+LAWLER 0.006 53.234 2213
+CRISP 0.006 53.240 2214
+CONROY 0.006 53.245 2215
+CHADWICK 0.006 53.251 2216
+WETZEL 0.006 53.257 2217
+NESBITT 0.006 53.262 2218
+MURRY 0.006 53.268 2219
+JAMESON 0.006 53.274 2220
+WILHELM 0.006 53.279 2221
+PATTEN 0.006 53.285 2222
+MINTON 0.006 53.291 2223
+MATSON 0.006 53.296 2224
+KIMBROUGH 0.006 53.302 2225
+IVERSON 0.006 53.307 2226
+GUINN 0.006 53.313 2227
+GALE 0.006 53.319 2228
+FORTUNE 0.006 53.324 2229
+CROFT 0.006 53.330 2230
+TOTH 0.006 53.336 2231
+PULLIAM 0.006 53.341 2232
+NUGENT 0.006 53.347 2233
+NEWBY 0.006 53.352 2234
+LITTLEJOHN 0.006 53.358 2235
+DIAS 0.006 53.364 2236
+CANALES 0.006 53.369 2237
+BERNIER 0.006 53.375 2238
+BARON 0.006 53.380 2239
+BARNEY 0.006 53.386 2240
+SINGLETARY 0.006 53.392 2241
+RENTERIA 0.006 53.397 2242
+PRUETT 0.006 53.403 2243
+MCHUGH 0.006 53.408 2244
+MABRY 0.006 53.414 2245
+LANDRUM 0.006 53.420 2246
+BROWER 0.006 53.425 2247
+WELDON 0.006 53.431 2248
+STODDARD 0.006 53.436 2249
+RUTH 0.006 53.442 2250
+CAGLE 0.006 53.448 2251
+STJOHN 0.006 53.453 2252
+SCALES 0.006 53.459 2253
+KOHLER 0.006 53.464 2254
+KELLOGG 0.006 53.470 2255
+HOPSON 0.006 53.475 2256
+GANT 0.006 53.481 2257
+THARP 0.006 53.486 2258
+GANN 0.006 53.492 2259
+ZEIGLER 0.006 53.498 2260
+PRINGLE 0.006 53.503 2261
+HAMMONS 0.006 53.509 2262
+FAIRCHILD 0.006 53.514 2263
+DEATON 0.006 53.520 2264
+CHAVIS 0.006 53.525 2265
+CARNES 0.006 53.531 2266
+ROWLEY 0.006 53.536 2267
+MATLOCK 0.006 53.542 2268
+LIBBY 0.006 53.547 2269
+KEARNS 0.006 53.553 2270
+IRIZARRY 0.006 53.558 2271
+CARRINGTON 0.006 53.564 2272
+STARKEY 0.006 53.569 2273
+PEPPER 0.006 53.575 2274
+LOPES 0.006 53.580 2275
+JARRELL 0.006 53.586 2276
+FAY 0.006 53.591 2277
+CRAVEN 0.006 53.597 2278
+BEVERLY 0.006 53.602 2279
+BAUM 0.006 53.608 2280
+SPAIN 0.005 53.613 2281
+LITTLEFIELD 0.005 53.619 2282
+LINN 0.005 53.624 2283
+HUMPHREYS 0.005 53.630 2284
+HOOK 0.005 53.635 2285
+HIGH 0.005 53.641 2286
+ETHERIDGE 0.005 53.646 2287
+CUELLAR 0.005 53.652 2288
+CHASTAIN 0.005 53.657 2289
+CHANCE 0.005 53.663 2290
+BUNDY 0.005 53.668 2291
+SPEER 0.005 53.674 2292
+SKELTON 0.005 53.679 2293
+QUIROZ 0.005 53.685 2294
+PYLE 0.005 53.690 2295
+PORTILLO 0.005 53.696 2296
+PONDER 0.005 53.701 2297
+MOULTON 0.005 53.706 2298
+MACHADO 0.005 53.712 2299
+LIU 0.005 53.717 2300
+KILLIAN 0.005 53.723 2301
+HUTSON 0.005 53.728 2302
+HITCHCOCK 0.005 53.734 2303
+ELLSWORTH 0.005 53.739 2304
+DOWLING 0.005 53.745 2305
+CLOUD 0.005 53.750 2306
+BURDICK 0.005 53.756 2307
+SPANN 0.005 53.761 2308
+PEDERSEN 0.005 53.767 2309
+LEVIN 0.005 53.772 2310
+LEGGETT 0.005 53.778 2311
+HAYWARD 0.005 53.783 2312
+HACKER 0.005 53.788 2313
+DIETRICH 0.005 53.794 2314
+BEAULIEU 0.005 53.799 2315
+BARKSDALE 0.005 53.805 2316
+WAKEFIELD 0.005 53.810 2317
+SNOWDEN 0.005 53.816 2318
+PARIS 0.005 53.821 2319
+BRISCOE 0.005 53.827 2320
+BOWIE 0.005 53.832 2321
+BERMAN 0.005 53.837 2322
+OGLE 0.005 53.843 2323
+MCGREGOR 0.005 53.848 2324
+LAUGHLIN 0.005 53.854 2325
+HELM 0.005 53.859 2326
+BURDEN 0.005 53.864 2327
+WHEATLEY 0.005 53.870 2328
+SCHREIBER 0.005 53.875 2329
+PRESSLEY 0.005 53.881 2330
+PARRIS 0.005 53.886 2331
+NG 0.005 53.892 2332
+ALANIZ 0.005 53.897 2333
+AGEE 0.005 53.902 2334
+URBAN 0.005 53.908 2335
+SWANN 0.005 53.913 2336
+SNODGRASS 0.005 53.919 2337
+SCHUSTER 0.005 53.924 2338
+RADFORD 0.005 53.929 2339
+MONK 0.005 53.935 2340
+MATTINGLY 0.005 53.940 2341
+MAIN 0.005 53.945 2342
+LAMAR 0.005 53.951 2343
+HARP 0.005 53.956 2344
+GIRARD 0.005 53.962 2345
+CHENEY 0.005 53.967 2346
+YANCEY 0.005 53.972 2347
+WAGONER 0.005 53.978 2348
+RIDLEY 0.005 53.983 2349
+LOMBARDO 0.005 53.988 2350
+LAU 0.005 53.994 2351
+HUDGINS 0.005 53.999 2352
+GASKINS 0.005 54.005 2353
+DUCKWORTH 0.005 54.010 2354
+COE 0.005 54.015 2355
+COBURN 0.005 54.021 2356
+WILLEY 0.005 54.026 2357
+PRADO 0.005 54.031 2358
+NEWBERRY 0.005 54.037 2359
+MAGANA 0.005 54.042 2360
+HAMMONDS 0.005 54.048 2361
+ELAM 0.005 54.053 2362
+WHIPPLE 0.005 54.058 2363
+SLADE 0.005 54.064 2364
+SERNA 0.005 54.069 2365
+OJEDA 0.005 54.074 2366
+LILES 0.005 54.080 2367
+DORMAN 0.005 54.085 2368
+DIEHL 0.005 54.090 2369
+ANGEL 0.005 54.096 2370
+UPTON 0.005 54.101 2371
+REARDON 0.005 54.106 2372
+MICHAELS 0.005 54.112 2373
+KELSEY 0.005 54.117 2374
+GOETZ 0.005 54.122 2375
+ELLER 0.005 54.128 2376
+BAUMAN 0.005 54.133 2377
+BAER 0.005 54.138 2378
+AUGUSTINE 0.005 54.144 2379
+LAYNE 0.005 54.149 2380
+HUMMEL 0.005 54.154 2381
+BRENNER 0.005 54.159 2382
+AMAYA 0.005 54.165 2383
+ADAMSON 0.005 54.170 2384
+ORNELAS 0.005 54.175 2385
+DOWELL 0.005 54.181 2386
+CLOUTIER 0.005 54.186 2387
+CHRISTY 0.005 54.191 2388
+CASTELLANOS 0.005 54.197 2389
+WING 0.005 54.202 2390
+WELLMAN 0.005 54.207 2391
+SAYLOR 0.005 54.212 2392
+OROURKE 0.005 54.218 2393
+MOYA 0.005 54.223 2394
+MONTALVO 0.005 54.228 2395
+KILPATRICK 0.005 54.234 2396
+HARLEY 0.005 54.239 2397
+DURBIN 0.005 54.244 2398
+SHELL 0.005 54.249 2399
+OLDHAM 0.005 54.255 2400
+KANG 0.005 54.260 2401
+GARVIN 0.005 54.265 2402
+FOSS 0.005 54.270 2403
+BRANHAM 0.005 54.276 2404
+BARTHOLOMEW 0.005 54.281 2405
+TEMPLETON 0.005 54.286 2406
+MAGUIRE 0.005 54.291 2407
+HOLTON 0.005 54.297 2408
+ALONSO 0.005 54.302 2409
+RIDER 0.005 54.307 2410
+MONAHAN 0.005 54.312 2411
+MCCORMACK 0.005 54.318 2412
+BEATY 0.005 54.323 2413
+ANDERS 0.005 54.328 2414
+STREETER 0.005 54.333 2415
+NIETO 0.005 54.338 2416
+NIELSON 0.005 54.344 2417
+MOFFETT 0.005 54.349 2418
+LANKFORD 0.005 54.354 2419
+KEATING 0.005 54.359 2420
+HECK 0.005 54.365 2421
+GATLIN 0.005 54.370 2422
+DELATORRE 0.005 54.375 2423
+CALLAWAY 0.005 54.380 2424
+ADCOCK 0.005 54.385 2425
+WORRELL 0.005 54.391 2426
+UNGER 0.005 54.396 2427
+ROBINETTE 0.005 54.401 2428
+NOWAK 0.005 54.406 2429
+JETER 0.005 54.411 2430
+BRUNNER 0.005 54.417 2431
+ASHTON 0.005 54.422 2432
+STEEN 0.005 54.427 2433
+PARROTT 0.005 54.432 2434
+OVERSTREET 0.005 54.437 2435
+NOBLES 0.005 54.443 2436
+MONTANEZ 0.005 54.448 2437
+LUTHER 0.005 54.453 2438
+CLEVENGER 0.005 54.458 2439
+BRINKLEY 0.005 54.463 2440
+TRAHAN 0.005 54.468 2441
+QUARLES 0.005 54.474 2442
+PICKERING 0.005 54.479 2443
+PEDERSON 0.005 54.484 2444
+JANSEN 0.005 54.489 2445
+GRANTHAM 0.005 54.494 2446
+GILCHRIST 0.005 54.499 2447
+CRESPO 0.005 54.505 2448
+AIKEN 0.005 54.510 2449
+SCHELL 0.005 54.515 2450
+SCHAEFFER 0.005 54.520 2451
+LORENZ 0.005 54.525 2452
+LEYVA 0.005 54.530 2453
+HARMS 0.005 54.536 2454
+DYSON 0.005 54.541 2455
+WALLIS 0.005 54.546 2456
+PEASE 0.005 54.551 2457
+LEAVITT 0.005 54.556 2458
+HYMAN 0.005 54.561 2459
+CHENG 0.005 54.566 2460
+CAVANAUGH 0.005 54.571 2461
+BATTS 0.005 54.577 2462
+WARDEN 0.005 54.582 2463
+SEAMAN 0.005 54.587 2464
+ROCKWELL 0.005 54.592 2465
+QUEZADA 0.005 54.597 2466
+PAXTON 0.005 54.602 2467
+LINDER 0.005 54.607 2468
+HOUCK 0.005
<TRUNCATED>
[18/21] incubator-usergrid git commit: USERGRID-871: add audit
simulations
Posted by to...@apache.org.
USERGRID-871: add audit simulations
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/32fefb98
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/32fefb98
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/32fefb98
Branch: refs/heads/two-dot-o-dev
Commit: 32fefb98cf5c0a5885e5453a1a3183deaa65c708
Parents: 3976ff9
Author: Mike Dunker <md...@apigee.com>
Authored: Fri Jul 31 22:24:33 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Fri Jul 31 22:24:33 2015 -0700
----------------------------------------------------------------------
.../loadtests/runAuditGetCollectionEntities.sh | 71 ++++++++++
.../runAuditVerifyCollectionEntities.sh | 71 ++++++++++
.../datagenerators/FeederGenerator.scala | 60 ++++++---
.../usergrid/enums/ConfigProperties.scala | 8 +-
.../apache/usergrid/enums/ScenarioType.scala | 4 +-
.../apache/usergrid/helpers/Extractors.scala | 7 +
.../org/apache/usergrid/helpers/Setup.scala | 27 ++++
.../usergrid/scenarios/AuditScenarios.scala | 133 +++++++++++++++++++
.../scenarios/EntityCollectionScenarios.scala | 5 +-
.../org/apache/usergrid/settings/Settings.scala | 97 +++++++++++++-
.../usergrid/simulations/AuditSimulation.scala | 68 ++++++++++
stack/loadtests/src/test/resources/dummy.csv | 1 -
.../src/test/resources/dummyAuditUuid.csv | 1 +
.../loadtests/src/test/resources/dummyUuid.csv | 1 +
14 files changed, 526 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/runAuditGetCollectionEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runAuditGetCollectionEntities.sh b/stack/loadtests/runAuditGetCollectionEntities.sh
new file mode 100755
index 0000000..f34ea54
--- /dev/null
+++ b/stack/loadtests/runAuditGetCollectionEntities.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 4 ] || die "At least 4 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) AUDIT_UUID_FILENAME"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+AUDIT_UUID_FILENAME="$4"
+
+shift 4
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+#APP=$(date +%s)
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
+ORG=gatling
+APP=millionentities
+SCENARIO_TYPE=auditGetCollectionEntities
+SEARCH_LIMIT=1000
+
+AUTH_TYPE=token
+TOKEN_TYPE=management
+
+#Execute the test
+mvn gatling:execute \
+-Dorg=${ORG} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DauditUuidFilename=${AUDIT_UUID_FILENAME} \
+-DsearchLimit=${SEARCH_LIMIT} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.AuditSimulation
+
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/runAuditVerifyCollectionEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runAuditVerifyCollectionEntities.sh b/stack/loadtests/runAuditVerifyCollectionEntities.sh
new file mode 100755
index 0000000..f0af5de
--- /dev/null
+++ b/stack/loadtests/runAuditVerifyCollectionEntities.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 4 ] || die "At least 4 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) AUDIT_UUID_FILENAME [FAILED_UUID_FILENAME]"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+AUDIT_UUID_FILENAME="$4"
+FAILED_UUID_FILENAME="$5"
+
+shift 5
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+#APP=$(date +%s)
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
+ORG=gatling
+APP=millionentities
+SCENARIO_TYPE=auditVerifyCollectionEntities
+
+AUTH_TYPE=token
+TOKEN_TYPE=management
+
+#Execute the test
+mvn gatling:execute \
+-Dorg=${ORG} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DauditUuidFilename=${AUDIT_UUID_FILENAME} \
+-DfailedUuidFilename=${FAILED_UUID_FILENAME} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.AuditSimulation
+
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
index 09030f5..61641de 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
@@ -19,9 +19,10 @@ package org.apache.usergrid.datagenerators
import java.util.UUID
import java.util.concurrent.atomic.AtomicInteger
import io.gatling.core.Predef._
-import org.apache.usergrid.helpers.Utils
+import org.apache.usergrid.helpers.{Setup, Utils}
import org.apache.usergrid.settings.Settings
import scala.collection.mutable.ArrayBuffer
+import scala.io.Source
object FeederGenerator {
@@ -231,26 +232,51 @@ object FeederGenerator {
}
}
- /*
- def generateCustomEntityFeeder(numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Feeder[String] =
- new Feeder[String] {
- var counter = new AtomicInteger(seed)
+ def collectionNameFeeder: Feeder[String] = new Feeder[String] {
+ val list: List[String] = Setup.getCollectionsList
+ var counter = new AtomicInteger(0)
- // runs forever -- users detect when data is done using validEntity field
- override def hasNext: Boolean = true
+ override def hasNext: Boolean = true
- override def next(): Map[String, String] = {
- val i = counter.getAndIncrement()
- val entityName = prefix.concat(i.toString)
- val entity = EntityDataGenerator.generateEntity(entityType, entityName)
- val entityUrl = Settings.baseCollectionUrl + "/" + entityName
- val validEntity = if (i >= seed + numEntities) "no" else "yes"
+ override def next(): Map[String, String] = {
+ val i = counter.getAndIncrement()
+ val collectionName = if (i < list.length) list(i) else ""
+ val validEntity = if (i >= list.length) "no" else "yes"
- Map("entityName" -> entityName, "entity" -> entity, "entityUrl" -> entityUrl, "validEntity" -> validEntity)
- }
- }
+ Map("collectionName" -> collectionName, "validEntity" -> validEntity)
+ }
+ }
- */
+ def collectionCsvFeeder: Feeder[String] = new Feeder[String] {
+ val csvLines = if (Settings.feedAuditUuids) Source.fromFile(Settings.feedAuditUuidFilename).getLines().toArray else Array[String]()
+ val csvLinesLen = csvLines.length
+ var counter = new AtomicInteger(0)
+
+ override def hasNext: Boolean = true
+
+ def getNextLine: String = {
+ do {
+ val i = counter.getAndIncrement()
+ if (i >= csvLinesLen) return null
+
+ val line = csvLines(i)
+ if (line != Settings.auditUuidsHeader) return line
+
+ } while (true)
+
+ null
+ }
+
+ override def next: Map[String, String] = {
+ val line = getNextLine
+ val validEntity = if (line == null) "no" else "yes"
+ val array = if (line != null) line.split(",") else null
+ val collectionName = if (line != null) array(0) else ""
+ val uuid = if (line != null) array(1) else ""
+
+ Map("collectionName" -> collectionName, "uuid" -> uuid, "validEntity" -> validEntity)
+ }
+ }
def generateCustomEntityInfiniteFeeder(seed: Int = Settings.entitySeed, entityType: String = Settings.entityType, prefix: String = Settings.entityPrefix): Iterator[String] = {
Iterator.from(seed).map(i=>EntityDataGenerator.generateEntity(entityType, prefix.concat(i.toString)))
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
index 7e6cf55..75228a7 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
@@ -51,6 +51,8 @@ object ConfigProperties {
val EntityWorkerCount = "entityWorkerCount"
val EntityWorkerNum = "entityWorkerNum"
val UuidFilename = "uuidFilename"
+ val AuditUuidFilename = "auditUuidFilename"
+ val FailedUuidFilename = "failedUuidFilename"
val SandboxCollection = "sandboxCollection"
val PurgeUsers = "purgeUsers"
@@ -59,7 +61,7 @@ object ConfigProperties {
NumDevices,Collection,RampTime,Throttle,RpsTarget,RpsRampTime,HoldDuration,PushNotifier,PushProvider,EntityPrefix,
EntityType,EntitySeed,SearchLimit,SearchQuery,EndConditionType,EndMinutes,EndRequestCount,OrgCreationUsername,
OrgCreationName,OrgCreationEmail,OrgCreationPassword,UpdateProperty,UpdateValue,EntityWorkerCount,EntityWorkerNum,
- UuidFilename,SandboxCollection,PurgeUsers)
+ UuidFilename,AuditUuidFilename,FailedUuidFilename,SandboxCollection,PurgeUsers)
def isValid(str: String): Boolean = {
Values.contains(str)
@@ -113,7 +115,9 @@ object ConfigProperties {
case UpdateValue => new Date().toString
case EntityWorkerCount => 0
case EntityWorkerNum => 0
- case UuidFilename => "dummy.csv"
+ case UuidFilename => "dummyUuid.csv"
+ case AuditUuidFilename => "dummyAuditUuid.csv"
+ case FailedUuidFilename => "/tmp/dummy.csv"
case SandboxCollection => false
case PurgeUsers => 100
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
index 760c837..76fae7b 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
@@ -8,9 +8,11 @@ object ScenarioType {
val UpdateEntities = "updateEntities"
val UuidRandomInfinite = "uuidRandomInfinite"
val GetByNameSequential = "getByNameSequential"
+ val AuditGetCollectionEntities = "auditGetCollectionEntities"
+ val AuditVerifyCollectionEntities = "auditVerifyCollectionEntities"
val Values = Seq(GetAllByCursor,NameRandomInfinite,LoadEntities,DeleteEntities,UpdateEntities,UuidRandomInfinite,
- GetByNameSequential)
+ GetByNameSequential,AuditGetCollectionEntities,AuditVerifyCollectionEntities)
def isValid(str: String): Boolean = {
Values.contains(str)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
index e970fbd..221c0a7 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
@@ -51,6 +51,13 @@ object Extractors {
}
/**
+ * Will extract the uuids from the get collection response.
+ */
+ def extractCollectionUuids(saveAsName: String) = {
+ jsonPath("$.entities[*]").ofType[Map[String,Any]].findAll.transformOption(extract => { extract.orElse(Some(Seq.empty)) }).saveAs(saveAsName)
+ }
+
+ /**
* tries to extract the cursor from the session, if it exists, it returns true. if it's the default, returns false
* @param nameInSession The name of the variable in the session
* @return
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
index 727c295..37428ac 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
@@ -22,11 +22,13 @@ package org.apache.usergrid.helpers
import com.fasterxml.jackson.databind.ObjectMapper
import com.ning.http.client.{ListenableFuture, AsyncHttpClient,Response}
+import io.gatling.jsonpath.JsonPath
import org.apache.usergrid.datagenerators.FeederGenerator
import org.apache.usergrid.enums.TokenType
import org.apache.usergrid.settings.Settings
import scala.collection.mutable.ArrayBuffer
+import scala.util.parsing.json.JSON
object Setup {
var managementToken:String = null
@@ -109,6 +111,31 @@ object Setup {
statusCode
}
+ def getCollectionsList: List[String] = {
+ val appInfoGet = client
+ .prepareGet(s"${Settings.baseAppUrl}")
+ .setHeader("Cache-Control", "no-cache")
+ .setHeader("Accept", "application/json; charset=UTF-8")
+ .setHeader("Authorization", s"Bearer $getManagementToken")
+ .build()
+
+ val getResponse = client.executeRequest(appInfoGet).get()
+ val topLevel: Map[String, Any] = JSON.parseFull(getResponse.getResponseBody).get.asInstanceOf[Map[String,Any]]
+ val entities: List[Map[String, Any]] = topLevel("entities").asInstanceOf[List[Map[String,Any]]]
+ //println(s"entities: $entities")
+ val firstEntity: Map[String, Any] = entities.head
+ //println(s"firstEntity: $firstEntity")
+ val metadata: Map[String, Any] = firstEntity("metadata").asInstanceOf[Map[String, Any]]
+ //println(s"metadata: $metadata")
+ val collections: Map[String, Any] = metadata("collections").asInstanceOf[Map[String, Any]]
+ //println(s"collections: $collections")
+
+ val collectionsList: List[String] = (collections map { case (key, value) => key }).toList
+ //println(collectionsList)
+
+ collectionsList
+ }
+
def sandboxCollection(): Integer = {
val sandboxCollectionPost = client
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
new file mode 100644
index 0000000..b58ee07
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/AuditScenarios.scala
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.scenarios
+
+import io.gatling.core.Predef._
+import io.gatling.core.feeder.RecordSeqFeederBuilder
+import io.gatling.http.Predef._
+import org.apache.usergrid.datagenerators.FeederGenerator
+import org.apache.usergrid.enums.{AuthType, EndConditionType}
+import org.apache.usergrid.helpers.Extractors._
+import org.apache.usergrid.helpers.Utils
+import org.apache.usergrid.settings.{Headers, Settings}
+
+/**
+ * Provides CRUD methods for audits
+ */
+object AuditScenarios {
+
+ //The value for the cursor
+ val SessionVarCursor: String = "cursor"
+ val SessionVarUuid: String = "entityUuid"
+ val SessionVarCollectionName: String = "collectionName"
+ val SessionVarCollectionUuids: String = "collectionUuids"
+
+ def collectionGetUrl(useCursor: Boolean): String = {
+ val url = "/${" + SessionVarCollectionName + "}?" +
+ (if (useCursor) "cursor=${" + SessionVarCursor + "}&" else "") +
+ (if (Settings.searchQuery != "") s"ql=${Settings.searchQuery}&" else "") +
+ (if (Settings.searchLimit > 0) s"limit=${Settings.searchLimit}&" else "")
+
+ // remove trailing & or ?
+ url.dropRight(1)
+ }
+
+ val getCollectionsWithoutCursor = exec(
+ http("GET collections")
+ .get(collectionGetUrl(false))
+ .headers(Headers.authToken)
+ .check(status.is(200), extractCollectionUuids(SessionVarCollectionUuids), maybeExtractCursor(SessionVarCursor)))
+ .foreach("${" + SessionVarCollectionUuids + "}", "singleUuid") {
+ exec(session => {
+ val uuidObj = session("singleUuid").as[Map[String,Any]]
+ val uuid = uuidObj("uuid").asInstanceOf[String]
+ val collectionName = session(SessionVarCollectionName).as[String]
+ Settings.addAuditUuid(uuid, collectionName)
+ session
+ })
+ }
+
+ val getCollectionsWithCursor = exec(
+ http("GET collections")
+ .get(collectionGetUrl(true))
+ .headers(Headers.authToken)
+ .check(status.is(200), extractCollectionUuids(SessionVarCollectionUuids), maybeExtractCursor(SessionVarCursor)))
+ .foreach("${" + SessionVarCollectionUuids + "}", "singleUuid") {
+ exec(session => {
+ val uuidObj = session("singleUuid").as[Map[String,Any]]
+ val uuid = uuidObj("uuid").asInstanceOf[String]
+ val collectionName = session(SessionVarCollectionName).as[String]
+ Settings.addAuditUuid(uuid, collectionName)
+ session
+ })
+ }
+
+ val getAllCollections = scenario("Get all collections")
+ .exec(injectTokenIntoSession())
+ .exec(injectAuthType())
+ .asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
+ feed(FeederGenerator.collectionNameFeeder)
+ .exec{
+ session => if (session("validEntity").as[String] == "yes") { println("Getting collection " + session("collectionName").as[String]) }
+ session
+ }
+ .doIf(session => session("validEntity").as[String] == "yes") {
+ exec(getCollectionsWithoutCursor)
+ .asLongAs(stringParamExists(SessionVarCursor)) {
+ exec(getCollectionsWithCursor)
+ }
+ }
+ }
+
+ val getCollectionEntity = exec(
+ http("GET collection entity")
+ .get("/${collectionName}?ql=uuid=${uuid}")
+ .headers(Headers.authToken)
+ .check(status.is(200), jsonPath("$.count").saveAs("count")))
+ .exec(session => {
+ val count = session("count").as[String].toInt
+ val uuid = session("uuid").as[String]
+ val collectionName = session(SessionVarCollectionName).as[String]
+
+ // save items not found
+ if (count < 1) {
+ Settings.addAuditUuid(uuid, collectionName)
+ Settings.incAuditNotFound()
+ println(s"NOT FOUND: $collectionName.$uuid")
+ } else if (count > 1) {
+ Settings.addAuditUuid(uuid, collectionName)
+ Settings.incAuditBadResponse()
+ println(s"INVALID RESPONSE (count=$count): $collectionName.$uuid")
+ } else {
+ // println(s"FOUND: $collectionName.$uuid")
+ Settings.incAuditSuccess()
+ }
+
+ session
+ })
+
+ val verifyCollections = scenario("Verify collections")
+ .exec(injectTokenIntoSession())
+ .exec(injectAuthType())
+ .asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
+ feed(FeederGenerator.collectionCsvFeeder)
+ .doIf(session => session("validEntity").as[String] == "yes") {
+ exec(getCollectionEntity)
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
index 5f679ec..a760931 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -48,16 +48,17 @@ object EntityCollectionScenarios {
}
def entityGetByNameUrl(entityName: String): String = {
- val url = s"/${Settings.collection}/$entityName"
- url
+ s"/${Settings.collection}/$entityName"
}
def randomEntityNameUrl(prefix: String = Settings.entityPrefix, numEntities: Int = Settings.numEntities, seed: Int = Settings.entitySeed): String = {
+
Utils.randomEntityNameUrl(prefix, numEntities, seed, Settings.baseCollectionUrl)
}
def uuidFeeder(): RecordSeqFeederBuilder[String] = {
+
csv(Settings.feedUuidFilename).random
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index e4be5c8..3c1c2e2 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -17,6 +17,7 @@
package org.apache.usergrid.settings
import java.io.{PrintWriter, FileOutputStream}
+import java.util.concurrent.atomic.AtomicInteger
import javax.xml.bind.DatatypeConverter
import io.gatling.http.Predef._
import io.gatling.http.config.HttpProtocolBuilder
@@ -149,12 +150,32 @@ object Settings {
val numEntities:Int = entitiesPerWorkerFloor + extraEntity
// UUID log file, have to go through this because creating a csv feeder with an invalid csv file fails at maven compile time
- private val dummyCsv = ConfigProperties.getDefault(ConfigProperties.UuidFilename).toString
+ private val dummyTestCsv = ConfigProperties.getDefault(ConfigProperties.UuidFilename).toString
+ private val dummyAuditCsv = ConfigProperties.getDefault(ConfigProperties.AuditUuidFilename).toString
+ private val dummyAuditFailedCsv = ConfigProperties.getDefault(ConfigProperties.FailedUuidFilename).toString
+
private val uuidFilename = initStrSetting(ConfigProperties.UuidFilename)
- val captureUuids = uuidFilename != dummyCsv && (scenarioType == ScenarioType.LoadEntities || scenarioType == ScenarioType.GetByNameSequential)
- val feedUuids = uuidFilename != dummyCsv && scenarioType == ScenarioType.UuidRandomInfinite
- val captureUuidFilename = if (captureUuids) uuidFilename else dummyCsv
- val feedUuidFilename = if (feedUuids) uuidFilename else dummyCsv
+ private val auditUuidFilename = initStrSetting(ConfigProperties.AuditUuidFilename)
+ private val failedUuidFilename = initStrSetting(ConfigProperties.FailedUuidFilename)
+
+ // feeds require valid files, even if test won't be run
+ val feedUuids = uuidFilename != dummyTestCsv && scenarioType == ScenarioType.UuidRandomInfinite
+ val feedUuidFilename = uuidFilename
+
+ val feedAuditUuids = uuidFilename != dummyAuditCsv && scenarioType == ScenarioType.AuditVerifyCollectionEntities
+ val feedAuditUuidFilename = auditUuidFilename
+
+ // also uses uuidFilename
+ val captureUuids = uuidFilename != dummyTestCsv && (scenarioType == ScenarioType.LoadEntities || scenarioType == ScenarioType.GetByNameSequential)
+ val captureUuidFilename = uuidFilename
+
+ val captureAuditUuids = (auditUuidFilename != dummyAuditCsv && scenarioType == ScenarioType.AuditGetCollectionEntities) ||
+ (failedUuidFilename != dummyAuditFailedCsv && scenarioType == ScenarioType.AuditVerifyCollectionEntities)
+ println(s"auditUuidFilename=$auditUuidFilename")
+ println(s"captureAuditUuids=$captureAuditUuids")
+ val captureAuditUuidFilename = if (scenarioType == ScenarioType.AuditVerifyCollectionEntities) failedUuidFilename else auditUuidFilename
+ println(s"captureAuditUuidFilename=$captureAuditUuidFilename")
+
val purgeUsers:Int = initIntSetting(ConfigProperties.PurgeUsers)
private var uuidMap: Map[Int, String] = Map()
@@ -179,6 +200,32 @@ object Settings {
}
}
+
+ val auditUuidsHeader = "collection,uuid"
+
+ // key: uuid, value: collection
+ private var auditUuidMap: Map[String,String] = Map()
+ def addAuditUuid(uuid: String, collection: String): Unit = {
+ if (captureAuditUuids) auditUuidMap += (uuid -> collection)
+ }
+
+ def writeAuditUuidsToFile(uuidDesc: String): Unit = {
+ if (captureAuditUuids) {
+ println(s"Sorting and writing ${auditUuidMap.size} ${uuidDesc} UUIDs in CSV file ${captureAuditUuidFilename}")
+ val writer = {
+ val fos = new FileOutputStream(captureAuditUuidFilename)
+ new PrintWriter(fos, false)
+ }
+ writer.println(auditUuidsHeader)
+ val uuidList: List[(String, String)] = auditUuidMap.toList.sortBy(l => (l._2, l._1))
+ uuidList.foreach { l =>
+ writer.println(s"${l._2},${l._1}")
+ }
+ writer.flush()
+ writer.close()
+ }
+ }
+
def getUserFeeder:Array[Map[String, String]]= {
FeederGenerator.generateUserWithGeolocationFeeder(totalUsers, userLocationRadius, centerLatitude, centerLongitude)
}
@@ -201,9 +248,48 @@ object Settings {
(System.currentTimeMillis() - testStartTime) < (endMinutes.toLong*60L*1000L)
}
+ private val countAuditSuccess = new AtomicInteger(0)
+ private val countAuditNotFound = new AtomicInteger(0)
+ private val countAuditBadResponse = new AtomicInteger(0)
+
+ def incAuditSuccess(): Unit = {
+ countAuditSuccess.incrementAndGet()
+ }
+
+ def incAuditNotFound(): Unit = {
+ countAuditNotFound.incrementAndGet()
+ }
+
+ def incAuditBadResponse(): Unit = {
+ countAuditBadResponse.incrementAndGet()
+ }
+
+ def printAuditResults(): Unit = {
+ if (scenarioType == ScenarioType.AuditVerifyCollectionEntities) {
+ val countSuccess = countAuditSuccess.get
+ val countNotFound = countAuditNotFound.get
+ val countBadResponse = countAuditBadResponse.get
+ val countTotal = countSuccess + countNotFound + countBadResponse
+
+ println()
+ println("-----------------------------------------------------------------------------")
+ println("AUDIT RESULTS")
+ println("-----------------------------------------------------------------------------")
+ println()
+ println(s"Successful: ${countSuccess}")
+ println(s"Not Found: ${countNotFound}")
+ println(s"Bad Response: ${countBadResponse}")
+ println(s"Total: ${countTotal}")
+ println()
+ println("-----------------------------------------------------------------------------")
+ println()
+ }
+ }
+
def printSettingsSummary(): Unit = {
val authTypeStr = authType + (if (authType == AuthType.Token) s"($tokenType)" else "")
val endConditionStr = if (endConditionType == EndConditionType.MinutesElapsed) s"$endMinutes minutes elapsed" else s"$endRequestCount requests"
+ println()
println("-----------------------------------------------------------------------------")
println("SIMULATION SETTINGS")
println("-----------------------------------------------------------------------------")
@@ -222,6 +308,7 @@ object Settings {
println(s"End Condition:$endConditionStr")
println()
println("-----------------------------------------------------------------------------")
+ println()
}
printSettingsSummary()
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/AuditSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/AuditSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/AuditSimulation.scala
new file mode 100755
index 0000000..48b5f60
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/AuditSimulation.scala
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.simulations
+
+import io.gatling.core.Predef._
+import io.gatling.core.structure.ScenarioBuilder
+import org.apache.usergrid.enums.ScenarioType
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.{AuditScenarios, EntityCollectionScenarios}
+import org.apache.usergrid.settings.Settings
+
+/**
+ * Audit simulations.
+ *
+ */
+class AuditSimulation extends Simulation {
+
+ def getScenario(scenarioType: String): ScenarioBuilder = {
+ scenarioType match {
+ case ScenarioType.AuditGetCollectionEntities => AuditScenarios.getAllCollections
+ case ScenarioType.AuditVerifyCollectionEntities => AuditScenarios.verifyCollections
+ }
+ }
+
+ before{
+ }
+
+ Settings.setTestStartTime()
+ if (ScenarioType.isValid(Settings.scenarioType)) {
+ val scenario: ScenarioBuilder = getScenario(Settings.scenarioType)
+ setUp(
+ scenario
+ .inject(
+ rampUsers(Settings.rampUsers) over Settings.rampTime
+ ).protocols(Settings.httpConf.acceptHeader("application/json"))
+ )
+ } else {
+ println(s"Audit scenario type ${Settings.scenarioType} not found.")
+ }
+
+ after {
+ if (Settings.captureAuditUuids) {
+ val uuidDesc = Settings.scenarioType match {
+ case ScenarioType.AuditGetCollectionEntities => "found"
+ case ScenarioType.AuditVerifyCollectionEntities => "failed"
+ }
+ Settings.writeAuditUuidsToFile(uuidDesc)
+ }
+ Settings.printSettingsSummary()
+ Settings.printAuditResults()
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/test/resources/dummy.csv
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/resources/dummy.csv b/stack/loadtests/src/test/resources/dummy.csv
deleted file mode 100644
index 187f36b..0000000
--- a/stack/loadtests/src/test/resources/dummy.csv
+++ /dev/null
@@ -1 +0,0 @@
-name,uuid
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/test/resources/dummyAuditUuid.csv
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/resources/dummyAuditUuid.csv b/stack/loadtests/src/test/resources/dummyAuditUuid.csv
new file mode 100644
index 0000000..fc9f2fb
--- /dev/null
+++ b/stack/loadtests/src/test/resources/dummyAuditUuid.csv
@@ -0,0 +1 @@
+collection,uuid
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32fefb98/stack/loadtests/src/test/resources/dummyUuid.csv
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/resources/dummyUuid.csv b/stack/loadtests/src/test/resources/dummyUuid.csv
new file mode 100644
index 0000000..187f36b
--- /dev/null
+++ b/stack/loadtests/src/test/resources/dummyUuid.csv
@@ -0,0 +1 @@
+name,uuid
[10/21] incubator-usergrid git commit: USERGRID-871: fix load and
delete tests to return errors when data there/not there
Posted by to...@apache.org.
USERGRID-871: fix load and delete tests to return errors when data there/not there
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/195449f0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/195449f0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/195449f0
Branch: refs/heads/two-dot-o-dev
Commit: 195449f0766883cc096491af7ef4d3c88b472fa0
Parents: b3f72da
Author: Mike Dunker <md...@apigee.com>
Authored: Wed Jul 22 12:21:40 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Wed Jul 22 12:21:40 2015 -0700
----------------------------------------------------------------------
.../apache/usergrid/scenarios/EntityCollectionScenarios.scala | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/195449f0/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
index a6d6e0d..592a507 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -138,7 +138,8 @@ object EntityCollectionScenarios {
.post(Settings.baseCollectionUrl)
.headers(Headers.authToken)
.body(StringBody("""${entity}"""))
- .check(status.in(Seq(200,400))))
+ // 200 for success, 400 if already exists
+ .check(status.in(Seq(200))))
}
)
@@ -179,7 +180,8 @@ object EntityCollectionScenarios {
http("DELETE entity")
.delete("""${entityUrl}""")
.headers(Headers.authToken)
- .check(status.in(Seq(200,404)))
+ // 200 for success, 404 if doesn't exist
+ .check(status.in(Seq(200)))
)
val deleteEntities = scenario("Delete entities")
[09/21] incubator-usergrid git commit: USERGRID-871: added load and
delete tests, fixes to feeders
Posted by to...@apache.org.
USERGRID-871: added load and delete tests, fixes to feeders
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/b3f72da9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/b3f72da9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/b3f72da9
Branch: refs/heads/two-dot-o-dev
Commit: b3f72da92661930d1996aca3b19412bfd72414b3
Parents: f1326fd
Author: Mike Dunker <md...@apigee.com>
Authored: Wed Jul 22 11:44:57 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Wed Jul 22 11:44:57 2015 -0700
----------------------------------------------------------------------
stack/loadtests/runCollectionQueryTest.sh | 6 +-
stack/loadtests/runDeleteEntities.sh | 99 ++++++++++++++++++++
stack/loadtests/runLoadEntities.sh | 99 ++++++++++++++++++++
stack/loadtests/runRandomEntityByNameTest.sh | 8 +-
.../datagenerators/FeederGenerator.scala | 33 ++++++-
.../usergrid/enums/ConfigProperties.scala | 7 +-
.../apache/usergrid/enums/ScenarioType.scala | 2 +
.../org/apache/usergrid/helpers/Setup.scala | 10 +-
.../scenarios/EntityCollectionScenarios.scala | 69 ++++++++++++++
.../org/apache/usergrid/settings/Settings.scala | 11 ++-
.../simulations/ConfigurableSimulation.scala | 30 ++++--
11 files changed, 353 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/runCollectionQueryTest.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runCollectionQueryTest.sh b/stack/loadtests/runCollectionQueryTest.sh
index 8137d2e..7d1779c 100755
--- a/stack/loadtests/runCollectionQueryTest.sh
+++ b/stack/loadtests/runCollectionQueryTest.sh
@@ -34,6 +34,8 @@ shift 6
mvn compile
#Set the app id to be a date epoch for uniqueness
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
CREATE_ORG=false
ORG=gatling
CREATE_APP=false
@@ -63,8 +65,8 @@ mvn gatling:execute -Dorg=usergrid \
-DcreateApp=${CREATE_APP} \
-Dapp=${APP} \
-Dbaseurl=${URL} \
--DadminUser=usergrid \
--DadminPassword=test \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
-DloadEntities=${LOAD_ENTITIES} \
-DnumEntities=${NUM_ENTITIES} \
-DentityType=${ENTITY_TYPE} \
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/runDeleteEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runDeleteEntities.sh b/stack/loadtests/runDeleteEntities.sh
new file mode 100755
index 0000000..1ca557e
--- /dev/null
+++ b/stack/loadtests/runDeleteEntities.sh
@@ -0,0 +1,99 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 6 ] || die "At least 6 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) NUM_ENTITIES"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+CONSTANT_USERS_PER_SEC="$4"
+CONSTANT_USERS_DURATION="$5"
+NUM_ENTITIES="$6"
+
+shift 6
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+#APP=$(date +%s)
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
+CREATE_ORG=false
+ORG=gatling
+CREATE_APP=false
+APP=millionentities
+COLLECTION_TYPE=trivialentities
+SCENARIO_TYPE=deleteEntities
+# don't load entities as part of setup
+LOAD_ENTITIES=false
+
+SKIP_SETUP=TRUE
+#SEARCH_QUERY=order%20by%20specials%20desc
+#SEARCH_LIMIT=1000
+ENTITY_TYPE=trivial
+ENTITY_PREFIX=trivial
+ENTITY_SEED=1
+AUTH_TYPE=token
+TOKEN_TYPE=management
+END_CONDITION_TYPE=minutesElapsed
+#END_CONDITION_TYPE=requestCount
+END_MINUTES=2
+END_REQUEST_COUNT=100
+
+#Execute the test
+mvn gatling:execute \
+-DskipSetup=${SKIP_SETUP} \
+-DcreateOrg=${CREATE_ORG} \
+-Dorg=${ORG} \
+-DcreateApp=${CREATE_APP} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
+-DloadEntities=${LOAD_ENTITIES} \
+-DnumEntities=${NUM_ENTITIES} \
+-DentityType=${ENTITY_TYPE} \
+-DentityPrefix=${ENTITY_PREFIX} \
+-DentitySeed=${ENTITY_SEED} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
+-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
+-DcollectionType=${COLLECTION_TYPE} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DendConditionType=${END_CONDITION_TYPE} \
+-DendMinutes=${END_MINUTES} \
+-DendRequestCount=${END_REQUEST_COUNT} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
+
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/runLoadEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runLoadEntities.sh b/stack/loadtests/runLoadEntities.sh
new file mode 100755
index 0000000..bee8d1a
--- /dev/null
+++ b/stack/loadtests/runLoadEntities.sh
@@ -0,0 +1,99 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 6 ] || die "At least 6 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) NUM_ENTITIES"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+CONSTANT_USERS_PER_SEC="$4"
+CONSTANT_USERS_DURATION="$5"
+NUM_ENTITIES="$6"
+
+shift 6
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+#APP=$(date +%s)
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
+CREATE_ORG=false
+ORG=gatling
+CREATE_APP=false
+APP=millionentities
+COLLECTION_TYPE=trivialentities
+SCENARIO_TYPE=loadEntities
+# don't load entities as part of setup
+LOAD_ENTITIES=false
+
+SKIP_SETUP=FALSE
+#SEARCH_QUERY=order%20by%20specials%20desc
+#SEARCH_LIMIT=1000
+ENTITY_TYPE=trivial
+ENTITY_PREFIX=trivial
+ENTITY_SEED=1
+AUTH_TYPE=token
+TOKEN_TYPE=management
+END_CONDITION_TYPE=minutesElapsed
+#END_CONDITION_TYPE=requestCount
+END_MINUTES=2
+END_REQUEST_COUNT=100
+
+#Execute the test
+mvn gatling:execute \
+-DskipSetup=${SKIP_SETUP} \
+-DcreateOrg=${CREATE_ORG} \
+-Dorg=${ORG} \
+-DcreateApp=${CREATE_APP} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
+-DloadEntities=${LOAD_ENTITIES} \
+-DnumEntities=${NUM_ENTITIES} \
+-DentityType=${ENTITY_TYPE} \
+-DentityPrefix=${ENTITY_PREFIX} \
+-DentitySeed=${ENTITY_SEED} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
+-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
+-DcollectionType=${COLLECTION_TYPE} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DendConditionType=${END_CONDITION_TYPE} \
+-DendMinutes=${END_MINUTES} \
+-DendRequestCount=${END_REQUEST_COUNT} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
+
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/runRandomEntityByNameTest.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runRandomEntityByNameTest.sh b/stack/loadtests/runRandomEntityByNameTest.sh
index 474acfe..dd98aa6 100755
--- a/stack/loadtests/runRandomEntityByNameTest.sh
+++ b/stack/loadtests/runRandomEntityByNameTest.sh
@@ -34,6 +34,8 @@ mvn compile
#Set the app id to be a date epoch for uniqueness
#APP=$(date +%s)
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
CREATE_ORG=false
ORG=gatling
CREATE_APP=false
@@ -56,15 +58,15 @@ END_MINUTES=2
END_REQUEST_COUNT=100
#Execute the test
-mvn gatling:execute -Dorg=usergrid \
+mvn gatling:execute \
-DskipSetup=${SKIP_SETUP} \
-DcreateOrg=${CREATE_ORG} \
-Dorg=${ORG} \
-DcreateApp=${CREATE_APP} \
-Dapp=${APP} \
-Dbaseurl=${URL} \
--DadminUser=usergrid \
--DadminPassword=test \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
-DloadEntities=${LOAD_ENTITIES} \
-DnumEntities=${NUM_ENTITIES} \
-DentityType=${ENTITY_TYPE} \
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
index 63091a7..92444b2 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
@@ -195,7 +195,7 @@
* @param prefix Prefix for entities
* @return
*/
- def generateCustomEntityFeeder(numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Array[String] = {
+ def generateCustomEntityArray(numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Array[String] = {
//val entityFeeder = Iterator.from(1).take(numEntities).map(i=>Map("entity" -> EntityDataGenerator.generateNamedCustomEntityJSONString(prefix.concat(i.toString()))))
var entityArray: ArrayBuffer[String] = new ArrayBuffer[String]
for (i <- seed to numEntities+seed-1) {
@@ -206,6 +206,37 @@
entityArray.toArray
}
+ def generateCustomEntityFeeder(numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Array[Map[String, Any]] = {
+ var entityMapArray: ArrayBuffer[Map[String, Any]] = new ArrayBuffer[Map[String, Any]]
+
+ for (i <- seed to numEntities+seed-1) {
+ val entityName = prefix.concat(i.toString)
+ val entity = EntityDataGenerator.generateEntity(entityType, entityName)
+ val entityUrl = Settings.baseCollectionUrl + "/" + entityName
+ entityMapArray += Map("entityName" -> entityName, "entity" -> entity, "entityUrl" -> entityUrl)
+ }
+
+ entityMapArray.toArray
+ }
+
+ def generateCustomEntityFeeder2 (numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Feeder[String] =
+ new Feeder[String] {
+ var counter = new AtomicInteger(seed)
+
+ // runs forever -- users detect when data is done using validEntity field
+ override def hasNext: Boolean = true
+
+ override def next(): Map[String, String] = {
+ val i = counter.getAndIncrement()
+ val entityName = prefix.concat(i.toString)
+ val entity = EntityDataGenerator.generateEntity(entityType, entityName)
+ val entityUrl = Settings.baseCollectionUrl + "/" + entityName
+ val validEntity = if (i >= seed + numEntities) "no" else "yes"
+
+ Map("entityName" -> entityName, "entity" -> entity, "entityUrl" -> entityUrl, "validEntity" -> validEntity)
+ }
+ }
+
def generateCustomEntityInfiniteFeeder(seed: Int = Settings.entitySeed, entityType: String = Settings.entityType, prefix: String = Settings.entityPrefix): Iterator[String] = {
Iterator.from(seed).map(i=>EntityDataGenerator.generateEntity(entityType, prefix.concat(i.toString)))
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
index 9a4989a..56350ee 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
@@ -40,8 +40,13 @@ object ConfigProperties {
val EndConditionType = "endConditionType"
val EndMinutes = "endMinutes"
val EndRequestCount = "endRequestCount"
+ val OrgCreationUsername = "orgCreationUsername"
+ val OrgCreationName = "orgCreationName"
+ val OrgCreationEmail = "orgCreationEmail"
+ val OrgCreationPassword = "orgCreationPassword"
val Values = Seq(Org,App,AdminUser,AdminPassword,BaseUrl,AuthType,TokenType,SkipSetup,CreateOrg,CreateApp,LoadEntities,
ScenarioType,RampUsers,ConstantUsersPerSec,ConstantUsersDuration,UserSeed,AppUser,AppUserPassword,NumEntities,
NumDevices,CollectionType,RampTime,Throttle,RpsTarget,RpsRampTime,HoldDuration,PushNotifier,EntityPrefix,EntityType,
- EntitySeed,SearchLimit,SearchQuery,EndConditionType,EndMinutes,EndRequestCount)
+ EntitySeed,SearchLimit,SearchQuery,EndConditionType,EndMinutes,EndRequestCount,OrgCreationUsername,OrgCreationName,
+ OrgCreationEmail,OrgCreationPassword)
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
index 52fcbc5..e21a1ee 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
@@ -6,4 +6,6 @@ package org.apache.usergrid.enums
object ScenarioType {
val GetAllByCursor = "getAllByCursor"
val NameRandomInfinite = "nameRandomInfinite"
+ val LoadEntities = "loadEntities"
+ val DeleteEntities = "deleteEntities"
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
index 776e0b9..af3aabb 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
@@ -83,10 +83,10 @@ object Setup {
.setHeader("Content-Type", "application/json; charset=UTF-8")
.setBody(Utils.toJSONStr(Map(
"organization" -> Settings.org,
- "username" -> Settings.adminUser,
- "name" -> Settings.adminUser,
- "email" -> (Settings.adminUser + "@apigee.com"),
- "password" -> Settings.adminPassword
+ "username" -> Settings.orgCreationUsername,
+ "name" -> Settings.orgCreationName,
+ "email" -> Settings.orgCreationEmail,
+ "password" -> Settings.orgCreationPassword
)))
.build()
@@ -192,7 +192,7 @@ object Setup {
}
def setupEntitiesCollection(numEntities: Int, entityType: String, prefix: String, seed: Int = 1) = {
- val entitiesFeeder = FeederGenerator.generateCustomEntityFeeder(numEntities, entityType, prefix, seed)
+ val entitiesFeeder = FeederGenerator.generateCustomEntityArray(numEntities, entityType, prefix, seed)
val purgeUsers = Integer.getInteger("purgeUsers", 100)
val list: ArrayBuffer[ListenableFuture[Response]] = new ArrayBuffer[ListenableFuture[Response]]
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
index 844eb82..a6d6e0d 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -18,6 +18,7 @@ package org.apache.usergrid.scenarios
import io.gatling.core.Predef._
import io.gatling.http.Predef._
+import org.apache.usergrid.datagenerators.FeederGenerator
import org.apache.usergrid.enums.{EndConditionType, AuthType}
import org.apache.usergrid.helpers.Extractors._
import org.apache.usergrid.helpers.Utils
@@ -53,6 +54,9 @@ object EntityCollectionScenarios {
Utils.randomEntityNameUrl(prefix, numEntities, seed, Settings.baseCollectionUrl)
}
+ /*
+ * Loop through entities using cursor
+ */
val getEntitiesWithoutCursor = exec(
http("GET entities")
.get(entityGetUrl(false))
@@ -87,6 +91,9 @@ object EntityCollectionScenarios {
}
//.exec(sessionFunction => { sessionFunction })
+ /*
+ * Get random entities
+ */
val getRandomEntityAnonymous = exec(
http("GET entity by name (anonymous)")
.get(_ => randomEntityNameUrl())
@@ -123,6 +130,68 @@ object EntityCollectionScenarios {
}
/*
+ * Create entities
+ */
+ val loadEntity = exec(
+ doIf("${validEntity}", "yes") {
+ exec(http("POST load entity")
+ .post(Settings.baseCollectionUrl)
+ .headers(Headers.authToken)
+ .body(StringBody("""${entity}"""))
+ .check(status.in(Seq(200,400))))
+ }
+ )
+
+ val loadEntities = scenario("Load entities")
+ .exec(injectTokenIntoSession())
+ .exec(injectAuthType())
+ .asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
+ feed(FeederGenerator.generateCustomEntityFeeder2(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
+ .doIf(session => session("validEntity").as[String] == "yes") {
+ exec(loadEntity)
+ }
+ }
+ //.rendezVous(Settings.totalUsers)
+
+ /*
+ val loadEntity = exec(
+ http("POST load entity")
+ .post(Settings.baseCollectionUrl)
+ .headers(Headers.authToken)
+ .body(StringBody("""${entity}"""))
+ .check(status.in(Seq(200,400)))
+ )
+
+ val loadEntities = scenario("Load entities")
+ .exec(injectTokenIntoSession())
+ .exec(injectAuthType())
+ .forever(
+ feed(FeederGenerator.generateCustomEntityFeeder(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
+ .exec(loadEntity)
+ )
+ */
+
+
+ /*
+ * Delete entities
+ */
+ val deleteEntity = exec(
+ http("DELETE entity")
+ .delete("""${entityUrl}""")
+ .headers(Headers.authToken)
+ .check(status.in(Seq(200,404)))
+ )
+
+ val deleteEntities = scenario("Delete entities")
+ .exec(injectTokenIntoSession())
+ .exec(injectAuthType())
+ .asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
+ feed(FeederGenerator.generateCustomEntityFeeder2(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
+ .doIf(session => session("validEntity").as[String] == "yes") {
+ exec(deleteEntity)
+ }
+ }
+ /*
val createEntityBatchScenario = scenario("Create custom entities")
.exec(injectStaticTokenToSession())
.feed(FeederGenerator.generateCustomEntityCreateFeeder(Settings.entityPrefix, Settings.numEntities))
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index 72b591f..3992c68 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -17,7 +17,7 @@
package org.apache.usergrid.settings
import java.nio.charset.StandardCharsets
-//import java.util.Base64
+import java.util.Base64
import io.gatling.core.Predef._
@@ -52,8 +52,7 @@ object Settings {
val userSeed:Int = Integer.getInteger(ConfigProperties.UserSeed,1).toInt
val appUser = System.getProperty(ConfigProperties.AppUser)
val appUserPassword = System.getProperty(ConfigProperties.AppUserPassword)
- //val appUserBase64 = Base64.getEncoder.encodeToString((appUser + ":" + appUserPassword).getBytes(StandardCharsets.UTF_8))
- val appUserBase64 = "BROKEN FOR NOW"
+ val appUserBase64 = Base64.getEncoder.encodeToString((appUser + ":" + appUserPassword).getBytes(StandardCharsets.UTF_8))
val numEntities:Int = Integer.getInteger(ConfigProperties.NumEntities, 5000).toInt
val numDevices:Int = Integer.getInteger(ConfigProperties.NumDevices, 4000).toInt
@@ -87,6 +86,12 @@ object Settings {
val endMinutes = Integer.getInteger(ConfigProperties.EndMinutes, 10).toInt
val endRequestCount = Integer.getInteger(ConfigProperties.EndRequestCount, 10).toInt
+ // Org creation fields
+ val orgCreationUsername = System.getProperty(ConfigProperties.OrgCreationUsername, org.concat("_admin"))
+ val orgCreationEmail = System.getProperty(ConfigProperties.OrgCreationEmail, orgCreationUsername.concat("@usergrid.com"))
+ val orgCreationName = System.getProperty(ConfigProperties.OrgCreationName, orgCreationUsername)
+ val orgCreationPassword = System.getProperty(ConfigProperties.OrgCreationPassword, "test")
+
def getUserFeeder():Array[Map[String, String]]= {
FeederGenerator.generateUserWithGeolocationFeeder(totalUsers, userLocationRadius, centerLatitude, centerLongitude)
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b3f72da9/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
index 7a55577..4b0f96a 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
@@ -47,14 +47,32 @@ class ConfigurableSimulation extends Simulation {
Settings.setTestStartTime()
- if (Settings.scenarioType == ScenarioType.GetAllByCursor) {
+ if (Settings.scenarioType == ScenarioType.LoadEntities) {
setUp(
- EntityCollectionScenarios.getEntityPagesToEnd
- .inject(
- rampUsers(Settings.rampUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+ EntityCollectionScenarios.loadEntities
+ .inject(
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+
+ ).protocols(Settings.httpConf.acceptHeader("application/json"))
+ )
+ } else if (Settings.scenarioType == ScenarioType.DeleteEntities) {
+ setUp(
+ EntityCollectionScenarios.deleteEntities
+ .inject(
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
- ).protocols(Settings.httpConf.acceptHeader("application/json"))
+ ).protocols(Settings.httpConf.acceptHeader("application/json"))
+ )
+ } else if (Settings.scenarioType == ScenarioType.GetAllByCursor) {
+ setUp(
+ EntityCollectionScenarios.getEntityPagesToEnd
+ .inject(
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+
+ ).protocols(Settings.httpConf.acceptHeader("application/json"))
)
} else if (Settings.scenarioType == ScenarioType.NameRandomInfinite) {
setUp(
[13/21] incubator-usergrid git commit: USERGRID-871: print settings
summary + auto support multiple workers
Posted by to...@apache.org.
USERGRID-871: print settings summary + auto support multiple workers
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/bfc2be2b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/bfc2be2b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/bfc2be2b
Branch: refs/heads/two-dot-o-dev
Commit: bfc2be2b99e0892b5380310513abb5d6cc43736a
Parents: eec8175
Author: Mike Dunker <md...@apigee.com>
Authored: Mon Jul 27 16:30:56 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Mon Jul 27 16:30:56 2015 -0700
----------------------------------------------------------------------
stack/loadtests/runLoadEntities.sh | 8 ++-
.../org/apache/usergrid/enums/AuthType.scala | 1 -
.../usergrid/enums/ConfigProperties.scala | 4 +-
.../apache/usergrid/helpers/Extractors.scala | 10 ++++
.../scenarios/EntityCollectionScenarios.scala | 1 +
.../org/apache/usergrid/settings/Settings.scala | 51 ++++++++++++++++++--
.../simulations/ConfigurableSimulation.scala | 4 ++
7 files changed, 70 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bfc2be2b/stack/loadtests/runLoadEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runLoadEntities.sh b/stack/loadtests/runLoadEntities.sh
index d213fd4..e166c58 100755
--- a/stack/loadtests/runLoadEntities.sh
+++ b/stack/loadtests/runLoadEntities.sh
@@ -19,7 +19,7 @@ die() { echo "$@" 1>&2 ; exit 1; }
#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
#Then aggregate the results
####
-[ "$#" -ge 6 ] || die "At least 6 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) NUM_ENTITIES"
+[ "$#" -ge 8 ] || die "At least 8 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) NUM_ENTITIES ENTITY_WORKER_NUM ENTITY_WORKER_COUNT"
URL="$1"
RAMP_USERS="$2"
@@ -27,8 +27,10 @@ RAMP_TIME="$3"
CONSTANT_USERS_PER_SEC="$4"
CONSTANT_USERS_DURATION="$5"
NUM_ENTITIES="$6"
+ENTITY_WORKER_NUM="$7"
+ENTITY_WORKER_COUNT="$8"
-shift 6
+shift 8
#Compile everything
mvn compile
@@ -85,6 +87,8 @@ mvn gatling:execute \
-DendConditionType=${END_CONDITION_TYPE} \
-DendMinutes=${END_MINUTES} \
-DendRequestCount=${END_REQUEST_COUNT} \
+-DentityWorkerCount=${ENTITY_WORKER_COUNT} \
+-DentityWorkerNum=${ENTITY_WORKER_NUM} \
-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bfc2be2b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
index 6086fdd..abbb204 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
@@ -9,7 +9,6 @@ object AuthType {
val Basic = "basic"
val Values = Seq(Anonymous,Token,Basic)
-
def isValid(str: String): Boolean = {
Values.contains(str)
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bfc2be2b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
index 2f13a12..855a7ae 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
@@ -46,12 +46,14 @@ object ConfigProperties {
val OrgCreationPassword = "orgCreationPassword"
val UpdateProperty = "updateProperty"
val UpdateValue = "updateValue"
+ val EntityWorkerCount = "entityWorkerCount"
+ val EntityWorkerNum = "entityWorkerNum"
val Values = Seq(Org,App,AdminUser,AdminPassword,BaseUrl,AuthType,TokenType,SkipSetup,CreateOrg,CreateApp,LoadEntities,
ScenarioType,RampUsers,ConstantUsersPerSec,ConstantUsersDuration,UserSeed,AppUser,AppUserPassword,NumEntities,
NumDevices,CollectionType,RampTime,Throttle,RpsTarget,RpsRampTime,HoldDuration,PushNotifier,EntityPrefix,EntityType,
EntitySeed,SearchLimit,SearchQuery,EndConditionType,EndMinutes,EndRequestCount,OrgCreationUsername,OrgCreationName,
- OrgCreationEmail,OrgCreationPassword,UpdateProperty,UpdateValue)
+ OrgCreationEmail,OrgCreationPassword,UpdateProperty,UpdateValue,EntityWorkerCount,EntityWorkerNum)
def isValid(str: String): Boolean = {
Values.contains(str)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bfc2be2b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
index 35f75a7..f8aad98 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
@@ -41,6 +41,16 @@ object Extractors {
}
/**
+ * Will extract the uuid from the create response. If the uuid is not present, an empty string will be set
+ */
+ def extractUuid(saveAsName: String) = {
+ jsonPath("$.entities[0].uuid").transformOption(extract => {
+ //it may or may not be present. If it is, save it, otherwise save it as an empty string
+ extract.orElse(Some(""))
+ }).saveAs(saveAsName)
+ }
+
+ /**
* tries to extract the cursor from the session, if it exists, it returns true. if it's the default, returns false
* @param nameInSession The name of the variable in the session
* @return
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bfc2be2b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
index 1dd534c..1fa1c07 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -34,6 +34,7 @@ object EntityCollectionScenarios {
//The value for the cursor
val SessionVarCursor: String = "cursor"
+ val SessionVarUuid: String = "createUuid"
def entityGetUrl(useCursor: Boolean): String = {
val url = Settings.baseAppUrl + "/" + Settings.collectionType + "?dummy" +
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bfc2be2b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index a7669a1..cca3056 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -39,9 +39,9 @@ object Settings {
val tokenType = System.getProperty(ConfigProperties.TokenType, TokenType.User)
val skipSetup:Boolean = System.getProperty(ConfigProperties.SkipSetup) == "true"
- val createOrg:Boolean = System.getProperty(ConfigProperties.CreateOrg) == "true"
- val createApp:Boolean = System.getProperty(ConfigProperties.CreateApp) != "false"
- val loadEntities:Boolean = System.getProperty(ConfigProperties.LoadEntities) != "false"
+ val createOrg:Boolean = !skipSetup && (System.getProperty(ConfigProperties.CreateOrg) == "true")
+ val createApp:Boolean = !skipSetup && (System.getProperty(ConfigProperties.CreateApp) != "false")
+ val loadEntities:Boolean = !skipSetup && (System.getProperty(ConfigProperties.LoadEntities) != "false")
val scenarioType = System.getProperty(ConfigProperties.ScenarioType, ScenarioType.NameRandomInfinite)
val rampUsers:Int = Integer.getInteger(ConfigProperties.RampUsers, 0).toInt
@@ -53,7 +53,8 @@ object Settings {
val appUserPassword = System.getProperty(ConfigProperties.AppUserPassword)
val appUserBase64 = Base64.getEncoder.encodeToString((appUser + ":" + appUserPassword).getBytes(StandardCharsets.UTF_8))
- val numEntities:Int = Integer.getInteger(ConfigProperties.NumEntities, 5000).toInt
+ var numEntities:Int = Integer.getInteger(ConfigProperties.NumEntities, 5000).toInt
+ val totalNumEntities:Int = numEntities
val numDevices:Int = Integer.getInteger(ConfigProperties.NumDevices, 4000).toInt
val collectionType = System.getProperty(ConfigProperties.CollectionType, "customentities")
@@ -78,7 +79,8 @@ object Settings {
// Large Entity Collection settings
val entityPrefix = System.getProperty(ConfigProperties.EntityPrefix, "entity")
val entityType = System.getProperty(ConfigProperties.EntityType, EntityType.Basic) // basic/trivial/?
- val entitySeed = Integer.getInteger(ConfigProperties.EntitySeed, 1).toInt
+ var entitySeed = Integer.getInteger(ConfigProperties.EntitySeed, 1).toInt
+ val overallEntitySeed = entitySeed
val searchLimit = Integer.getInteger(ConfigProperties.SearchLimit, 0).toInt
val searchQuery = System.getProperty(ConfigProperties.SearchQuery, "")
val endConditionType = System.getProperty(ConfigProperties.EndConditionType, EndConditionType.MinutesElapsed)
@@ -96,6 +98,20 @@ object Settings {
val updateValue = System.getProperty(ConfigProperties.UpdateValue, new Date().toString)
val updateBody = Utils.toJSONStr(Map(updateProperty -> updateValue))
+ // Entity workers
+ val entityWorkerCount = Integer.getInteger(ConfigProperties.EntityWorkerCount,1)
+ val entityWorkerNum = Integer.getInteger(ConfigProperties.EntityWorkerNum, 1)
+
+ if (entityWorkerCount > 1 && entityWorkerNum >= 1 && entityWorkerNum <= entityWorkerCount) {
+ // split entities across multiple workers
+ val entitiesPerWorkerFloor = totalNumEntities / entityWorkerCount
+ val leftOver = totalNumEntities % entityWorkerCount
+ val zeroBasedWorkerNum = entityWorkerNum - 1
+ val takeExtraEntity = if (entityWorkerNum <= leftOver) 1 else 0
+ entitySeed = overallEntitySeed + zeroBasedWorkerNum * entitiesPerWorkerFloor + (if (takeExtraEntity == 1) zeroBasedWorkerNum else leftOver)
+ numEntities = entitiesPerWorkerFloor + takeExtraEntity
+ }
+
def getUserFeeder():Array[Map[String, String]]= {
FeederGenerator.generateUserWithGeolocationFeeder(totalUsers, userLocationRadius, centerLatitude, centerLongitude)
}
@@ -110,4 +126,29 @@ object Settings {
testStartTime = System.currentTimeMillis()
}
+ def printSettingsSummary(): Unit = {
+ val authTypeStr = authType + (if (authType == AuthType.Token) s"(${tokenType})" else "")
+ val endConditionStr = if (endConditionType == EndConditionType.MinutesElapsed) s"${endMinutes} minutes elapsed" else s"${endRequestCount} requests"
+ println("-----------------------------------------------------------------------------")
+ println("SIMULATION SETTINGS")
+ println("-----------------------------------------------------------------------------")
+ println()
+ println(s"Org:${org} App:${app} Collection:${collectionType}")
+ println(s"CreateOrg:${createOrg} CreateApp:${createApp} LoadEntities:${loadEntities}")
+ println(s"ScenarioType:${scenarioType} AuthType:${authTypeStr}")
+ println()
+ println(s"Entity Type:${entityType} Prefix:${entityPrefix}")
+ println()
+ println(s"Overall: NumEntities:${totalNumEntities} Seed:${overallEntitySeed} Workers:${entityWorkerCount}")
+ println(s"Worker: NumEntities:${numEntities} Seed:${entitySeed} WorkerNum:${entityWorkerNum}")
+ println()
+ println(s"Ramp: Users:${rampUsers} Time:${rampTime}")
+ println(s"Constant: UsersPerSec:${constantUsersPerSec} Time:${constantUsersDuration}")
+ println(s"End Condition:${endConditionStr}")
+ println()
+ println("-----------------------------------------------------------------------------")
+ }
+
+ printSettingsSummary()
+
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bfc2be2b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
index 2e13a6c..8151cb1 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
@@ -70,5 +70,9 @@ class ConfigurableSimulation extends Simulation {
println(s"scenarioType ${Settings.scenarioType} not found.")
}
+ after(
+ Settings.printSettingsSummary()
+ )
+
}
[05/21] incubator-usergrid git commit: USERGRID-871: refactor Gatling
load testing code
Posted by to...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.female.first.txt
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.female.first.txt b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.female.first.txt
new file mode 100644
index 0000000..7d534d2
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/datafiles/dist.female.first.txt
@@ -0,0 +1,4275 @@
+MARY 2.629 2.629 1
+PATRICIA 1.073 3.702 2
+LINDA 1.035 4.736 3
+BARBARA 0.980 5.716 4
+ELIZABETH 0.937 6.653 5
+JENNIFER 0.932 7.586 6
+MARIA 0.828 8.414 7
+SUSAN 0.794 9.209 8
+MARGARET 0.768 9.976 9
+DOROTHY 0.727 10.703 10
+LISA 0.704 11.407 11
+NANCY 0.669 12.075 12
+KAREN 0.667 12.742 13
+BETTY 0.666 13.408 14
+HELEN 0.663 14.071 15
+SANDRA 0.629 14.700 16
+DONNA 0.583 15.282 17
+CAROL 0.565 15.848 18
+RUTH 0.562 16.410 19
+SHARON 0.522 16.932 20
+MICHELLE 0.519 17.451 21
+LAURA 0.510 17.961 22
+SARAH 0.508 18.469 23
+KIMBERLY 0.504 18.973 24
+DEBORAH 0.494 19.467 25
+JESSICA 0.490 19.958 26
+SHIRLEY 0.482 20.439 27
+CYNTHIA 0.469 20.908 28
+ANGELA 0.468 21.376 29
+MELISSA 0.462 21.839 30
+BRENDA 0.455 22.293 31
+AMY 0.451 22.745 32
+ANNA 0.440 23.185 33
+REBECCA 0.430 23.615 34
+VIRGINIA 0.430 24.044 35
+KATHLEEN 0.424 24.468 36
+PAMELA 0.416 24.884 37
+MARTHA 0.412 25.297 38
+DEBRA 0.408 25.704 39
+AMANDA 0.404 26.108 40
+STEPHANIE 0.400 26.508 41
+CAROLYN 0.385 26.893 42
+CHRISTINE 0.382 27.275 43
+MARIE 0.379 27.655 44
+JANET 0.379 28.034 45
+CATHERINE 0.373 28.408 46
+FRANCES 0.370 28.777 47
+ANN 0.364 29.141 48
+JOYCE 0.364 29.505 49
+DIANE 0.359 29.864 50
+ALICE 0.357 30.221 51
+JULIE 0.348 30.568 52
+HEATHER 0.337 30.905 53
+TERESA 0.336 31.241 54
+DORIS 0.335 31.577 55
+GLORIA 0.335 31.912 56
+EVELYN 0.322 32.233 57
+JEAN 0.315 32.548 58
+CHERYL 0.315 32.863 59
+MILDRED 0.313 33.176 60
+KATHERINE 0.313 33.489 61
+JOAN 0.306 33.795 62
+ASHLEY 0.303 34.098 63
+JUDITH 0.297 34.395 64
+ROSE 0.296 34.691 65
+JANICE 0.285 34.975 66
+KELLY 0.283 35.258 67
+NICOLE 0.281 35.539 68
+JUDY 0.276 35.815 69
+CHRISTINA 0.275 36.090 70
+KATHY 0.272 36.362 71
+THERESA 0.271 36.633 72
+BEVERLY 0.267 36.900 73
+DENISE 0.264 37.164 74
+TAMMY 0.259 37.423 75
+IRENE 0.252 37.675 76
+JANE 0.250 37.925 77
+LORI 0.248 38.173 78
+RACHEL 0.242 38.415 79
+MARILYN 0.241 38.657 80
+ANDREA 0.236 38.893 81
+KATHRYN 0.234 39.127 82
+LOUISE 0.229 39.356 83
+SARA 0.229 39.584 84
+ANNE 0.228 39.812 85
+JACQUELINE 0.228 40.040 86
+WANDA 0.226 40.266 87
+BONNIE 0.223 40.489 88
+JULIA 0.223 40.711 89
+RUBY 0.221 40.932 90
+LOIS 0.220 41.153 91
+TINA 0.220 41.372 92
+PHYLLIS 0.219 41.591 93
+NORMA 0.218 41.809 94
+PAULA 0.217 42.026 95
+DIANA 0.216 42.242 96
+ANNIE 0.216 42.458 97
+LILLIAN 0.211 42.669 98
+EMILY 0.208 42.877 99
+ROBIN 0.208 43.085 100
+PEGGY 0.208 43.293 101
+CRYSTAL 0.207 43.500 102
+GLADYS 0.205 43.705 103
+RITA 0.204 43.908 104
+DAWN 0.202 44.111 105
+CONNIE 0.200 44.311 106
+FLORENCE 0.200 44.511 107
+TRACY 0.197 44.708 108
+EDNA 0.197 44.904 109
+TIFFANY 0.195 45.100 110
+CARMEN 0.195 45.295 111
+ROSA 0.194 45.489 112
+CINDY 0.192 45.681 113
+GRACE 0.189 45.869 114
+WENDY 0.185 46.055 115
+VICTORIA 0.180 46.235 116
+EDITH 0.179 46.414 117
+KIM 0.178 46.592 118
+SHERRY 0.178 46.770 119
+SYLVIA 0.177 46.947 120
+JOSEPHINE 0.177 47.123 121
+THELMA 0.175 47.298 122
+SHANNON 0.175 47.473 123
+SHEILA 0.175 47.648 124
+ETHEL 0.174 47.822 125
+ELLEN 0.173 47.995 126
+ELAINE 0.173 48.168 127
+MARJORIE 0.173 48.341 128
+CARRIE 0.171 48.512 129
+CHARLOTTE 0.169 48.680 130
+MONICA 0.166 48.847 131
+ESTHER 0.166 49.013 132
+PAULINE 0.165 49.178 133
+EMMA 0.165 49.342 134
+JUANITA 0.164 49.506 135
+ANITA 0.162 49.669 136
+RHONDA 0.162 49.830 137
+HAZEL 0.161 49.991 138
+AMBER 0.160 50.151 139
+EVA 0.159 50.310 140
+DEBBIE 0.157 50.467 141
+APRIL 0.154 50.621 142
+LESLIE 0.154 50.775 143
+CLARA 0.153 50.928 144
+LUCILLE 0.153 51.081 145
+JAMIE 0.153 51.235 146
+JOANNE 0.150 51.385 147
+ELEANOR 0.150 51.535 148
+VALERIE 0.149 51.684 149
+DANIELLE 0.149 51.833 150
+MEGAN 0.147 51.981 151
+ALICIA 0.146 52.126 152
+SUZANNE 0.145 52.272 153
+MICHELE 0.145 52.417 154
+GAIL 0.145 52.562 155
+BERTHA 0.143 52.704 156
+DARLENE 0.142 52.847 157
+VERONICA 0.142 52.989 158
+JILL 0.142 53.131 159
+ERIN 0.141 53.272 160
+GERALDINE 0.141 53.413 161
+LAUREN 0.137 53.550 162
+CATHY 0.137 53.687 163
+JOANN 0.136 53.823 164
+LORRAINE 0.135 53.958 165
+LYNN 0.135 54.093 166
+SALLY 0.135 54.228 167
+REGINA 0.133 54.360 168
+ERICA 0.130 54.490 169
+BEATRICE 0.130 54.620 170
+DOLORES 0.129 54.749 171
+BERNICE 0.128 54.877 172
+AUDREY 0.127 55.003 173
+YVONNE 0.126 55.129 174
+ANNETTE 0.125 55.255 175
+JUNE 0.125 55.380 176
+SAMANTHA 0.124 55.504 177
+MARION 0.122 55.626 178
+DANA 0.122 55.748 179
+STACY 0.121 55.869 180
+ANA 0.120 55.989 181
+RENEE 0.120 56.109 182
+IDA 0.118 56.227 183
+VIVIAN 0.118 56.346 184
+ROBERTA 0.117 56.463 185
+HOLLY 0.117 56.580 186
+BRITTANY 0.117 56.697 187
+MELANIE 0.116 56.813 188
+LORETTA 0.115 56.928 189
+YOLANDA 0.115 57.043 190
+JEANETTE 0.115 57.158 191
+LAURIE 0.114 57.271 192
+KATIE 0.113 57.385 193
+KRISTEN 0.111 57.496 194
+VANESSA 0.111 57.607 195
+ALMA 0.111 57.718 196
+SUE 0.111 57.829 197
+ELSIE 0.110 57.939 198
+BETH 0.110 58.049 199
+JEANNE 0.109 58.158 200
+VICKI 0.109 58.267 201
+CARLA 0.107 58.374 202
+TARA 0.107 58.482 203
+ROSEMARY 0.107 58.589 204
+EILEEN 0.105 58.694 205
+TERRI 0.105 58.799 206
+GERTRUDE 0.103 58.902 207
+LUCY 0.103 59.005 208
+TONYA 0.102 59.107 209
+ELLA 0.101 59.208 210
+STACEY 0.101 59.308 211
+WILMA 0.099 59.408 212
+GINA 0.099 59.506 213
+KRISTIN 0.099 59.605 214
+JESSIE 0.098 59.703 215
+NATALIE 0.098 59.801 216
+AGNES 0.098 59.899 217
+VERA 0.098 59.997 218
+WILLIE 0.097 60.094 219
+CHARLENE 0.097 60.191 220
+BESSIE 0.096 60.287 221
+DELORES 0.095 60.382 222
+MELINDA 0.094 60.477 223
+PEARL 0.094 60.571 224
+ARLENE 0.094 60.665 225
+MAUREEN 0.092 60.757 226
+COLLEEN 0.092 60.849 227
+ALLISON 0.092 60.941 228
+TAMARA 0.092 61.033 229
+JOY 0.091 61.124 230
+GEORGIA 0.091 61.215 231
+CONSTANCE 0.091 61.305 232
+LILLIE 0.090 61.396 233
+CLAUDIA 0.090 61.485 234
+JACKIE 0.090 61.575 235
+MARCIA 0.090 61.665 236
+TANYA 0.089 61.754 237
+NELLIE 0.089 61.843 238
+MINNIE 0.089 61.931 239
+MARLENE 0.088 62.020 240
+HEIDI 0.088 62.108 241
+GLENDA 0.088 62.195 242
+LYDIA 0.086 62.281 243
+VIOLA 0.086 62.367 244
+COURTNEY 0.086 62.453 245
+MARIAN 0.086 62.539 246
+STELLA 0.085 62.623 247
+CAROLINE 0.085 62.708 248
+DORA 0.084 62.792 249
+JO 0.083 62.875 250
+VICKIE 0.082 62.957 251
+MATTIE 0.081 63.038 252
+TERRY 0.080 63.118 253
+MAXINE 0.079 63.198 254
+IRMA 0.079 63.277 255
+MABEL 0.078 63.355 256
+MARSHA 0.078 63.434 257
+MYRTLE 0.078 63.511 258
+LENA 0.077 63.589 259
+CHRISTY 0.077 63.665 260
+DEANNA 0.076 63.742 261
+PATSY 0.076 63.818 262
+HILDA 0.075 63.893 263
+GWENDOLYN 0.074 63.967 264
+JENNIE 0.073 64.040 265
+NORA 0.073 64.113 266
+MARGIE 0.072 64.185 267
+NINA 0.072 64.257 268
+CASSANDRA 0.072 64.329 269
+LEAH 0.072 64.401 270
+PENNY 0.071 64.472 271
+KAY 0.071 64.543 272
+PRISCILLA 0.071 64.614 273
+NAOMI 0.071 64.684 274
+CAROLE 0.071 64.755 275
+BRANDY 0.070 64.825 276
+OLGA 0.070 64.895 277
+BILLIE 0.069 64.964 278
+DIANNE 0.069 65.033 279
+TRACEY 0.069 65.102 280
+LEONA 0.069 65.171 281
+JENNY 0.068 65.239 282
+FELICIA 0.068 65.307 283
+SONIA 0.068 65.374 284
+MIRIAM 0.066 65.440 285
+VELMA 0.066 65.506 286
+BECKY 0.066 65.572 287
+BOBBIE 0.065 65.637 288
+VIOLET 0.065 65.702 289
+KRISTINA 0.065 65.767 290
+TONI 0.064 65.831 291
+MISTY 0.063 65.894 292
+MAE 0.063 65.957 293
+SHELLY 0.062 66.019 294
+DAISY 0.062 66.081 295
+RAMONA 0.062 66.143 296
+SHERRI 0.062 66.205 297
+ERIKA 0.061 66.267 298
+KATRINA 0.061 66.328 299
+CLAIRE 0.061 66.388 300
+LINDSEY 0.060 66.448 301
+LINDSAY 0.060 66.507 302
+GENEVA 0.059 66.567 303
+GUADALUPE 0.059 66.626 304
+BELINDA 0.059 66.685 305
+MARGARITA 0.059 66.743 306
+SHERYL 0.059 66.802 307
+CORA 0.058 66.860 308
+FAYE 0.058 66.917 309
+ADA 0.057 66.975 310
+NATASHA 0.057 67.032 311
+SABRINA 0.057 67.089 312
+ISABEL 0.057 67.146 313
+MARGUERITE 0.056 67.202 314
+HATTIE 0.056 67.257 315
+HARRIET 0.056 67.313 316
+MOLLY 0.055 67.368 317
+CECILIA 0.055 67.424 318
+KRISTI 0.055 67.479 319
+BRANDI 0.055 67.534 320
+BLANCHE 0.055 67.589 321
+SANDY 0.055 67.644 322
+ROSIE 0.055 67.699 323
+JOANNA 0.055 67.754 324
+IRIS 0.055 67.808 325
+EUNICE 0.054 67.863 326
+ANGIE 0.054 67.917 327
+INEZ 0.053 67.970 328
+LYNDA 0.053 68.023 329
+MADELINE 0.052 68.075 330
+AMELIA 0.052 68.127 331
+ALBERTA 0.052 68.179 332
+GENEVIEVE 0.051 68.230 333
+MONIQUE 0.051 68.282 334
+JODI 0.051 68.333 335
+JANIE 0.051 68.385 336
+MAGGIE 0.051 68.436 337
+KAYLA 0.051 68.487 338
+SONYA 0.051 68.538 339
+JAN 0.051 68.589 340
+LEE 0.051 68.641 341
+KRISTINE 0.051 68.691 342
+CANDACE 0.051 68.742 343
+FANNIE 0.050 68.792 344
+MARYANN 0.050 68.843 345
+OPAL 0.050 68.893 346
+ALISON 0.050 68.943 347
+YVETTE 0.050 68.993 348
+MELODY 0.050 69.043 349
+LUZ 0.049 69.092 350
+SUSIE 0.049 69.142 351
+OLIVIA 0.049 69.191 352
+FLORA 0.049 69.240 353
+SHELLEY 0.049 69.288 354
+KRISTY 0.048 69.337 355
+MAMIE 0.048 69.385 356
+LULA 0.048 69.433 357
+LOLA 0.048 69.482 358
+VERNA 0.048 69.530 359
+BEULAH 0.048 69.577 360
+ANTOINETTE 0.048 69.625 361
+CANDICE 0.046 69.671 362
+JUANA 0.046 69.717 363
+JEANNETTE 0.046 69.763 364
+PAM 0.046 69.809 365
+KELLI 0.046 69.854 366
+HANNAH 0.045 69.899 367
+WHITNEY 0.045 69.944 368
+BRIDGET 0.045 69.989 369
+KARLA 0.044 70.034 370
+CELIA 0.044 70.078 371
+LATOYA 0.043 70.121 372
+PATTY 0.043 70.165 373
+SHELIA 0.043 70.208 374
+GAYLE 0.043 70.251 375
+DELLA 0.043 70.294 376
+VICKY 0.043 70.336 377
+LYNNE 0.043 70.379 378
+SHERI 0.042 70.421 379
+MARIANNE 0.042 70.463 380
+KARA 0.041 70.504 381
+JACQUELYN 0.041 70.544 382
+ERMA 0.041 70.585 383
+BLANCA 0.041 70.626 384
+MYRA 0.040 70.666 385
+LETICIA 0.040 70.706 386
+PAT 0.040 70.746 387
+KRISTA 0.040 70.786 388
+ROXANNE 0.040 70.826 389
+ANGELICA 0.039 70.865 390
+JOHNNIE 0.039 70.905 391
+ROBYN 0.039 70.944 392
+FRANCIS 0.039 70.983 393
+ADRIENNE 0.039 71.022 394
+ROSALIE 0.039 71.061 395
+ALEXANDRA 0.039 71.100 396
+BROOKE 0.039 71.139 397
+BETHANY 0.039 71.177 398
+SADIE 0.039 71.216 399
+BERNADETTE 0.039 71.254 400
+TRACI 0.038 71.293 401
+JODY 0.038 71.331 402
+KENDRA 0.038 71.369 403
+JASMINE 0.038 71.407 404
+NICHOLE 0.038 71.445 405
+RACHAEL 0.038 71.483 406
+CHELSEA 0.038 71.520 407
+MABLE 0.038 71.558 408
+ERNESTINE 0.038 71.596 409
+MURIEL 0.038 71.634 410
+MARCELLA 0.037 71.671 411
+ELENA 0.037 71.708 412
+KRYSTAL 0.037 71.745 413
+ANGELINA 0.037 71.781 414
+NADINE 0.036 71.818 415
+KARI 0.036 71.853 416
+ESTELLE 0.036 71.889 417
+DIANNA 0.036 71.925 418
+PAULETTE 0.036 71.961 419
+LORA 0.036 71.996 420
+MONA 0.035 72.032 421
+DOREEN 0.035 72.067 422
+ROSEMARIE 0.035 72.102 423
+ANGEL 0.035 72.137 424
+DESIREE 0.035 72.172 425
+ANTONIA 0.035 72.207 426
+HOPE 0.034 72.241 427
+GINGER 0.034 72.274 428
+JANIS 0.034 72.308 429
+BETSY 0.034 72.342 430
+CHRISTIE 0.034 72.375 431
+FREDA 0.034 72.409 432
+MERCEDES 0.033 72.442 433
+MEREDITH 0.033 72.475 434
+LYNETTE 0.033 72.508 435
+TERI 0.033 72.541 436
+CRISTINA 0.033 72.573 437
+EULA 0.033 72.606 438
+LEIGH 0.032 72.638 439
+MEGHAN 0.032 72.670 440
+SOPHIA 0.032 72.702 441
+ELOISE 0.032 72.734 442
+ROCHELLE 0.032 72.766 443
+GRETCHEN 0.032 72.798 444
+CECELIA 0.032 72.829 445
+RAQUEL 0.031 72.860 446
+HENRIETTA 0.031 72.891 447
+ALYSSA 0.031 72.922 448
+JANA 0.031 72.953 449
+KELLEY 0.031 72.983 450
+GWEN 0.031 73.014 451
+KERRY 0.031 73.044 452
+JENNA 0.030 73.075 453
+TRICIA 0.030 73.105 454
+LAVERNE 0.030 73.135 455
+OLIVE 0.030 73.165 456
+ALEXIS 0.030 73.195 457
+TASHA 0.030 73.225 458
+SILVIA 0.029 73.254 459
+ELVIRA 0.029 73.284 460
+CASEY 0.029 73.313 461
+DELIA 0.029 73.342 462
+SOPHIE 0.029 73.372 463
+KATE 0.029 73.401 464
+PATTI 0.029 73.430 465
+LORENA 0.029 73.459 466
+KELLIE 0.029 73.488 467
+SONJA 0.029 73.517 468
+LILA 0.029 73.546 469
+LANA 0.029 73.575 470
+DARLA 0.029 73.604 471
+MAY 0.029 73.633 472
+MINDY 0.029 73.661 473
+ESSIE 0.029 73.690 474
+MANDY 0.029 73.719 475
+LORENE 0.028 73.747 476
+ELSA 0.028 73.775 477
+JOSEFINA 0.028 73.804 478
+JEANNIE 0.028 73.832 479
+MIRANDA 0.028 73.860 480
+DIXIE 0.028 73.888 481
+LUCIA 0.028 73.916 482
+MARTA 0.028 73.944 483
+FAITH 0.028 73.972 484
+LELA 0.028 73.999 485
+JOHANNA 0.028 74.027 486
+SHARI 0.028 74.055 487
+CAMILLE 0.028 74.082 488
+TAMI 0.027 74.110 489
+SHAWNA 0.027 74.137 490
+ELISA 0.027 74.164 491
+EBONY 0.027 74.192 492
+MELBA 0.027 74.219 493
+ORA 0.027 74.246 494
+NETTIE 0.027 74.273 495
+TABITHA 0.027 74.300 496
+OLLIE 0.027 74.327 497
+JAIME 0.027 74.354 498
+WINIFRED 0.027 74.381 499
+KRISTIE 0.027 74.408 500
+MARINA 0.027 74.435 501
+ALISHA 0.027 74.462 502
+AIMEE 0.027 74.488 503
+RENA 0.027 74.515 504
+MYRNA 0.026 74.541 505
+MARLA 0.026 74.567 506
+TAMMIE 0.026 74.593 507
+LATASHA 0.026 74.619 508
+BONITA 0.026 74.645 509
+PATRICE 0.026 74.671 510
+RONDA 0.026 74.697 511
+SHERRIE 0.026 74.722 512
+ADDIE 0.026 74.748 513
+FRANCINE 0.025 74.773 514
+DELORIS 0.025 74.799 515
+STACIE 0.025 74.824 516
+ADRIANA 0.025 74.849 517
+CHERI 0.025 74.874 518
+SHELBY 0.025 74.899 519
+ABIGAIL 0.025 74.924 520
+CELESTE 0.025 74.949 521
+JEWEL 0.025 74.974 522
+CARA 0.025 74.999 523
+ADELE 0.025 75.024 524
+REBEKAH 0.025 75.048 525
+LUCINDA 0.025 75.073 526
+DORTHY 0.025 75.097 527
+CHRIS 0.024 75.122 528
+EFFIE 0.024 75.146 529
+TRINA 0.024 75.171 530
+REBA 0.024 75.195 531
+SHAWN 0.024 75.219 532
+SALLIE 0.024 75.244 533
+AURORA 0.024 75.268 534
+LENORA 0.024 75.292 535
+ETTA 0.024 75.317 536
+LOTTIE 0.024 75.341 537
+KERRI 0.024 75.365 538
+TRISHA 0.024 75.389 539
+NIKKI 0.024 75.413 540
+ESTELLA 0.024 75.438 541
+FRANCISCA 0.024 75.461 542
+JOSIE 0.024 75.485 543
+TRACIE 0.024 75.509 544
+MARISSA 0.024 75.533 545
+KARIN 0.024 75.557 546
+BRITTNEY 0.024 75.580 547
+JANELLE 0.024 75.604 548
+LOURDES 0.024 75.628 549
+LAUREL 0.024 75.651 550
+HELENE 0.024 75.675 551
+FERN 0.024 75.698 552
+ELVA 0.024 75.722 553
+CORINNE 0.024 75.745 554
+KELSEY 0.024 75.769 555
+INA 0.023 75.792 556
+BETTIE 0.023 75.816 557
+ELISABETH 0.023 75.839 558
+AIDA 0.023 75.862 559
+CAITLIN 0.023 75.886 560
+INGRID 0.023 75.909 561
+IVA 0.023 75.932 562
+EUGENIA 0.023 75.955 563
+CHRISTA 0.023 75.978 564
+GOLDIE 0.023 76.000 565
+CASSIE 0.023 76.023 566
+MAUDE 0.023 76.046 567
+JENIFER 0.023 76.068 568
+THERESE 0.022 76.091 569
+FRANKIE 0.022 76.113 570
+DENA 0.022 76.136 571
+LORNA 0.022 76.158 572
+JANETTE 0.022 76.180 573
+LATONYA 0.022 76.202 574
+CANDY 0.022 76.224 575
+MORGAN 0.022 76.247 576
+CONSUELO 0.022 76.269 577
+TAMIKA 0.022 76.291 578
+ROSETTA 0.022 76.313 579
+DEBORA 0.022 76.334 580
+CHERIE 0.022 76.356 581
+POLLY 0.022 76.378 582
+DINA 0.022 76.400 583
+JEWELL 0.021 76.421 584
+FAY 0.021 76.442 585
+JILLIAN 0.021 76.464 586
+DOROTHEA 0.021 76.485 587
+NELL 0.021 76.506 588
+TRUDY 0.021 76.527 589
+ESPERANZA 0.021 76.548 590
+PATRICA 0.021 76.570 591
+KIMBERLEY 0.021 76.591 592
+SHANNA 0.021 76.611 593
+HELENA 0.021 76.632 594
+CAROLINA 0.021 76.653 595
+CLEO 0.021 76.674 596
+STEFANIE 0.021 76.694 597
+ROSARIO 0.020 76.715 598
+OLA 0.020 76.735 599
+JANINE 0.020 76.756 600
+MOLLIE 0.020 76.776 601
+LUPE 0.020 76.796 602
+ALISA 0.020 76.816 603
+LOU 0.020 76.836 604
+MARIBEL 0.020 76.856 605
+SUSANNE 0.020 76.875 606
+BETTE 0.019 76.895 607
+SUSANA 0.019 76.914 608
+ELISE 0.019 76.933 609
+CECILE 0.019 76.953 610
+ISABELLE 0.019 76.972 611
+LESLEY 0.019 76.991 612
+JOCELYN 0.019 77.010 613
+PAIGE 0.019 77.030 614
+JONI 0.019 77.049 615
+RACHELLE 0.019 77.068 616
+LEOLA 0.019 77.087 617
+DAPHNE 0.019 77.106 618
+ALTA 0.019 77.125 619
+ESTER 0.019 77.144 620
+PETRA 0.019 77.162 621
+GRACIELA 0.019 77.181 622
+IMOGENE 0.019 77.200 623
+JOLENE 0.019 77.219 624
+KEISHA 0.019 77.237 625
+LACEY 0.018 77.256 626
+GLENNA 0.018 77.274 627
+GABRIELA 0.018 77.293 628
+KERI 0.018 77.311 629
+URSULA 0.018 77.329 630
+LIZZIE 0.018 77.347 631
+KIRSTEN 0.018 77.366 632
+SHANA 0.018 77.384 633
+ADELINE 0.018 77.402 634
+MAYRA 0.018 77.420 635
+JAYNE 0.018 77.438 636
+JACLYN 0.018 77.456 637
+GRACIE 0.018 77.474 638
+SONDRA 0.018 77.492 639
+CARMELA 0.018 77.509 640
+MARISA 0.018 77.527 641
+ROSALIND 0.018 77.545 642
+CHARITY 0.018 77.563 643
+TONIA 0.018 77.580 644
+BEATRIZ 0.018 77.598 645
+MARISOL 0.018 77.616 646
+CLARICE 0.018 77.633 647
+JEANINE 0.017 77.651 648
+SHEENA 0.017 77.668 649
+ANGELINE 0.017 77.685 650
+FRIEDA 0.017 77.703 651
+LILY 0.017 77.720 652
+ROBBIE 0.017 77.737 653
+SHAUNA 0.017 77.754 654
+MILLIE 0.017 77.771 655
+CLAUDETTE 0.017 77.788 656
+CATHLEEN 0.017 77.805 657
+ANGELIA 0.017 77.822 658
+GABRIELLE 0.017 77.839 659
+AUTUMN 0.017 77.856 660
+KATHARINE 0.017 77.873 661
+SUMMER 0.017 77.890 662
+JODIE 0.017 77.907 663
+STACI 0.017 77.923 664
+LEA 0.017 77.940 665
+CHRISTI 0.017 77.957 666
+JIMMIE 0.017 77.974 667
+JUSTINE 0.017 77.990 668
+ELMA 0.017 78.007 669
+LUELLA 0.017 78.023 670
+MARGRET 0.017 78.040 671
+DOMINIQUE 0.016 78.056 672
+SOCORRO 0.016 78.073 673
+RENE 0.016 78.089 674
+MARTINA 0.016 78.105 675
+MARGO 0.016 78.122 676
+MAVIS 0.016 78.138 677
+CALLIE 0.016 78.154 678
+BOBBI 0.016 78.170 679
+MARITZA 0.016 78.186 680
+LUCILE 0.016 78.202 681
+LEANNE 0.016 78.219 682
+JEANNINE 0.016 78.235 683
+DEANA 0.016 78.251 684
+AILEEN 0.016 78.267 685
+LORIE 0.016 78.282 686
+LADONNA 0.016 78.298 687
+WILLA 0.016 78.314 688
+MANUELA 0.016 78.330 689
+GALE 0.016 78.346 690
+SELMA 0.016 78.361 691
+DOLLY 0.016 78.377 692
+SYBIL 0.016 78.393 693
+ABBY 0.016 78.408 694
+LARA 0.016 78.424 695
+DALE 0.016 78.440 696
+IVY 0.016 78.455 697
+DEE 0.016 78.471 698
+WINNIE 0.016 78.486 699
+MARCY 0.016 78.502 700
+LUISA 0.016 78.517 701
+JERI 0.015 78.533 702
+MAGDALENA 0.015 78.548 703
+OFELIA 0.015 78.563 704
+MEAGAN 0.015 78.579 705
+AUDRA 0.015 78.594 706
+MATILDA 0.015 78.609 707
+LEILA 0.015 78.624 708
+CORNELIA 0.015 78.639 709
+BIANCA 0.015 78.654 710
+SIMONE 0.015 78.669 711
+BETTYE 0.015 78.684 712
+RANDI 0.015 78.699 713
+VIRGIE 0.015 78.713 714
+LATISHA 0.015 78.728 715
+BARBRA 0.015 78.743 716
+GEORGINA 0.015 78.758 717
+ELIZA 0.015 78.772 718
+LEANN 0.015 78.787 719
+BRIDGETTE 0.015 78.801 720
+RHODA 0.014 78.816 721
+HALEY 0.014 78.830 722
+ADELA 0.014 78.845 723
+NOLA 0.014 78.859 724
+BERNADINE 0.014 78.873 725
+FLOSSIE 0.014 78.887 726
+ILA 0.014 78.902 727
+GRETA 0.014 78.916 728
+RUTHIE 0.014 78.930 729
+NELDA 0.014 78.944 730
+MINERVA 0.014 78.958 731
+LILLY 0.014 78.973 732
+TERRIE 0.014 78.987 733
+LETHA 0.014 79.001 734
+HILARY 0.014 79.015 735
+ESTELA 0.014 79.029 736
+VALARIE 0.014 79.043 737
+BRIANNA 0.014 79.057 738
+ROSALYN 0.014 79.071 739
+EARLINE 0.014 79.085 740
+CATALINA 0.014 79.099 741
+AVA 0.014 79.113 742
+MIA 0.014 79.127 743
+CLARISSA 0.014 79.141 744
+LIDIA 0.014 79.155 745
+CORRINE 0.014 79.169 746
+ALEXANDRIA 0.014 79.183 747
+CONCEPCION 0.014 79.196 748
+TIA 0.014 79.210 749
+SHARRON 0.014 79.224 750
+RAE 0.014 79.238 751
+DONA 0.014 79.251 752
+ERICKA 0.014 79.265 753
+JAMI 0.014 79.278 754
+ELNORA 0.014 79.292 755
+CHANDRA 0.014 79.306 756
+LENORE 0.014 79.319 757
+NEVA 0.013 79.333 758
+MARYLOU 0.013 79.346 759
+MELISA 0.013 79.360 760
+TABATHA 0.013 79.373 761
+SERENA 0.013 79.386 762
+AVIS 0.013 79.400 763
+ALLIE 0.013 79.413 764
+SOFIA 0.013 79.426 765
+JEANIE 0.013 79.439 766
+ODESSA 0.013 79.453 767
+NANNIE 0.013 79.466 768
+HARRIETT 0.013 79.479 769
+LORAINE 0.013 79.492 770
+PENELOPE 0.013 79.505 771
+MILAGROS 0.013 79.518 772
+EMILIA 0.013 79.531 773
+BENITA 0.013 79.544 774
+ALLYSON 0.013 79.557 775
+ASHLEE 0.013 79.570 776
+TANIA 0.013 79.583 777
+TOMMIE 0.013 79.596 778
+ESMERALDA 0.013 79.608 779
+KARINA 0.013 79.621 780
+EVE 0.013 79.634 781
+PEARLIE 0.013 79.647 782
+ZELMA 0.013 79.659 783
+MALINDA 0.013 79.672 784
+NOREEN 0.013 79.684 785
+TAMEKA 0.013 79.697 786
+SAUNDRA 0.013 79.710 787
+HILLARY 0.013 79.722 788
+AMIE 0.013 79.735 789
+ALTHEA 0.012 79.747 790
+ROSALINDA 0.012 79.760 791
+JORDAN 0.012 79.772 792
+LILIA 0.012 79.784 793
+ALANA 0.012 79.797 794
+GAY 0.012 79.809 795
+CLARE 0.012 79.821 796
+ALEJANDRA 0.012 79.834 797
+ELINOR 0.012 79.846 798
+MICHAEL 0.012 79.858 799
+LORRIE 0.012 79.870 800
+JERRI 0.012 79.882 801
+DARCY 0.012 79.895 802
+EARNESTINE 0.012 79.907 803
+CARMELLA 0.012 79.919 804
+TAYLOR 0.012 79.931 805
+NOEMI 0.012 79.943 806
+MARCIE 0.012 79.954 807
+LIZA 0.012 79.966 808
+ANNABELLE 0.012 79.978 809
+LOUISA 0.012 79.990 810
+EARLENE 0.012 80.002 811
+MALLORY 0.012 80.014 812
+CARLENE 0.012 80.025 813
+NITA 0.012 80.037 814
+SELENA 0.012 80.049 815
+TANISHA 0.012 80.060 816
+KATY 0.012 80.072 817
+JULIANNE 0.012 80.083 818
+JOHN 0.012 80.095 819
+LAKISHA 0.011 80.106 820
+EDWINA 0.011 80.118 821
+MARICELA 0.011 80.129 822
+MARGERY 0.011 80.141 823
+KENYA 0.011 80.152 824
+DOLLIE 0.011 80.164 825
+ROXIE 0.011 80.175 826
+ROSLYN 0.011 80.187 827
+KATHRINE 0.011 80.198 828
+NANETTE 0.011 80.209 829
+CHARMAINE 0.011 80.221 830
+LAVONNE 0.011 80.232 831
+ILENE 0.011 80.243 832
+KRIS 0.011 80.255 833
+TAMMI 0.011 80.266 834
+SUZETTE 0.011 80.277 835
+CORINE 0.011 80.288 836
+KAYE 0.011 80.300 837
+JERRY 0.011 80.311 838
+MERLE 0.011 80.322 839
+CHRYSTAL 0.011 80.333 840
+LINA 0.011 80.344 841
+DEANNE 0.011 80.355 842
+LILIAN 0.011 80.366 843
+JULIANA 0.011 80.377 844
+ALINE 0.011 80.388 845
+LUANN 0.011 80.399 846
+KASEY 0.011 80.410 847
+MARYANNE 0.011 80.421 848
+EVANGELINE 0.011 80.432 849
+COLETTE 0.011 80.443 850
+MELVA 0.011 80.453 851
+LAWANDA 0.011 80.464 852
+YESENIA 0.011 80.475 853
+NADIA 0.011 80.486 854
+MADGE 0.011 80.497 855
+KATHIE 0.011 80.507 856
+EDDIE 0.011 80.518 857
+OPHELIA 0.011 80.529 858
+VALERIA 0.011 80.539 859
+NONA 0.011 80.550 860
+MITZI 0.011 80.561 861
+MARI 0.011 80.571 862
+GEORGETTE 0.011 80.582 863
+CLAUDINE 0.011 80.592 864
+FRAN 0.011 80.603 865
+ALISSA 0.011 80.613 866
+ROSEANN 0.010 80.624 867
+LAKEISHA 0.010 80.634 868
+SUSANNA 0.010 80.645 869
+REVA 0.010 80.655 870
+DEIDRE 0.010 80.665 871
+CHASITY 0.010 80.676 872
+SHEREE 0.010 80.686 873
+CARLY 0.010 80.697 874
+JAMES 0.010 80.707 875
+ELVIA 0.010 80.717 876
+ALYCE 0.010 80.728 877
+DEIRDRE 0.010 80.738 878
+GENA 0.010 80.748 879
+BRIANA 0.010 80.758 880
+ARACELI 0.010 80.769 881
+KATELYN 0.010 80.779 882
+ROSANNE 0.010 80.789 883
+WENDI 0.010 80.799 884
+TESSA 0.010 80.810 885
+BERTA 0.010 80.820 886
+MARVA 0.010 80.830 887
+IMELDA 0.010 80.840 888
+MARIETTA 0.010 80.850 889
+MARCI 0.010 80.860 890
+LEONOR 0.010 80.870 891
+ARLINE 0.010 80.880 892
+SASHA 0.010 80.890 893
+MADELYN 0.010 80.900 894
+JANNA 0.010 80.910 895
+JULIETTE 0.010 80.920 896
+DEENA 0.010 80.929 897
+AURELIA 0.010 80.939 898
+JOSEFA 0.010 80.949 899
+AUGUSTA 0.010 80.959 900
+LILIANA 0.010 80.968 901
+YOUNG 0.010 80.978 902
+CHRISTIAN 0.010 80.988 903
+LESSIE 0.010 80.997 904
+AMALIA 0.010 81.007 905
+SAVANNAH 0.010 81.017 906
+ANASTASIA 0.010 81.026 907
+VILMA 0.010 81.036 908
+NATALIA 0.010 81.045 909
+ROSELLA 0.010 81.055 910
+LYNNETTE 0.010 81.064 911
+CORINA 0.010 81.074 912
+ALFREDA 0.009 81.083 913
+LEANNA 0.009 81.093 914
+CAREY 0.009 81.102 915
+AMPARO 0.009 81.112 916
+COLEEN 0.009 81.121 917
+TAMRA 0.009 81.131 918
+AISHA 0.009 81.140 919
+WILDA 0.009 81.149 920
+KARYN 0.009 81.159 921
+CHERRY 0.009 81.168 922
+QUEEN 0.009 81.177 923
+MAURA 0.009 81.187 924
+MAI 0.009 81.196 925
+EVANGELINA 0.009 81.205 926
+ROSANNA 0.009 81.214 927
+HALLIE 0.009 81.224 928
+ERNA 0.009 81.233 929
+ENID 0.009 81.242 930
+MARIANA 0.009 81.251 931
+LACY 0.009 81.260 932
+JULIET 0.009 81.270 933
+JACKLYN 0.009 81.279 934
+FREIDA 0.009 81.288 935
+MADELEINE 0.009 81.297 936
+MARA 0.009 81.306 937
+HESTER 0.009 81.315 938
+CATHRYN 0.009 81.324 939
+LELIA 0.009 81.333 940
+CASANDRA 0.009 81.343 941
+BRIDGETT 0.009 81.352 942
+ANGELITA 0.009 81.361 943
+JANNIE 0.009 81.370 944
+DIONNE 0.009 81.379 945
+ANNMARIE 0.009 81.388 946
+KATINA 0.009 81.397 947
+BERYL 0.009 81.405 948
+PHOEBE 0.009 81.414 949
+MILLICENT 0.009 81.423 950
+KATHERYN 0.009 81.432 951
+DIANN 0.009 81.441 952
+CARISSA 0.009 81.450 953
+MARYELLEN 0.009 81.459 954
+LIZ 0.009 81.468 955
+LAURI 0.009 81.476 956
+HELGA 0.009 81.485 957
+GILDA 0.009 81.494 958
+ADRIAN 0.009 81.503 959
+RHEA 0.009 81.511 960
+MARQUITA 0.009 81.520 961
+HOLLIE 0.009 81.529 962
+TISHA 0.009 81.538 963
+TAMERA 0.009 81.546 964
+ANGELIQUE 0.009 81.555 965
+FRANCESCA 0.009 81.564 966
+BRITNEY 0.009 81.573 967
+KAITLIN 0.009 81.581 968
+LOLITA 0.009 81.590 969
+FLORINE 0.009 81.599 970
+ROWENA 0.009 81.607 971
+REYNA 0.009 81.616 972
+TWILA 0.009 81.624 973
+FANNY 0.009 81.633 974
+JANELL 0.009 81.641 975
+INES 0.009 81.650 976
+CONCETTA 0.009 81.658 977
+BERTIE 0.009 81.667 978
+ALBA 0.009 81.676 979
+BRIGITTE 0.009 81.684 980
+ALYSON 0.009 81.693 981
+VONDA 0.008 81.701 982
+PANSY 0.008 81.710 983
+ELBA 0.008 81.718 984
+NOELLE 0.008 81.726 985
+LETITIA 0.008 81.735 986
+KITTY 0.008 81.743 987
+DEANN 0.008 81.752 988
+BRANDIE 0.008 81.760 989
+LOUELLA 0.008 81.769 990
+LETA 0.008 81.777 991
+FELECIA 0.008 81.786 992
+SHARLENE 0.008 81.794 993
+LESA 0.008 81.802 994
+BEVERLEY 0.008 81.811 995
+ROBERT 0.008 81.819 996
+ISABELLA 0.008 81.827 997
+HERMINIA 0.008 81.836 998
+TERRA 0.008 81.844 999
+CELINA 0.008 81.852 1000
+TORI 0.008 81.861 1001
+OCTAVIA 0.008 81.869 1002
+JADE 0.008 81.877 1003
+DENICE 0.008 81.885 1004
+GERMAINE 0.008 81.894 1005
+SIERRA 0.008 81.902 1006
+MICHELL 0.008 81.910 1007
+CORTNEY 0.008 81.918 1008
+NELLY 0.008 81.926 1009
+DORETHA 0.008 81.934 1010
+SYDNEY 0.008 81.943 1011
+DEIDRA 0.008 81.951 1012
+MONIKA 0.008 81.959 1013
+LASHONDA 0.008 81.967 1014
+JUDI 0.008 81.975 1015
+CHELSEY 0.008 81.983 1016
+ANTIONETTE 0.008 81.991 1017
+MARGOT 0.008 81.999 1018
+BOBBY 0.008 82.007 1019
+ADELAIDE 0.008 82.015 1020
+NAN 0.008 82.023 1021
+LEEANN 0.008 82.030 1022
+ELISHA 0.008 82.038 1023
+DESSIE 0.008 82.046 1024
+LIBBY 0.008 82.054 1025
+KATHI 0.008 82.062 1026
+GAYLA 0.008 82.070 1027
+LATANYA 0.008 82.078 1028
+MINA 0.008 82.086 1029
+MELLISA 0.008 82.093 1030
+KIMBERLEE 0.008 82.101 1031
+JASMIN 0.008 82.109 1032
+RENAE 0.008 82.117 1033
+ZELDA 0.008 82.125 1034
+ELDA 0.008 82.132 1035
+MA 0.008 82.140 1036
+JUSTINA 0.008 82.148 1037
+GUSSIE 0.008 82.156 1038
+EMILIE 0.008 82.163 1039
+CAMILLA 0.008 82.171 1040
+ABBIE 0.008 82.179 1041
+ROCIO 0.008 82.186 1042
+KAITLYN 0.008 82.194 1043
+JESSE 0.008 82.202 1044
+EDYTHE 0.008 82.209 1045
+ASHLEIGH 0.008 82.217 1046
+SELINA 0.008 82.225 1047
+LAKESHA 0.008 82.232 1048
+GERI 0.008 82.240 1049
+ALLENE 0.008 82.248 1050
+PAMALA 0.008 82.255 1051
+MICHAELA 0.008 82.263 1052
+DAYNA 0.008 82.270 1053
+CARYN 0.008 82.278 1054
+ROSALIA 0.008 82.286 1055
+SUN 0.007 82.293 1056
+JACQULINE 0.007 82.301 1057
+REBECA 0.007 82.308 1058
+MARYBETH 0.007 82.315 1059
+KRYSTLE 0.007 82.323 1060
+IOLA 0.007 82.330 1061
+DOTTIE 0.007 82.338 1062
+BENNIE 0.007 82.345 1063
+BELLE 0.007 82.353 1064
+AUBREY 0.007 82.360 1065
+GRISELDA 0.007 82.367 1066
+ERNESTINA 0.007 82.375 1067
+ELIDA 0.007 82.382 1068
+ADRIANNE 0.007 82.390 1069
+DEMETRIA 0.007 82.397 1070
+DELMA 0.007 82.404 1071
+CHONG 0.007 82.412 1072
+JAQUELINE 0.007 82.419 1073
+DESTINY 0.007 82.427 1074
+ARLEEN 0.007 82.434 1075
+VIRGINA 0.007 82.441 1076
+RETHA 0.007 82.448 1077
+FATIMA 0.007 82.456 1078
+TILLIE 0.007 82.463 1079
+ELEANORE 0.007 82.470 1080
+CARI 0.007 82.478 1081
+TREVA 0.007 82.485 1082
+BIRDIE 0.007 82.492 1083
+WILHELMINA 0.007 82.499 1084
+ROSALEE 0.007 82.506 1085
+MAURINE 0.007 82.514 1086
+LATRICE 0.007 82.521 1087
+YONG 0.007 82.528 1088
+JENA 0.007 82.535 1089
+TARYN 0.007 82.542 1090
+ELIA 0.007 82.549 1091
+DEBBY 0.007 82.556 1092
+MAUDIE 0.007 82.564 1093
+JEANNA 0.007 82.571 1094
+DELILAH 0.007 82.578 1095
+CATRINA 0.007 82.585 1096
+SHONDA 0.007 82.592 1097
+HORTENCIA 0.007 82.599 1098
+THEODORA 0.007 82.606 1099
+TERESITA 0.007 82.613 1100
+ROBBIN 0.007 82.620 1101
+DANETTE 0.007 82.627 1102
+MARYJANE 0.007 82.634 1103
+FREDDIE 0.007 82.641 1104
+DELPHINE 0.007 82.648 1105
+BRIANNE 0.007 82.655 1106
+NILDA 0.007 82.662 1107
+DANNA 0.007 82.669 1108
+CINDI 0.007 82.676 1109
+BESS 0.007 82.683 1110
+IONA 0.007 82.690 1111
+HANNA 0.007 82.697 1112
+ARIEL 0.007 82.704 1113
+WINONA 0.007 82.711 1114
+VIDA 0.007 82.718 1115
+ROSITA 0.007 82.725 1116
+MARIANNA 0.007 82.731 1117
+WILLIAM 0.007 82.738 1118
+RACHEAL 0.007 82.745 1119
+GUILLERMINA 0.007 82.752 1120
+ELOISA 0.007 82.759 1121
+CELESTINE 0.007 82.766 1122
+CAREN 0.007 82.773 1123
+MALISSA 0.007 82.780 1124
+LONA 0.007 82.786 1125
+CHANTEL 0.007 82.793 1126
+SHELLIE 0.007 82.800 1127
+MARISELA 0.007 82.807 1128
+LEORA 0.007 82.814 1129
+AGATHA 0.007 82.820 1130
+SOLEDAD 0.007 82.827 1131
+MIGDALIA 0.007 82.834 1132
+IVETTE 0.007 82.840 1133
+CHRISTEN 0.007 82.847 1134
+ATHENA 0.007 82.854 1135
+JANEL 0.007 82.861 1136
+CHLOE 0.007 82.867 1137
+VEDA 0.007 82.874 1138
+PATTIE 0.007 82.881 1139
+TESSIE 0.007 82.887 1140
+TERA 0.007 82.894 1141
+MARILYNN 0.007 82.901 1142
+LUCRETIA 0.007 82.907 1143
+KARRIE 0.007 82.914 1144
+DINAH 0.007 82.920 1145
+DANIELA 0.007 82.927 1146
+ALECIA 0.007 82.934 1147
+ADELINA 0.007 82.940 1148
+VERNICE 0.007 82.947 1149
+SHIELA 0.007 82.953 1150
+PORTIA 0.007 82.960 1151
+MERRY 0.007 82.967 1152
+LASHAWN 0.007 82.973 1153
+DEVON 0.007 82.980 1154
+DARA 0.007 82.986 1155
+TAWANA 0.007 82.993 1156
+OMA 0.007 82.999 1157
+VERDA 0.007 83.006 1158
+CHRISTIN 0.007 83.012 1159
+ALENE 0.007 83.019 1160
+ZELLA 0.006 83.025 1161
+SANDI 0.006 83.032 1162
+RAFAELA 0.006 83.038 1163
+MAYA 0.006 83.045 1164
+KIRA 0.006 83.051 1165
+CANDIDA 0.006 83.058 1166
+ALVINA 0.006 83.064 1167
+SUZAN 0.006 83.071 1168
+SHAYLA 0.006 83.077 1169
+LYN 0.006 83.083 1170
+LETTIE 0.006 83.090 1171
+ALVA 0.006 83.096 1172
+SAMATHA 0.006 83.103 1173
+ORALIA 0.006 83.109 1174
+MATILDE 0.006 83.115 1175
+MADONNA 0.006 83.122 1176
+LARISSA 0.006 83.128 1177
+VESTA 0.006 83.134 1178
+RENITA 0.006 83.141 1179
+INDIA 0.006 83.147 1180
+DELOIS 0.006 83.153 1181
+SHANDA 0.006 83.159 1182
+PHILLIS 0.006 83.166 1183
+LORRI 0.006 83.172 1184
+ERLINDA 0.006 83.178 1185
+CRUZ 0.006 83.185 1186
+CATHRINE 0.006 83.191 1187
+BARB 0.006 83.197 1188
+ZOE 0.006 83.203 1189
+ISABELL 0.006 83.210 1190
+IONE 0.006 83.216 1191
+GISELA 0.006 83.222 1192
+CHARLIE 0.006 83.228 1193
+VALENCIA 0.006 83.235 1194
+ROXANNA 0.006 83.241 1195
+MAYME 0.006 83.247 1196
+KISHA 0.006 83.253 1197
+ELLIE 0.006 83.259 1198
+MELLISSA 0.006 83.266 1199
+DORRIS 0.006 83.272 1200
+DALIA 0.006 83.278 1201
+BELLA 0.006 83.284 1202
+ANNETTA 0.006 83.290 1203
+ZOILA 0.006 83.296 1204
+RETA 0.006 83.302 1205
+REINA 0.006 83.308 1206
+LAURETTA 0.006 83.315 1207
+KYLIE 0.006 83.321 1208
+CHRISTAL 0.006 83.327 1209
+PILAR 0.006 83.333 1210
+CHARLA 0.006 83.339 1211
+ELISSA 0.006 83.345 1212
+TIFFANI 0.006 83.351 1213
+TANA 0.006 83.357 1214
+PAULINA 0.006 83.363 1215
+LEOTA 0.006 83.369 1216
+BREANNA 0.006 83.375 1217
+JAYME 0.006 83.381 1218
+CARMEL 0.006 83.387 1219
+VERNELL 0.006 83.393 1220
+TOMASA 0.006 83.399 1221
+MANDI 0.006 83.405 1222
+DOMINGA 0.006 83.411 1223
+SANTA 0.006 83.417 1224
+MELODIE 0.006 83.423 1225
+LURA 0.006 83.429 1226
+ALEXA 0.006 83.435 1227
+TAMELA 0.006 83.441 1228
+RYAN 0.006 83.447 1229
+MIRNA 0.006 83.453 1230
+KERRIE 0.006 83.458 1231
+VENUS 0.006 83.464 1232
+NOEL 0.006 83.470 1233
+FELICITA 0.006 83.476 1234
+CRISTY 0.006 83.482 1235
+CARMELITA 0.006 83.488 1236
+BERNIECE 0.006 83.494 1237
+ANNEMARIE 0.006 83.500 1238
+TIARA 0.006 83.505 1239
+ROSEANNE 0.006 83.511 1240
+MISSY 0.006 83.517 1241
+CORI 0.006 83.523 1242
+ROXANA 0.006 83.529 1243
+PRICILLA 0.006 83.535 1244
+KRISTAL 0.006 83.540 1245
+JUNG 0.006 83.546 1246
+ELYSE 0.006 83.552 1247
+HAYDEE 0.006 83.558 1248
+ALETHA 0.006 83.564 1249
+BETTINA 0.006 83.569 1250
+MARGE 0.006 83.575 1251
+GILLIAN 0.006 83.581 1252
+FILOMENA 0.006 83.586 1253
+CHARLES 0.006 83.592 1254
+ZENAIDA 0.006 83.598 1255
+HARRIETTE 0.006 83.603 1256
+CARIDAD 0.006 83.609 1257
+VADA 0.006 83.615 1258
+UNA 0.006 83.620 1259
+ARETHA 0.006 83.626 1260
+PEARLINE 0.006 83.632 1261
+MARJORY 0.006 83.637 1262
+MARCELA 0.006 83.643 1263
+FLOR 0.006 83.648 1264
+EVETTE 0.006 83.654 1265
+ELOUISE 0.006 83.659 1266
+ALINA 0.006 83.665 1267
+TRINIDAD 0.006 83.671 1268
+DAVID 0.006 83.676 1269
+DAMARIS 0.006 83.682 1270
+CATHARINE 0.006 83.687 1271
+CARROLL 0.006 83.693 1272
+BELVA 0.006 83.698 1273
+NAKIA 0.005 83.704 1274
+MARLENA 0.005 83.709 1275
+LUANNE 0.005 83.715 1276
+LORINE 0.005 83.720 1277
+KARON 0.005 83.726 1278
+DORENE 0.005 83.731 1279
+DANITA 0.005 83.737 1280
+BRENNA 0.005 83.742 1281
+TATIANA 0.005 83.748 1282
+SAMMIE 0.005 83.753 1283
+LOUANN 0.005 83.759 1284
+LOREN 0.005 83.764 1285
+JULIANNA 0.005 83.770 1286
+ANDRIA 0.005 83.775 1287
+PHILOMENA 0.005 83.780 1288
+LUCILA 0.005 83.786 1289
+LEONORA 0.005 83.791 1290
+DOVIE 0.005 83.797 1291
+ROMONA 0.005 83.802 1292
+MIMI 0.005 83.808 1293
+JACQUELIN 0.005 83.813 1294
+GAYE 0.005 83.818 1295
+TONJA 0.005 83.824 1296
+MISTI 0.005 83.829 1297
+JOE 0.005 83.835 1298
+GENE 0.005 83.840 1299
+CHASTITY 0.005 83.845 1300
+STACIA 0.005 83.851 1301
+ROXANN 0.005 83.856 1302
+MICAELA 0.005 83.861 1303
+NIKITA 0.005 83.867 1304
+MEI 0.005 83.872 1305
+VELDA 0.005 83.877 1306
+MARLYS 0.005 83.882 1307
+JOHNNA 0.005 83.888 1308
+AURA 0.005 83.893 1309
+LAVERN 0.005 83.898 1310
+IVONNE 0.005 83.903 1311
+HAYLEY 0.005 83.909 1312
+NICKI 0.005 83.914 1313
+MAJORIE 0.005 83.919 1314
+HERLINDA 0.005 83.924 1315
+GEORGE 0.005 83.930 1316
+ALPHA 0.005 83.935 1317
+YADIRA 0.005 83.940 1318
+PERLA 0.005 83.945 1319
+GREGORIA 0.005 83.950 1320
+DANIEL 0.005 83.955 1321
+ANTONETTE 0.005 83.961 1322
+SHELLI 0.005 83.966 1323
+MOZELLE 0.005 83.971 1324
+MARIAH 0.005 83.976 1325
+JOELLE 0.005 83.981 1326
+CORDELIA 0.005 83.986 1327
+JOSETTE 0.005 83.992 1328
+CHIQUITA 0.005 83.997 1329
+TRISTA 0.005 84.002 1330
+LOUIS 0.005 84.007 1331
+LAQUITA 0.005 84.012 1332
+GEORGIANA 0.005 84.017 1333
+CANDI 0.005 84.022 1334
+SHANON 0.005 84.027 1335
+LONNIE 0.005 84.032 1336
+HILDEGARD 0.005 84.037 1337
+CECIL 0.005 84.042 1338
+VALENTINA 0.005 84.047 1339
+STEPHANY 0.005 84.052 1340
+MAGDA 0.005 84.057 1341
+KAROL 0.005 84.062 1342
+GERRY 0.005 84.067 1343
+GABRIELLA 0.005 84.072 1344
+TIANA 0.005 84.077 1345
+ROMA 0.005 84.082 1346
+RICHELLE 0.005 84.087 1347
+RAY 0.005 84.092 1348
+PRINCESS 0.005 84.097 1349
+OLETA 0.005 84.102 1350
+JACQUE 0.005 84.107 1351
+IDELLA 0.005 84.112 1352
+ALAINA 0.005 84.117 1353
+SUZANNA 0.005 84.122 1354
+JOVITA 0.005 84.127 1355
+BLAIR 0.005 84.132 1356
+TOSHA 0.005 84.137 1357
+RAVEN 0.005 84.142 1358
+NEREIDA 0.005 84.147 1359
+MARLYN 0.005 84.152 1360
+KYLA 0.005 84.157 1361
+JOSEPH 0.005 84.162 1362
+DELFINA 0.005 84.167 1363
+TENA 0.005 84.172 1364
+STEPHENIE 0.005 84.177 1365
+SABINA 0.005 84.182 1366
+NATHALIE 0.005 84.186 1367
+MARCELLE 0.005 84.191 1368
+GERTIE 0.005 84.196 1369
+DARLEEN 0.005 84.201 1370
+THEA 0.005 84.206 1371
+SHARONDA 0.005 84.211 1372
+SHANTEL 0.005 84.216 1373
+BELEN 0.005 84.221 1374
+VENESSA 0.005 84.225 1375
+ROSALINA 0.005 84.230 1376
+ONA 0.005 84.235 1377
+GENOVEVA 0.005 84.240 1378
+COREY 0.005 84.245 1379
+CLEMENTINE 0.005 84.250 1380
+ROSALBA 0.005 84.254 1381
+RENATE 0.005 84.259 1382
+RENATA 0.005 84.264 1383
+MI 0.005 84.269 1384
+IVORY 0.005 84.274 1385
+GEORGIANNA 0.005 84.278 1386
+FLOY 0.005 84.283 1387
+DORCAS 0.005 84.288 1388
+ARIANA 0.005 84.293 1389
+TYRA 0.005 84.298 1390
+THEDA 0.005 84.302 1391
+MARIAM 0.005 84.307 1392
+JULI 0.005 84.312 1393
+JESICA 0.005 84.317 1394
+DONNIE 0.005 84.321 1395
+VIKKI 0.005 84.326 1396
+VERLA 0.005 84.331 1397
+ROSELYN 0.005 84.336 1398
+MELVINA 0.005 84.340 1399
+JANNETTE 0.005 84.345 1400
+GINNY 0.005 84.350 1401
+DEBRAH 0.005 84.355 1402
+CORRIE 0.005 84.359 1403
+ASIA 0.005 84.364 1404
+VIOLETA 0.005 84.369 1405
+MYRTIS 0.005 84.374 1406
+LATRICIA 0.005 84.378 1407
+COLLETTE 0.005 84.383 1408
+CHARLEEN 0.005 84.388 1409
+ANISSA 0.005 84.392 1410
+VIVIANA 0.005 84.397 1411
+TWYLA 0.005 84.402 1412
+PRECIOUS 0.005 84.406 1413
+NEDRA 0.005 84.411 1414
+LATONIA 0.005 84.416 1415
+LAN 0.005 84.420 1416
+HELLEN 0.005 84.425 1417
+FABIOLA 0.005 84.430 1418
+ANNAMARIE 0.005 84.435 1419
+ADELL 0.005 84.439 1420
+SHARYN 0.005 84.444 1421
+CHANTAL 0.005 84.448 1422
+NIKI 0.005 84.453 1423
+MAUD 0.005 84.458 1424
+LIZETTE 0.005 84.462 1425
+LINDY 0.005 84.467 1426
+KIA 0.005 84.472 1427
+KESHA 0.005 84.476 1428
+JEANA 0.005 84.481 1429
+DANELLE 0.005 84.485 1430
+CHARLINE 0.005 84.490 1431
+CHANEL 0.005 84.495 1432
+CARROL 0.005 84.499 1433
+VALORIE 0.005 84.504 1434
+LIA 0.005 84.508 1435
+DORTHA 0.005 84.513 1436
+CRISTAL 0.005 84.518 1437
+SUNNY 0.005 84.522 1438
+LEONE 0.005 84.527 1439
+LEILANI 0.005 84.531 1440
+GERRI 0.005 84.536 1441
+DEBI 0.005 84.540 1442
+ANDRA 0.005 84.545 1443
+KESHIA 0.005 84.549 1444
+IMA 0.005 84.554 1445
+EULALIA 0.005 84.558 1446
+EASTER 0.005 84.563 1447
+DULCE 0.005 84.568 1448
+NATIVIDAD 0.004 84.572 1449
+LINNIE 0.004 84.577 1450
+KAMI 0.004 84.581 1451
+GEORGIE 0.004 84.586 1452
+CATINA 0.004 84.590 1453
+BROOK 0.004 84.594 1454
+ALDA 0.004 84.599 1455
+WINNIFRED 0.004 84.603 1456
+SHARLA 0.004 84.608 1457
+RUTHANN 0.004 84.612 1458
+MEAGHAN 0.004 84.617 1459
+MAGDALENE 0.004 84.621 1460
+LISSETTE 0.004 84.626 1461
+ADELAIDA 0.004 84.630 1462
+VENITA 0.004 84.635 1463
+TRENA 0.004 84.639 1464
+SHIRLENE 0.004 84.643 1465
+SHAMEKA 0.004 84.648 1466
+ELIZEBETH 0.004 84.652 1467
+DIAN 0.004 84.657 1468
+SHANTA 0.004 84.661 1469
+MICKEY 0.004 84.666 1470
+LATOSHA 0.004 84.670 1471
+CARLOTTA 0.004 84.674 1472
+WINDY 0.004 84.679 1473
+SOON 0.004 84.683 1474
+ROSINA 0.004 84.687 1475
+MARIANN 0.004 84.692 1476
+LEISA 0.004 84.696 1477
+JONNIE 0.004 84.701 1478
+DAWNA 0.004 84.705 1479
+CATHIE 0.004 84.709 1480
+BILLY 0.004 84.714 1481
+ASTRID 0.004 84.718 1482
+SIDNEY 0.004 84.722 1483
+LAUREEN 0.004 84.726 1484
+JANEEN 0.004 84.731 1485
+HOLLI 0.004 84.735 1486
+FAWN 0.004 84.739 1487
+VICKEY 0.004 84.744 1488
+TERESSA 0.004 84.748 1489
+SHANTE 0.004 84.752 1490
+RUBYE 0.004 84.756 1491
+MARCELINA 0.004 84.761 1492
+CHANDA 0.004 84.765 1493
+CARY 0.004 84.769 1494
+TERESE 0.004 84.774 1495
+SCARLETT 0.004 84.778 1496
+MARTY 0.004 84.782 1497
+MARNIE 0.004 84.786 1498
+LULU 0.004 84.790 1499
+LISETTE 0.004 84.795 1500
+JENIFFER 0.004 84.799 1501
+ELENOR 0.004 84.803 1502
+DORINDA 0.004 84.807 1503
+DONITA 0.004 84.812 1504
+CARMAN 0.004 84.816 1505
+BERNITA 0.004 84.820 1506
+ALTAGRACIA 0.004 84.824 1507
+ALETA 0.004 84.829 1508
+ADRIANNA 0.004 84.833 1509
+ZORAIDA 0.004 84.837 1510
+RONNIE 0.004 84.841 1511
+NICOLA 0.004 84.845 1512
+LYNDSEY 0.004 84.850 1513
+KENDALL 0.004 84.854 1514
+JANINA 0.004 84.858 1515
+CHRISSY 0.004 84.862 1516
+AMI 0.004 84.867 1517
+STARLA 0.004 84.871 1518
+PHYLIS 0.004 84.875 1519
+PHUONG 0.004 84.879 1520
+KYRA 0.004 84.883 1521
+CHARISSE 0.004 84.887 1522
+BLANCH 0.004 84.892 1523
+SANJUANITA 0.004 84.896 1524
+RONA 0.004 84.900 1525
+NANCI 0.004 84.904 1526
+MARILEE 0.004 84.908 1527
+MARANDA 0.004 84.912 1528
+CORY 0.004 84.916 1529
+BRIGETTE 0.004 84.921 1530
+SANJUANA 0.004 84.925 1531
+MARITA 0.004 84.929 1532
+KASSANDRA 0.004 84.933 1533
+JOYCELYN 0.004 84.937 1534
+IRA 0.004 84.941 1535
+FELIPA 0.004 84.945 1536
+CHELSIE 0.004 84.949 1537
+BONNY 0.004 84.954 1538
+MIREYA 0.004 84.958 1539
+LORENZA 0.004 84.962 1540
+KYONG 0.004 84.966 1541
+ILEANA 0.004 84.970 1542
+CANDELARIA 0.004 84.974 1543
+TONY 0.004 84.978 1544
+TOBY 0.004 84.982 1545
+SHERIE 0.004 84.986 1546
+OK 0.004 84.990 1547
+MARK 0.004 84.994 1548
+LUCIE 0.004 84.998 1549
+LEATRICE 0.004 85.002 1550
+LAKESHIA 0.004 85.006 1551
+GERDA 0.004 85.010 1552
+EDIE 0.004 85.014 1553
+BAMBI 0.004 85.018 1554
+MARYLIN 0.004 85.023 1555
+LAVON 0.004 85.027 1556
+HORTENSE 0.004 85.031 1557
+GARNET 0.004 85.035 1558
+EVIE 0.004 85.039 1559
+TRESSA 0.004 85.043 1560
+SHAYNA 0.004 85.047 1561
+LAVINA 0.004 85.051 1562
+KYUNG 0.004 85.055 1563
+JEANETTA 0.004 85.059 1564
+SHERRILL 0.004 85.062 1565
+SHARA 0.004 85.066 1566
+PHYLISS 0.004 85.070 1567
+MITTIE 0.004 85.074 1568
+ANABEL 0.004 85.078 1569
+ALESIA 0.004 85.082 1570
+THUY 0.004 85.086 1571
+TAWANDA 0.004 85.090 1572
+RICHARD 0.004 85.094 1573
+JOANIE 0.004 85.098 1574
+TIFFANIE 0.004 85.102 1575
+LASHANDA 0.004 85.106 1576
+KARISSA 0.004 85.110 1577
+ENRIQUETA 0.004 85.114 1578
+DARIA 0.004 85.117 1579
+DANIELLA 0.004 85.121 1580
+CORINNA 0.004 85.125 1581
+ALANNA 0.004 85.129 1582
+ABBEY 0.004 85.133 1583
+ROXANE 0.004 85.137 1584
+ROSEANNA 0.004 85.141 1585
+MAGNOLIA 0.004 85.145 1586
+LIDA 0.004 85.148 1587
+KYLE 0.004 85.152 1588
+JOELLEN 0.004 85.156 1589
+ERA 0.004 85.160 1590
+CORAL 0.004 85.164 1591
+CARLEEN 0.004 85.168 1592
+TRESA 0.004 85.172 1593
+PEGGIE 0.004 85.175 1594
+NOVELLA 0.004 85.179 1595
+NILA 0.004 85.183 1596
+MAYBELLE 0.004 85.187 1597
+JENELLE 0.004 85.191 1598
+CARINA 0.004 85.195 1599
+NOVA 0.004 85.198 1600
+MELINA 0.004 85.202 1601
+MARQUERITE 0.004 85.206 1602
+MARGARETTE 0.004 85.210 1603
+JOSEPHINA 0.004 85.214 1604
+EVONNE 0.004 85.217 1605
+DEVIN 0.004 85.221 1606
+CINTHIA 0.004 85.225 1607
+ALBINA 0.004 85.229 1608
+TOYA 0.004 85.233 1609
+TAWNYA 0.004 85.236 1610
+SHERITA 0.004 85.240 1611
+SANTOS 0.004 85.244 1612
+MYRIAM 0.004 85.248 1613
+LIZABETH 0.004 85.251 1614
+LISE 0.004 85.255 1615
+KEELY 0.004 85.259 1616
+JENNI 0.004 85.263 1617
+GISELLE 0.004 85.266 1618
+CHERYLE 0.004 85.270 1619
+ARDITH 0.004 85.274 1620
+ARDIS 0.004 85.278 1621
+ALESHA 0.004 85.282 1622
+ADRIANE 0.004 85.285 1623
+SHAINA 0.004 85.289 1624
+LINNEA 0.004 85.293 1625
+KAROLYN 0.004 85.297 1626
+HONG 0.004 85.300 1627
+FLORIDA 0.004 85.304 1628
+FELISHA 0.004 85.308 1629
+DORI 0.004 85.311 1630
+DARCI 0.004 85.315 1631
+ARTIE 0.004 85.319 1632
+ARMIDA 0.004 85.323 1633
+ZOLA 0.004 85.326 1634
+XIOMARA 0.004 85.330 1635
+VERGIE 0.004 85.334 1636
+SHAMIKA 0.004 85.338 1637
+NENA 0.004 85.341 1638
+NANNETTE 0.004 85.345 1639
+MAXIE 0.004 85.349 1640
+LOVIE 0.004 85.352 1641
+JEANE 0.004 85.356 1642
+JAIMIE 0.004 85.360 1643
+INGE 0.004 85.363 1644
+FARRAH 0.004 85.367 1645
+ELAINA 0.004 85.371 1646
+CAITLYN 0.004 85.375 1647
+STARR 0.004 85.378 1648
+FELICITAS 0.004 85.382 1649
+CHERLY 0.004 85.386 1650
+CARYL 0.004 85.389 1651
+YOLONDA 0.004 85.393 1652
+YASMIN 0.004 85.397 1653
+TEENA 0.004 85.400 1654
+PRUDENCE 0.004 85.404 1655
+PENNIE 0.004 85.407 1656
+NYDIA 0.004 85.411 1657
+MACKENZIE 0.004 85.415 1658
+ORPHA 0.004 85.418 1659
+MARVEL 0.004 85.422 1660
+LIZBETH 0.004 85.426 1661
+LAURETTE 0.004 85.429 1662
+JERRIE 0.004 85.433 1663
+HERMELINDA 0.004 85.436 1664
+CAROLEE 0.004 85.440 1665
+TIERRA 0.004 85.444 1666
+MIRIAN 0.004 85.447 1667
+META 0.004 85.451 1668
+MELONY 0.004 85.454 1669
+KORI 0.004 85.458 1670
+JENNETTE 0.004 85.462 1671
+JAMILA 0.004 85.465 1672
+ENA 0.004 85.469 1673
+ANH 0.004 85.472 1674
+YOSHIKO 0.004 85.476 1675
+SUSANNAH 0.004 85.479 1676
+SALINA 0.004 85.483 1677
+RHIANNON 0.004 85.486 1678
+JOLEEN 0.004 85.490 1679
+CRISTINE 0.004 85.494 1680
+ASHTON 0.004 85.497 1681
+ARACELY 0.004 85.501 1682
+TOMEKA 0.004 85.504 1683
+SHALONDA 0.004 85.508 1684
+MARTI 0.004 85.511 1685
+LACIE 0.004 85.515 1686
+KALA 0.004 85.518 1687
+JADA 0.004 85.522 1688
+ILSE 0.004 85.525 1689
+HAILEY 0.004 85.529 1690
+BRITTANI 0.004 85.532 1691
+ZONA 0.003 85.536 1692
+SYBLE 0.003 85.539 1693
+SHERRYL 0.003 85.543 1694
+RANDY 0.003 85.546 1695
+NIDIA 0.003 85.550 1696
+MARLO 0.003 85.553 1697
+KANDICE 0.003 85.557 1698
+KANDI 0.003 85.560 1699
+DEB 0.003 85.564 1700
+DEAN 0.003 85.567 1701
+AMERICA 0.003 85.571 1702
+ALYCIA 0.003 85.574 1703
+TOMMY 0.003 85.578 1704
+RONNA 0.003 85.581 1705
+NORENE 0.003 85.585 1706
+MERCY 0.003 85.588 1707
+JOSE 0.003 85.591 1708
+INGEBORG 0.003 85.595 1709
+GIOVANNA 0.003 85.598 1710
+GEMMA 0.003 85.602 1711
+CHRISTEL 0.003 85.605 1712
+AUDRY 0.003 85.609 1713
+ZORA 0.003 85.612 1714
+VITA 0.003 85.616 1715
+VAN 0.003 85.619 1716
+TRISH 0.003 85.622 1717
+STEPHAINE 0.003 85.626 1718
+SHIRLEE 0.003 85.629 1719
+SHANIKA 0.003 85.633 1720
+MELONIE 0.003 85.636 1721
+MAZIE 0.003 85.639 1722
+JAZMIN 0.003 85.643 1723
+INGA 0.003 85.646 1724
+HOA 0.003 85.650 1725
+HETTIE 0.003 85.653 1726
+GERALYN 0.003 85.657 1727
+FONDA 0.003 85.660 1728
+ESTRELLA 0.003 85.663 1729
+ADELLA 0.003 85.667 1730
+SU 0.003 85.670 1731
+SARITA 0.003 85.674 1732
+RINA 0.003 85.677 1733
+MILISSA 0.003 85.680 1734
+MARIBETH 0.003 85.684 1735
+GOLDA 0.003 85.687 1736
+EVON 0.003 85.691 1737
+ETHELYN 0.003 85.694 1738
+ENEDINA 0.003 85.697 1739
+CHERISE 0.003 85.701 1740
+CHANA 0.003 85.704 1741
+VELVA 0.003 85.708 1742
+TAWANNA 0.003 85.711 1743
+SADE 0.003 85.714 1744
+MIRTA 0.003 85.718 1745
+LI 0.003 85.721 1746
+KARIE 0.003 85.724 1747
+JACINTA 0.003 85.728 1748
+ELNA 0.003 85.731 1749
+DAVINA 0.003 85.734 1750
+CIERRA 0.003 85.738 1751
+ASHLIE 0.003 85.741 1752
+ALBERTHA 0.003 85.744 1753
+TANESHA 0.003 85.748 1754
+STEPHANI 0.003 85.751 1755
+NELLE 0.003 85.754 1756
+MINDI 0.003 85.758 1757
+LU 0.003 85.761 1758
+LORINDA 0.003 85.764 1759
+LARUE 0.003 85.768 1760
+FLORENE 0.003 85.771 1761
+DEMETRA 0.003 85.774 1762
+DEDRA 0.003 85.778 1763
+CIARA 0.003 85.781 1764
+CHANTELLE 0.003 85.784 1765
+ASHLY 0.003 85.788 1766
+SUZY 0.003 85.791 1767
+ROSALVA 0.003 85.794 1768
+NOELIA 0.003 85.798 1769
+LYDA 0.003 85.801 1770
+LEATHA 0.003 85.804 1771
+KRYSTYNA 0.003 85.808 1772
+KRISTAN 0.003 85.811 1773
+KARRI 0.003 85.814 1774
+DARLINE 0.003 85.817 1775
+DARCIE 0.003 85.821 1776
+CINDA 0.003 85.824 1777
+CHEYENNE 0.003 85.827 1778
+CHERRIE 0.003 85.831 1779
+AWILDA 0.003 85.834 1780
+ALMEDA 0.003 85.837 1781
+ROLANDA 0.003 85.840 1782
+LANETTE 0.003 85.844 1783
+JERILYN 0.003 85.847 1784
+GISELE 0.003 85.850 1785
+EVALYN 0.003 85.854 1786
+CYNDI 0.003 85.857 1787
+CLETA 0.003 85.860 1788
+CARIN 0.003 85.863 1789
+ZINA 0.003 85.867 1790
+ZENA 0.003 85.870 1791
+VELIA 0.003 85.873 1792
+TANIKA 0.003 85.876 1793
+PAUL 0.003 85.880 1794
+CHARISSA 0.003 85.883 1795
+THOMAS 0.003 85.886 1796
+TALIA 0.003 85.889 1797
+MARGARETE 0.003 85.892 1798
+LAVONDA 0.003 85.896 1799
+KAYLEE 0.003 85.899 1800
+KATHLENE 0.003 85.902 1801
+JONNA 0.003 85.905 1802
+IRENA 0.003 85.908 1803
+ILONA 0.003 85.912 1804
+IDALIA 0.003 85.915 1805
+CANDIS 0.003 85.918 1806
+CANDANCE 0.003 85.921 1807
+BRANDEE 0.003 85.924 1808
+ANITRA 0.003 85.928 1809
+ALIDA 0.003 85.931 1810
+SIGRID 0.003 85.934 1811
+NICOLETTE 0.003 85.937 1812
+MARYJO 0.003 85.940 1813
+LINETTE 0.003 85.944 1814
+HEDWIG 0.003 85.947 1815
+CHRISTIANA 0.003 85.950 1816
+CASSIDY 0.003 85.953 1817
+ALEXIA 0.003 85.956 1818
+TRESSIE 0.003 85.959 1819
+MODESTA 0.003 85.962 1820
+LUPITA 0.003 85.966 1821
+LITA 0.003 85.969 1822
+GLADIS 0.003 85.972 1823
+EVELIA 0.003 85.975 1824
+DAVIDA 0.003 85.978 1825
+CHERRI 0.003 85.981 1826
+CECILY 0.003 85.984 1827
+ASHELY 0.003 85.988 1828
+ANNABEL 0.003 85.991 1829
+AGUSTINA 0.003 85.994 1830
+WANITA 0.003 85.997 1831
+SHIRLY 0.003 86.000 1832
+ROSAURA 0.003 86.003 1833
+HULDA 0.003 86.006 1834
+EUN 0.003 86.009 1835
+BAILEY 0.003 86.013 1836
+YETTA 0.003 86.016 1837
+VERONA 0.003 86.019 1838
+THOMASINA 0.003 86.022 1839
+SIBYL 0.003 86.025 1840
+SHANNAN 0.003 86.028 1841
+MECHELLE 0.003 86.031 1842
+LUE 0.003 86.034 1843
+LEANDRA 0.003 86.037 1844
+LANI 0.003 86.040 1845
+KYLEE 0.003 86.043 1846
+KANDY 0.003 86.046 1847
+JOLYNN 0.003 86.049 1848
+FERNE 0.003 86.053 1849
+EBONI 0.003 86.056 1850
+CORENE 0.003 86.059 1851
+ALYSIA 0.003 86.062 1852
+ZULA 0.003 86.065 1853
+NADA 0.003 86.068 1854
+MOIRA 0.003 86.071 1855
+LYNDSAY 0.003 86.074 1856
+LORRETTA 0.003 86.077 1857
+JUAN 0.003 86.080 1858
+JAMMIE 0.003 86.083 1859
+HORTENSIA 0.003 86.086 1860
+GAYNELL 0.003 86.089 1861
+CAMERON 0.003 86.092 1862
+ADRIA 0.003 86.095 1863
+VINA 0.003 86.098 1864
+VICENTA 0.003 86.101 1865
+TANGELA 0.003 86.104 1866
+STEPHINE 0.003 86.107 1867
+NORINE 0.003 86.110 1868
+NELLA 0.003 86.113 1869
+LIANA 0.003 86.116 1870
+LESLEE 0.003 86.119 1871
+KIMBERELY 0.003 86.122 1872
+ILIANA 0.003 86.125 1873
+GLORY 0.003 86.128 1874
+FELICA 0.003 86.131 1875
+EMOGENE 0.003 86.134 1876
+ELFRIEDE 0.003 86.137 1877
+EDEN 0.003 86.140 1878
+EARTHA 0.003 86.144 1879
+CARMA 0.003 86.147 1880
+BEA 0.003 86.150 1881
+OCIE 0.003 86.153 1882
+MARRY 0.003 86.156 1883
+LENNIE 0.003 86.158 1884
+KIARA 0.003 86.161 1885
+JACALYN 0.003 86.164 1886
+CARLOTA 0.003 86.167 1887
+ARIELLE 0.003 86.170 1888
+YU 0.003 86.173 1889
+STAR 0.003 86.176 1890
+OTILIA 0.003 86.179 1891
+KIRSTIN 0.003 86.182 1892
+KACEY 0.003 86.185 1893
+JOHNETTA 0.003 86.188 1894
+JOEY 0.003 86.191 1895
+JOETTA 0.003 86.194 1896
+JERALDINE 0.003 86.197 1897
+JAUNITA 0.003 86.200 1898
+ELANA 0.003 86.203 1899
+DORTHEA 0.003 86.206 1900
+CAMI 0.003 86.209 1901
+AMADA 0.003 86.212 1902
+ADELIA 0.003 86.215 1903
+VERNITA 0.003 86.218 1904
+TAMAR 0.003 86.221 1905
+SIOBHAN 0.003 86.223 1906
+RENEA 0.003 86.226 1907
+RASHIDA 0.003 86.229 1908
+OUIDA 0.003 86.232 1909
+ODELL 0.003 86.235 1910
+NILSA 0.003 86.238 1911
+MERYL 0.003 86.241 1912
+KRISTYN 0.003 86.244 1913
+JULIETA 0.003 86.247 1914
+DANICA 0.003 86.250 1915
+BREANNE 0.003 86.253 1916
+AUREA 0.003 86.256 1917
+ANGLEA 0.003 86.259 1918
+SHERRON 0.003 86.261 1919
+ODETTE 0.003 86.264 1920
+MALIA 0.003 86.267 1921
+LORELEI 0.003 86.270 1922
+LIN 0.003 86.273 1923
+LEESA 0.003 86.276 1924
+KENNA 0.003 86.279 1925
+KATHLYN 0.003 86.282 1926
+FIONA 0.003 86.285 1927
+CHARLETTE 0.003 86.287 1928
+SUZIE 0.003 86.290 1929
+SHANTELL 0.003 86.293 1930
+SABRA 0.003 86.296 1931
+RACQUEL 0.003 86.299 1932
+MYONG 0.003 86.302 1933
+MIRA 0.003 86.305 1934
+MARTINE 0.003 86.307 1935
+LUCIENNE 0.003 86.310 1936
+LAVADA 0.003 86.313 1937
+JULIANN 0.003 86.316 1938
+JOHNIE 0.003 86.319 1939
+ELVERA 0.003 86.322 1940
+DELPHIA 0.003 86.325 1941
+CLAIR 0.003 86.327 1942
+CHRISTIANE 0.003 86.330 1943
+CHAROLETTE 0.003 86.333 1944
+CARRI 0.003 86.336 1945
+AUGUSTINE 0.003 86.339 1946
+ASHA 0.003 86.342 1947
+ANGELLA 0.003 86.345 1948
+PAOLA 0.003 86.347 1949
+NINFA 0.003 86.350 1950
+LEDA 0.003 86.353 1951
+LAI 0.003 86.356 1952
+EDA 0.003 86.359 1953
+SUNSHINE 0.003 86.361 1954
+STEFANI 0.003 86.364 1955
+SHANELL 0.003 86.367 1956
+PALMA 0.003 86.370 1957
+MACHELLE 0.003 86.373 1958
+LISSA 0.003 86.375 1959
+KECIA 0.003 86.378 1960
+KATHRYNE 0.003 86.381 1961
+KARLENE 0.003 86.384 1962
+JULISSA 0.003 86.387 1963
+JETTIE 0.003 86.389 1964
+JENNIFFER 0.003 86.392 1965
+HUI 0.003 86.395 1966
+CORRINA 0.003 86.398 1967
+CHRISTOPHER 0.003 86.401 1968
+CAROLANN 0.003 86.403 1969
+ALENA 0.003 86.406 1970
+TESS 0.003 86.409 1971
+ROSARIA 0.003 86.412 1972
+MYRTICE 0.003 86.414 1973
+MARYLEE 0.003 86.417 1974
+LIANE 0.003 86.420 1975
+KENYATTA 0.003 86.423 1976
+JUDIE 0.003 86.426 1977
+JANEY 0.003 86.428 1978
+IN 0.003 86.431 1979
+ELMIRA 0.003 86.434 1980
+ELDORA 0.003 86.437 1981
+DENNA 0.003 86.439 1982
+CRISTI 0.003 86.442 1983
+CATHI 0.003 86.445 1984
+ZAIDA 0.003 86.448 1985
+VONNIE 0.003 86.450 1986
+VIVA 0.003 86.453 1987
+VERNIE 0.003 86.456 1988
+ROSALINE 0.003 86.459 1989
+MARIELA 0.003 86.461 1990
+LUCIANA 0.003 86.464 1991
+LESLI 0.003 86.467 1992
+KARAN 0.003 86.469 1993
+FELICE 0.003 86.472 1994
+DENEEN 0.003 86.475 1995
+ADINA 0.003 86.478 1996
+WYNONA 0.003 86.480 1997
+TARSHA 0.003 86.483 1998
+SHERON 0.003 86.486 1999
+SHASTA 0.003 86.488 2000
+SHANITA 0.003 86.491 2001
+SHANI 0.003 86.494 2002
+SHANDRA 0.003 86.497 2003
+RANDA 0.003 86.499 2004
+PINKIE 0.003 86.502 2005
+PARIS 0.003 86.505 2006
+NELIDA 0.003 86.507 2007
+MARILOU 0.003 86.510 2008
+LYLA 0.003 86.513 2009
+LAURENE 0.003 86.515 2010
+LACI 0.003 86.518 2011
+JOI 0.003 86.521 2012
+JANENE 0.003 86.524 2013
+DOROTHA 0.003 86.526 2014
+DANIELE 0.003 86.529 2015
+DANI 0.003 86.532 2016
+CAROLYNN 0.003 86.534 2017
+CARLYN 0.003 86.537 2018
+BERENICE 0.003 86.540 2019
+AYESHA 0.003 86.542 2020
+ANNELIESE 0.003 86.545 2021
+ALETHEA 0.003 86.548 2022
+THERSA 0.003 86.551 2023
+TAMIKO 0.003 86.553 2024
+RUFINA 0.003 86.556 2025
+OLIVA 0.003 86.559 2026
+MOZELL 0.003 86.561 2027
+MARYLYN 0.003 86.564 2028
+MADISON 0.003 86.567 2029
+KRISTIAN 0.003 86.569 2030
+KATHYRN 0.003 86.572 2031
+KASANDRA 0.003 86.575 2032
+KANDACE 0.003 86.577 2033
+JANAE 0.003 86.580 2034
+GABRIEL 0.003 86.583 2035
+DOMENICA 0.003 86.585 2036
+DEBBRA 0.003 86.588 2037
+DANNIELLE 0.003 86.591 2038
+CHUN 0.003 86.593 2039
+BUFFY 0.003 86.596 2040
+BARBIE 0.003 86.599 2041
+ARCELIA 0.003 86.601 2042
+AJA 0.003 86.604 2043
+ZENOBIA 0.003 86.607 2044
+SHAREN 0.003 86.609 2045
+SHAREE 0.003 86.612 2046
+PATRICK 0.003 86.614 2047
+PAGE 0.003 86.617 2048
+MY 0.003 86.620 2049
+LAVINIA 0.003 86.622 2050
+KUM 0.003 86.625 2051
+KACIE 0.003 86.628 2052
+JACKELINE 0.003 86.630 2053
+HUONG 0.003 86.633 2054
+FELISA 0.003 86.636 2055
+EMELIA 0.003 86.638 2056
+ELEANORA 0.003 86.641 2057
+CYTHIA 0.003 86.644 2058
+CRISTIN 0.003 86.646 2059
+CLYDE 0.003 86.649 2060
+CLARIBEL 0.003 86.651 2061
+CARON 0.003 86.654 2062
+ANASTACIA 0.003 86.657 2063
+ZULMA 0.003 86.659 2064
+ZANDRA 0.003 86.662 2065
+YOKO 0.003 86.665 2066
+TENISHA 0.003 86.667 2067
+SUSANN 0.003 86.670 2068
+SHERILYN 0.003 86.672 2069
+SHAY 0.003 86.675 2070
+SHAWANDA 0.003 86.678 2071
+SABINE 0.003 86.680 2072
+ROMANA 0.003 86.683 2073
+MATHILDA 0.003 86.685 2074
+LINSEY 0.003 86.688 2075
+KEIKO 0.003 86.691 2076
+JOANA 0.003 86.693 2077
+ISELA 0.003 86.696 2078
+GRETTA 0.003 86.698 2079
+GEORGETTA 0.003 86.701 2080
+EUGENIE 0.003 86.704 2081
+DUSTY 0.003 86.706 2082
+DESIRAE 0.003 86.709 2083
+DELORA 0.003 86.711 2084
+CORAZON 0.003 86.714 2085
+ANTONINA 0.003 86.717 2086
+ANIKA 0.003 86.719 2087
+WILLENE 0.003 86.722 2088
+TRACEE 0.003 86.724 2089
+TAMATHA 0.003 86.727 2090
+REGAN 0.003 86.730 2091
+NICHELLE 0.003 86.732 2092
+MICKIE 0.003 86.735 2093
+MAEGAN 0.003 86.737 2094
+LUANA 0.003 86.740 2095
+LANITA 0.003 86.742 2096
+KELSIE 0.003 86.745 2097
+EDELMIRA 0.003 86.748 2098
+BREE 0.003 86.750 2099
+AFTON 0.003 86.753 2100
+TEODORA 0.003 86.755 2101
+TAMIE 0.003 86.758 2102
+SHENA 0.003 86.760 2103
+MEG 0.003 86.763 2104
+LINH 0.003 86.765 2105
+KELI 0.003 86.768 2106
+KACI 0.003 86.771 2107
+DANYELLE 0.003 86.773 2108
+BRITT 0.003 86.776 2109
+ARLETTE 0.003 86.778 2110
+ALBERTINE 0.003 86.781 2111
+ADELLE 0.003 86.783 2112
+TIFFINY 0.003 86.786 2113
+STORMY 0.003 86.788 2114
+SIMONA 0.003 86.791 2115
+NUMBERS 0.003 86.793 2116
+NICOLASA 0.003 86.796 2117
+NICHOL 0.003 86.798 2118
+NIA 0.003 86.801 2119
+NAKISHA 0.003 86.803 2120
+MEE 0.003 86.806 2121
+MAIRA 0.003 86.808 2122
+LOREEN 0.003 86.811 2123
+KIZZY 0.003 86.813 2124
+JOHNNY 0.003 86.816 2125
+JAY 0.003 86.818 2126
+FALLON 0.003 86.821 2127
+CHRISTENE 0.003 86.823 2128
+BOBBYE 0.003 86.826 2129
+ANTHONY 0.003 86.828 2130
+YING 0.002 86.831 2131
+VINCENZA 0.002 86.833 2132
+TANJA 0.002 86.836 2133
+RUBIE 0.002 86.838 2134
+RONI 0.002 86.841 2135
+QUEENIE 0.002 86.843 2136
+MARGARETT 0.002 86.846 2137
+KIMBERLI 0.002 86.848 2138
+IRMGARD 0.002 86.851 2139
+IDELL 0.002 86.853 2140
+HILMA 0.002 86.856 2141
+EVELINA 0.002 86.858 2142
+ESTA 0.002 86.861 2143
+EMILEE 0.002 86.863 2144
+DENNISE 0.002 86.866 2145
+DANIA 0.002 86.868 2146
+CARL 0.002 86.871 2147
+CARIE 0.002 86.873 2148
+ANTONIO 0.002 86.876 2149
+WAI 0.002 86.878 2150
+SANG 0.002 86.881 2151
+RISA 0.002 86.883 2152
+RIKKI 0.002 86.885 2153
+PARTICIA 0.002 86.888 2154
+MUI 0.002 86.890 2155
+MASAKO 0.002 86.893 2156
+MARIO 0.002 86.895 2157
+LUVENIA 0.002 86.898 2158
+LOREE 0.002 86.900 2159
+LONI 0.002 86.903 2160
+LIEN 0.002 86.905 2161
+KEVIN 0.002 86.907 2162
+GIGI 0.002 86.910 2163
+FLORENCIA 0.002 86.912 2164
+DORIAN 0.002 86.915 2165
+DENITA 0.002 86.917 2166
+DALLAS 0.002 86.920 2167
+CHI 0.002 86.922 2168
+BILLYE 0.002 86.925 2169
+ALEXANDER 0.002 86.927 2170
+TOMIKA 0.002 86.929 2171
+SHARITA 0.002 86.932 2172
+RANA 0.002 86.934 2173
+NIKOLE 0.002 86.937 2174
+NEOMA 0.002 86.939 2175
+MARGARITE 0.002 86.942 2176
+MADALYN 0.002 86.944 2177
+LUCINA 0.002 86.946 2178
+LAILA 0.002 86.949 2179
+KALI 0.002 86.951 2180
+JENETTE 0.002 86.954 2181
+GABRIELE 0.002 86.956 2182
+EVELYNE 0.002 86.958 2183
+ELENORA 0.002 86.961 2184
+CLEMENTINA 0.002 86.963 2185
+ALEJANDRINA 0.002 86.966 2186
+ZULEMA 0.002 86.968 2187
+VIOLETTE 0.002 86.971 2188
+VANNESSA 0.002 86.973 2189
+THRESA 0.002 86.975 2190
+RETTA 0.002 86.978 2191
+PIA 0.002 86.980 2192
+PATIENCE 0.002 86.982 2193
+NOELLA 0.002 86.985 2194
+NICKIE 0.002 86.987 2195
+JONELL 0.002 86.990 2196
+DELTA 0.002 86.992 2197
+CHUNG 0.002 86.994 2198
+CHAYA 0.002 86.997 2199
+CAMELIA 0.002 86.999 2200
+BETHEL 0.002 87.002 2201
+ANYA 0.002 87.004 2202
+ANDREW 0.002 87.006 2203
+THANH 0.002 87.009 2204
+SUZANN 0.002 87.011 2205
+SPRING 0.002 87.013 2206
+SHU 0.002 87.016 2207
+MILA 0.002 87.018 2208
+LILLA 0.002 87.020 2209
+LAVERNA 0.002 87.023 2210
+KEESHA 0.002 87.025 2211
+KATTIE 0.002 87.028 2212
+GIA 0.002 87.030 2213
+GEORGENE 0.002 87.032 2214
+EVELINE 0.002 87.035 2215
+ESTELL 0.002 87.037 2216
+ELIZBETH 0.002 87.039 2217
+VIVIENNE 0.002 87.042 2218
+VALLIE 0.002 87.044 2219
+TRUDIE 0.002 87.046 2220
+STEPHANE 0.002 87.049 2221
+MICHEL 0.002 87.051 2222
+MAGALY 0.002 87.053 2223
+MADIE 0.002 87.056 2224
+KENYETTA 0.002 87.058 2225
+KARREN 0.002 87.060 2226
+JANETTA 0.002 87.063 2227
+HERMINE 0.002 87.065 2228
+HARMONY 0.002 87.067 2229
+DRUCILLA 0.002 87.069 2230
+DEBBI 0.002 87.072 2231
+CELESTINA 0.002 87.074 2232
+CANDIE 0.002 87.076 2233
+BRITNI 0.002 87.079 2234
+BECKIE 0.002 87.081 2235
+AMINA 0.002 87.083 2236
+ZITA 0.002 87.086 2237
+YUN 0.002 87.088 2238
+YOLANDE 0.002 87.090 2239
+VIVIEN 0.002 87.093 2240
+VERNETTA 0.002 87.095 2241
+TRUDI 0.002 87.097 2242
+SOMMER 0.002 87.099 2243
+PEARLE 0.002 87.102 2244
+PATRINA 0.002 87.104 2245
+OSSIE 0.002 87.106 2246
+NICOLLE 0.002 87.109 2247
+LOYCE 0.002 87.111 2248
+LETTY 0.002 87.113 2249
+LARISA 0.002 87.116 2250
+KATHARINA 0.002 87.118 2251
+JOSELYN 0.002 87.120 2252
+JONELLE 0.002 87.122 2253
+JENELL 0.002 87.125 2254
+IESHA 0.002 87.127 2255
+HEIDE 0.002 87.129 2256
+FLORINDA 0.002 87.132 2257
+FLORENTINA 0.002 87.134 2258
+FLO 0.002 87.136 2259
+ELODIA 0.002 87.138 2260
+DORINE 0.002 87.141 2261
+BRUNILDA 0.002 87.143 2262
+BRIGID 0.002 87.145 2263
+ASHLI 0.002 87.148 2264
+ARDELLA 0.002 87.150 2265
+TWANA 0.002 87.152 2266
+THU 0.002 87.154 2267
+TARAH 0.002 87.157 2268
+SUNG 0.002 87.159 2269
+SHEA 0.002 87.161 2270
+SHAVON 0.002 87.163 2271
+SHANE 0.002 87.166 2272
+SERINA 0.002 87.168 2273
+RAYNA 0.002 87.170 2274
+RAMONITA 0.002 87.173 2275
+NGA 0.002 87.175 2276
+MARGURITE 0.002 87.177 2277
+LUCRECIA 0.002 87.179 2278
+KOURTNEY 0.002 87.182 2279
+KATI 0.002 87.184 2280
+JESUS 0.002 87.186 2281
+JESENIA 0.002 87.188 2282
+DIAMOND 0.002 87.191 2283
+CRISTA 0.002 87.193 2284
+AYANA 0.002 87.195 2285
+ALICA 0.002 87.197 2286
+ALIA 0.002 87.200 2287
+VINNIE 0.002 87.202 2288
+SUELLEN 0.002 87.204 2289
+ROMELIA 0.002 87.206 2290
+RACHELL 0.002 87.209 2291
+PIPER 0.002 87.211 2292
+OLYMPIA 0.002 87.213 2293
+MICHIKO 0.002 87.215 2294
+KATHALEEN 0.002 87.217 2295
+JOLIE 0.002 87.220 2296
+JESSI 0.002 87.222 2297
+JANESSA 0.002 87.224 2298
+HANA 0.002 87.226 2299
+HA 0.002 87.229 2300
+ELEASE 0.002 87.231 2301
+CARLETTA 0.002 87.233 2302
+BRITANY 0.002 87.235 2303
+SHONA 0.002 87.238 2304
+SALOME 0.002 87.240 2305
+ROSAMOND 0.002 87.242 2306
+REGENA 0.002 87.244 2307
+RAINA 0.002 87.246 2308
+NGOC 0.002 87.249 2309
+NELIA 0.002 87.251 2310
+LOUVENIA 0.002 87.253 2311
+LESIA 0.002 87.255 2312
+LATRINA 0.002 87.257 2313
+LATICIA 0.002 87.260 2314
+LARHONDA 0.002 87.262 2315
+JINA 0.002 87.264 2316
+JACKI 0.002 87.266 2317
+HOLLIS 0.002 87.268 2318
+HOLLEY 0.002 87.271 2319
+EMMY 0.002 87.273 2320
+DEEANN 0.002 87.275 2321
+CORETTA 0.002 87.277 2322
+ARNETTA 0.002 87.279 2323
+VELVET 0.002 87.281 2324
+THALIA 0.002 87.284 2325
+SHANICE 0.002 87.286 2326
+NETA 0.002 87.288 2327
+MIKKI 0.002 87.290 2328
+MICKI 0.002 87.292 2329
+LONNA 0.002 87.294 2330
+LEANA 0.002 87.297 2331
+LASHUNDA 0.002 87.299 2332
+KILEY 0.002 87.301 2333
+JOYE 0.002 87.303 2334
+JACQULYN 0.002 87.305 2335
+IGNACIA 0.002 87.307 2336
+HYUN 0.002 87.310 2337
+HIROKO 0.002 87.312 2338
+HENRY 0.002 87.314 2339
+HENRIETTE 0.002 87.316 2340
+ELAYNE 0.002 87.318 2341
+DELINDA 0.002 87.320 2342
+DARNELL 0.002 87.323 2343
+DAHLIA 0.002 87.325 2344
+COREEN 0.002 87.327 2345
+CONSUELA 0.002 87.329 2346
+CONCHITA 0.002 87.331 2347
+CELINE 0.002 87.333 2348
+BABETTE 0.002 87.336 2349
+AYANNA 0.002 87.338 2350
+ANETTE 0.002 87.340 2351
+ALBERTINA 0.002 87.342 2352
+SKYE 0.002 87.344 2353
+SHAWNEE 0.002 87.346 2354
+SHANEKA 0.002 87.349 2355
+QUIANA 0.002 87.351 2356
+PAMELIA 0.002 87.353 2357
+MIN 0.002 87.355 2358
+MERRI 0.002 87.357 2359
+MERLENE 0.002 87.359 2360
+MARGIT 0.002 87.361 2361
+KIESHA 0.002 87.363 2362
+KIERA 0.002 87.366 2363
+KAYLENE 0.002 87.368 2364
+JODEE 0.002 87.370 2365
+JENISE 0.002 87.372 2366
+ERLENE 0.002 87.374 2367
+EMMIE 0.002 87.376 2368
+ELSE 0.002 87.378 2369
+DARYL 0.002 87.381 2370
+DALILA 0.002 87.383 2371
+DAISEY 0.002 87.385 2372
+CODY 0.002 87.387 2373
+CASIE 0.002 87.389 2374
+BELIA 0.002 87.391 2375
+BABARA 0.002 87.393 2376
+VERSIE 0.002 87.395 2377
+VANESA 0.002 87.398 2378
+SHELBA 0.002 87.400 2379
+SHAWNDA 0.002 87.402 2380
+SAM 0.002 87.404 2381
+NORMAN 0.002 87.406 2382
+NIKIA 0.002 87.408 2383
+NAOMA 0.002 87.410 2384
+MARNA 0.002 87.412 2385
+MARGERET 0.002 87.414 2386
+MADALINE 0.002 87.417 2387
+LAWANA 0.002 87.419 2388
+KINDRA 0.002 87.421 2389
+JUTTA 0.002 87.423 2390
+JAZMINE 0.002 87.425 2391
+JANETT 0.002 87.427 2392
+HANNELORE 0.002 87.429 2393
+GLENDORA 0.002 87.431 2394
+GERTRUD 0.002 87.433 2395
+GARNETT 0.002 87.435 2396
+FREEDA 0.002 87.438 2397
+FREDERICA 0.002 87.440 2398
+FLORANCE 0.002 87.442 2399
+FLAVIA 0.002 87.444 2400
+DENNIS 0.002 87.446 2401
+CARLINE 0.002 87.448 2402
+BEVERLEE 0.002 87.450 2403
+ANJANETTE 0.002 87.452 2404
+VALDA 0.002 87.454 2405
+TRINITY 0.002 87.456 2406
+TAMALA 0.002 87.459 2407
+STEVIE 0.002 87.461 2408
+SHONNA 0.002 87.463 2409
+SHA 0.002 87.465 2410
+SARINA 0.002 87.467 2411
+ONEIDA 0.002 87.469 2412
+MICAH 0.002 87.471 2413
+MERILYN 0.002 87.473 2414
+MARLEEN 0.002 87.475 2415
+LURLINE 0.002 87.477 2416
+LENNA 0.002 87.479 2417
+KATHERIN 0.002 87.481 2418
+JIN 0.002 87.483 2419
+JENI 0.002 87.485 2420
+HAE 0.002 87.488 2421
+GRACIA 0.002 87.490 2422
+GLADY 0.002 87.492 2423
+FARAH 0.002 87.494 2424
+ERIC 0.002 87.496 2425
+ENOLA 0.002 87.498 2426
+EMA 0.002 87.500 2427
+DOMINQUE 0.002 87.502 2428
+DEVONA 0.002 87.504 2429
+DELANA 0.002 87.506 2430
+CECILA 0.002 87.508 2431
+CAPRICE 0.002 87.510 2432
+ALYSHA 0.002 87.512 2433
+ALI 0.002 87.514 2434
+ALETHIA 0.002 87.517 2435
+VENA 0.002 87.519 2436
+THERESIA 0.002 87.521 2437
+TAWNY 0.002 87.523 2438
+SONG 0.002 87.525 2439
+SHAKIRA 0.002 87.527 2440
+SAMARA 0.002 87.529 2441
+SACHIKO 0.002 87.531 2442
+RACHELE 0.002 87.533 2443
+PAMELLA 0.002 87.535 2444
+NICKY 0.002 87.537 2445
+MARNI 0.002 87.539 2446
+MARIEL 0.002 87.541 2447
+MAREN 0.002 87.543 2448
+MALISA 0.002 87.545 2449
+LIGIA 0.002 87.547 2450
+LERA 0.002 87.549 2451
+LATORIA 0.002 87.551 2452
+LARAE 0.002 87.553 2453
+KIMBER 0.002 87.555 2454
+KATHERN 0.002 87.557 2455
+KAREY 0.002 87.559 2456
+JENNEFER 0.002 87.561 2457
+JANETH 0.002 87.563 2458
+HALINA 0.002 87.566 2459
+FREDIA 0.002 87.568 2460
+DELISA 0.002 87.570 2461
+DEBROAH 0.002 87.572 2462
+CIERA 0.002 87.574 2463
+CHIN 0.002 87.576 2464
+ANGELIKA 0.002 87.578 2465
+ANDREE 0.002 87.580 2466
+ALTHA 0.002 87.582 2467
+YEN 0.002 87.584 2468
+VIVAN
<TRUNCATED>
[02/21] incubator-usergrid git commit: USERGRID-871: refactor Gatling
load testing code
Posted by to...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
new file mode 100644
index 0000000..2823d95
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
@@ -0,0 +1,10 @@
+package org.apache.usergrid.enums
+
+/**
+ * Created by mdunker on 7/20/15.
+ */
+object AuthType {
+ val Anonymous = "anonymous"
+ val Token = "token"
+ val Basic = "basic"
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
new file mode 100644
index 0000000..9a4989a
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
@@ -0,0 +1,47 @@
+package org.apache.usergrid.enums
+
+/**
+ * Created by mdunker on 7/20/15.
+ */
+object ConfigProperties {
+ val Org = "org"
+ val App = "app"
+ val AdminUser = "adminUser"
+ val AdminPassword = "adminPassword"
+ val BaseUrl = "baseurl"
+ val AuthType = "authType"
+ val TokenType = "tokenType"
+ val SkipSetup = "skipSetup"
+ val CreateOrg = "createOrg"
+ val CreateApp = "createApp"
+ val LoadEntities = "loadEntities"
+ val ScenarioType = "scenarioType"
+ val RampUsers = "rampUsers"
+ val ConstantUsersPerSec = "constantUsersPerSec"
+ val ConstantUsersDuration = "constantUsersDuration"
+ val UserSeed = "userSeed"
+ val AppUser = "appUser"
+ val AppUserPassword = "appUserPassword"
+ val NumEntities = "numEntities"
+ val NumDevices = "numDevices"
+ val CollectionType = "collectionType"
+ val RampTime = "rampTime"
+ val Throttle = "throttle"
+ val RpsTarget = "rpsTarget"
+ val RpsRampTime = "rpsRampTime"
+ val HoldDuration = "holdDuration"
+ val PushNotifier = "pushNotifier"
+ val PushProvider = "pushProvider"
+ val EntityPrefix = "entityPrefix"
+ val EntityType = "entityType"
+ val EntitySeed = "entitySeed"
+ val SearchLimit = "searchLimit"
+ val SearchQuery = "searchQuery"
+ val EndConditionType = "endConditionType"
+ val EndMinutes = "endMinutes"
+ val EndRequestCount = "endRequestCount"
+ val Values = Seq(Org,App,AdminUser,AdminPassword,BaseUrl,AuthType,TokenType,SkipSetup,CreateOrg,CreateApp,LoadEntities,
+ ScenarioType,RampUsers,ConstantUsersPerSec,ConstantUsersDuration,UserSeed,AppUser,AppUserPassword,NumEntities,
+ NumDevices,CollectionType,RampTime,Throttle,RpsTarget,RpsRampTime,HoldDuration,PushNotifier,EntityPrefix,EntityType,
+ EntitySeed,SearchLimit,SearchQuery,EndConditionType,EndMinutes,EndRequestCount)
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EndConditionType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EndConditionType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EndConditionType.scala
new file mode 100644
index 0000000..4bbb9cc
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EndConditionType.scala
@@ -0,0 +1,9 @@
+package org.apache.usergrid.enums
+
+/**
+ * Created by mdunker on 7/21/15.
+ */
+object EndConditionType {
+ val MinutesElapsed = "minutesElapsed"
+ val RequestCount = "requestCount"
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
new file mode 100644
index 0000000..d17d280
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
@@ -0,0 +1,9 @@
+package org.apache.usergrid.enums
+
+/**
+ * Created by mdunker on 7/20/15.
+ */
+object EntityType {
+ val Trivial = "trivial"
+ val Basic = "basic"
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
new file mode 100644
index 0000000..52fcbc5
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
@@ -0,0 +1,9 @@
+package org.apache.usergrid.enums
+
+/**
+ * Created by mdunker on 7/20/15.
+ */
+object ScenarioType {
+ val GetAllByCursor = "getAllByCursor"
+ val NameRandomInfinite = "nameRandomInfinite"
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/enums/TokenType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/TokenType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/TokenType.scala
new file mode 100644
index 0000000..4d371e1
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/TokenType.scala
@@ -0,0 +1,10 @@
+package org.apache.usergrid.enums
+
+/**
+ * Created by mdunker on 7/20/15.
+ */
+object TokenType {
+ val None = "none"
+ val User = "user"
+ val Management = "management"
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
index aa8c614..8de995e 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
@@ -22,6 +22,8 @@ package org.apache.usergrid.helpers
import io.gatling.core.Predef._
import io.gatling.core.session._
import io.gatling.http.Predef._
+import org.apache.usergrid.enums._
+import org.apache.usergrid.settings.Settings
/**
* Helper object that will perform extractions
@@ -38,7 +40,6 @@ object Extractors {
}).saveAs(saveAsName)
}
-
/**
* tries to extract the cursor from the session, if it exists, it returns true. if it's the default, returns false
* @param nameInSession The name of the variable in the session
@@ -54,7 +55,7 @@ object Extractors {
*/
def maybeExtractEntities(saveAsName: String) = {
jsonPath("$..entities").ofType[Seq[Any]].transformOption(extract => {
- extract.orElse(Some(Seq()));
+ extract.orElse(Some(Seq()))
}).saveAs(saveAsName)
}
@@ -64,21 +65,69 @@ object Extractors {
* @return
*/
def sequenceHasElements(nameInSession: String): Expression[Boolean] = {
- session => session(nameInSession) != null && session(nameInSession).as[Seq[Any]].length > 0
+ session => session(nameInSession) != null && session(nameInSession).as[Seq[Any]].nonEmpty
}
-
- val ManagementToken: String = Setup.getManagementToken()
-
-
/**
* Get the management token for the admin username and password in settings, then inject it into the session
* under the variable "authToken"
* @return
*/
- def injectStaticTokenToSession(): Expression[Session] = {
- session => session.set("authToken", ManagementToken)
+ def injectManagementTokenIntoSession(): Expression[Session] = {
+ session => session.set("authToken", Setup.getManagementToken())
+ }
+
+ def injectUserTokenIntoSession(): Expression[Session] = {
+ session => session.set("authToken", Setup.getUserToken)
+ }
+
+ // handles different types of tokens
+ def injectTokenIntoSession(): Expression[Session] = {
+ session => session.set("authToken", Setup.getToken())
+ }
+
+ def injectAnonymousAuth(): Expression[Session] = {
+ session => session.set("authType", AuthType.Anonymous)
}
+ def injectBasicAuth(): Expression[Session] = {
+ session => session.set("authType", AuthType.Basic)
+ }
+
+ def injectTokenAuth(): Expression[Session] = {
+ session => session.set("authType", AuthType.Token)
+ }
+
+ // handles different types of auth
+ def injectAuthType(): Expression[Session] = {
+ session => session.set("authType", Settings.authType)
+ }
+
+ /*
+ def injectTokenToSession(authType: String, tokenType: String): Expression[Session] = {
+ session => {
+ if (authType == AuthType.Token && tokenType == TokenType.User) {
+ session.set("authToken", Setup.getUserToken)
+ } else if (authType == AuthType.Token && tokenType == TokenType.Management) {
+ session.set("authToken", Setup.getManagementToken())
+ } else {
+ session.set("authToken", "")
+ }
+ }
+ }
+
+ def injectAuth(authType: String, tokenType: String): Expression[Session] = {
+ session => {
+ if (authType == AuthType.Token && tokenType == TokenType.User) {
+ session.set("authToken", Setup.getUserToken)
+ } else if (authType == AuthType.Token && tokenType == TokenType.Management) {
+ session.set("authToken", Setup.getManagementToken())
+ } else {
+ session.set("authToken", "")
+ }
+ session.set("authType", authType)
+ }
+ }
+ */
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
index fb0bcde..776e0b9 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
@@ -29,111 +29,134 @@ import io.gatling.http.Predef._
import io.gatling.http.request.StringBody
import io.gatling.jsonpath.JsonPath
import org.apache.usergrid.datagenerators.FeederGenerator
+import org.apache.usergrid.enums.TokenType
import org.apache.usergrid.settings.{Settings, Headers}
import scala.collection.mutable.ArrayBuffer
+import scala.util.parsing.json.JSONObject
/**
* Classy class class.
*/
object Setup {
- var token:String = null
+ var managementToken:String = null
val client = new AsyncHttpClient()
+ def getToken(tokenUrl:String, username:String, password:String):String = {
+ val getToken = client
+ .preparePost(tokenUrl)
+ .setBody("{\"username\":\"" + username + "\",\"password\":\"" + password + "\",\"grant_type\":\"password\"}")
+ .setHeader("Cache-Control", "no-cache")
+ .setHeader("Content-Type", "application/json; charset=UTF-8")
+ .build()
+ val response = client.executeRequest(getToken).get()
+ val mapper = new ObjectMapper()
+ val tree = mapper.readTree(response.getResponseBody)
+ tree.get("access_token").asText()
+ }
+
+ def getManagementToken():String = {
+ if(managementToken == null) {
+ managementToken = getToken(Settings.baseUrl + "/management/token", Settings.adminUser, Settings.adminPassword)
+ println("Management token is "+managementToken)
+ }
+ managementToken
+ }
+
+ def getUserToken:String = {
+ getToken(Settings.baseAppUrl + "/token", Settings.appUser, Settings.appUserPassword)
+ }
+
+ def getToken():String = {
+ var token = ""
+ if (Settings.tokenType == TokenType.Management) token = getManagementToken()
+ if (Settings.tokenType == TokenType.User) token = getUserToken
+
+ token
+ }
+
def setupOrg(): Integer = {
val createOrgPost = client
.preparePost(Settings.baseUrl + "/management/organizations")
- .setHeader("Cache-Control", "no-cache")
+ .setHeader("Cache-Control", "no-cache")
.setHeader("Content-Type", "application/json; charset=UTF-8")
- .setBody("{\"organization\":\"" + Settings.org + "\",\"username\":\"" + Settings.admin + "\",\"name\":\"" + Settings.admin + "\",\"email\":\"" + Settings.admin + "@apigee.com\",\"password\":\"" + Settings.password + "\"}")
- .build()
+ .setBody(Utils.toJSONStr(Map(
+ "organization" -> Settings.org,
+ "username" -> Settings.adminUser,
+ "name" -> Settings.adminUser,
+ "email" -> (Settings.adminUser + "@apigee.com"),
+ "password" -> Settings.adminPassword
+ )))
+ .build()
+
val orgResponse = client.executeRequest(createOrgPost).get()
- printResponse("POST ORG",orgResponse.getStatusCode,orgResponse.getResponseBody())
- return orgResponse.getStatusCode
+
+ printResponse("POST ORG",orgResponse.getStatusCode,orgResponse.getResponseBody)
+
+ orgResponse.getStatusCode
}
- def setupApplication():Integer = {
- val authToken = getManagementToken()
+ def setupApplication(): Integer = {
+
val createAppPost = client
- .preparePost(Settings.baseUrl + "/management/organizations/"+Settings.org+"/applications")
- .setBody("{\"name\":\"" + Settings.app + "\"}")
+ .preparePost(Settings.baseUrl + "/management/organizations/" + Settings.org + "/applications")
+ .setBody(Utils.toJSONStr(Map("name" -> Settings.app)))
.setHeader("Cache-Control", "no-cache")
.setHeader("Content-Type", "application/json; charset=UTF-8")
- .setHeader("Authorization","Bearer "+authToken)
+ .setHeader("Authorization", "Bearer " + getManagementToken)
.build()
val appResponse = client.executeRequest(createAppPost).get();
- printResponse("POST Application",appResponse.getStatusCode, appResponse.getResponseBody())
- return appResponse.getStatusCode
+ val statusCode = appResponse.getStatusCode
+ printResponse("POST APP",statusCode, appResponse.getResponseBody)
+
+ statusCode
}
def setupNotifier():Integer = {
- val authToken = getManagementToken()
val createNotifier = client
.preparePost(Settings.baseAppUrl + "/notifiers")
- .setBody("{\"name\":\"" + Settings.pushNotifier + "\",\"provider\":\"" + Settings.pushProvider + "\"}")
+ .setBody(Utils.toJSONStr(Map("name" -> Settings.pushNotifier, "provider" -> Settings.pushProvider)))
.setHeader("Cache-Control", "no-cache")
.setHeader("Content-Type", "application/json; charset=UTF-8")
- .setHeader("Authorization","Bearer "+authToken)
+ .setHeader("Authorization","Bearer " + getManagementToken)
.build()
val notifierResponse = client.executeRequest(createNotifier).get();
printResponse("POST Notifier", notifierResponse.getStatusCode ,notifierResponse.getResponseBody())
- return notifierResponse.getStatusCode
- }
-
- def getManagementToken():String = {
- if(token == null) {
- val getToken = client
- .preparePost(Settings.baseUrl + "/management/token")
- .setBody("{\"username\":\"" + Settings.admin + "\",\"password\":\"" + Settings.password + "\",\"grant_type\":\"password\"}")
- .setHeader("Cache-Control", "no-cache")
- .setHeader("Content-Type", "application/json; charset=UTF-8")
- .build()
- val response = client.executeRequest(getToken).get()
- val omapper = new ObjectMapper();
- val tree = omapper.readTree(response.getResponseBody())
- val node = tree.get("access_token");
- token = node.asText()
- println("Token is "+token)
- }
- return token
+ notifierResponse.getStatusCode
}
def setupUsers() = {
- if (!Settings.skipSetup) {
- val userFeeder = Settings.getUserFeeder()
- val numUsers = userFeeder.length
- println(s"setupUsers: Sending requests for $numUsers users")
-
- val list: ArrayBuffer[ListenableFuture[Response]] = new ArrayBuffer[ListenableFuture[Response]]
- var successCount: Int = 0;
- def purgeList = {
- list.foreach(f => {
- val response = f.get()
- if (response.getStatusCode != 200) {
- printResponse("Post User", response.getStatusCode, response.getResponseBody())
- } else {
- successCount += 1
- }
- })
- list.clear()
- }
- userFeeder.foreach(user => {
- list += setupUser(user);
- if(list.length == Integer.getInteger("purgeUsers",100)){
- purgeList
+ val userFeeder = Settings.getUserFeeder()
+ val numUsers = userFeeder.length
+ println(s"setupUsers: Sending requests for $numUsers users")
+
+ val list: ArrayBuffer[ListenableFuture[Response]] = new ArrayBuffer[ListenableFuture[Response]]
+ var successCount: Int = 0
+ def purgeList() = {
+ list.foreach(f => {
+ val response = f.get()
+ if (response.getStatusCode != 200) {
+ printResponse("Post User", response.getStatusCode, response.getResponseBody())
+ } else {
+ successCount += 1
}
- });
-
- println(s"setupUsers: Received $successCount successful responses out of $numUsers requests.")
- } else {
- println("Skipping Adding Users due to skipSetup=true")
+ })
+ list.clear()
}
+ userFeeder.foreach(user => {
+ list += setupUser(user)
+ if (list.length == Integer.getInteger("purgeUsers",100)) {
+ purgeList()
+ }
+ })
+
+ println(s"setupUsers: Received $successCount successful responses out of $numUsers requests.")
}
def setupUser(user:Map[String,String]):ListenableFuture[Response] = {
@@ -165,14 +188,56 @@ object Setup {
.setHeader("Authorization","Bearer "+authToken)
.build()
- return client.executeRequest(createUser)
+ client.executeRequest(createUser)
+ }
+ def setupEntitiesCollection(numEntities: Int, entityType: String, prefix: String, seed: Int = 1) = {
+ val entitiesFeeder = FeederGenerator.generateCustomEntityFeeder(numEntities, entityType, prefix, seed)
+ val purgeUsers = Integer.getInteger("purgeUsers", 100)
+
+ val list: ArrayBuffer[ListenableFuture[Response]] = new ArrayBuffer[ListenableFuture[Response]]
+ var successCount: Int = 0;
+ def purgeList(): Unit = {
+ list.foreach(f => {
+ val response = f.get()
+ if (response.getStatusCode != 200) {
+ printResponse("Post Entity", response.getStatusCode, response.getResponseBody)
+ } else {
+ successCount += 1
+ }
+ })
+ list.clear()
+ }
+ entitiesFeeder.foreach(payload => {
+ //println("setupEntitiesCollection: payload=" + payload)
+ list += setupEntity(payload)
+ if(list.length == purgeUsers) {
+ purgeList()
+ }
+ })
+
+ // purgeList()
+
+ println(s"setupEntitiesCollection: Received $successCount successful responses out of $numEntities requests.")
+ }
+
+ def setupEntity(payload: String):ListenableFuture[Response] = {
+ val authToken = getManagementToken()
+ val createEntity = client
+ .preparePost(Settings.baseAppUrl + "/" + Settings.collectionType)
+ .setBody(payload)
+ .setBodyEncoding("UTF-8")
+ .setHeader("Authorization", "Bearer " + authToken)
+ .setHeader("Content-Type", "application/json; charset=UTF-8")
+ .build()
+ //println("setupEntity: baseAppUrl=" + Settings.baseAppUrl + ", collectionType=" + Settings.collectionType + ", payload=" + payload)
+
+ client.executeRequest(createEntity)
}
def printResponse(caller:String, status:Int, body:String) = {
println(caller + ": status: "+status.toString+" body:"+body)
-
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
new file mode 100755
index 0000000..82061d6
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ package org.apache.usergrid.helpers
+
+import scala.util.Random
+import scala.util.parsing.json.JSONObject
+
+ /**
+ *
+ * Utility for creating various data elements
+ *
+ */
+object Utils {
+
+ private val RNG = new Random(System.currentTimeMillis())
+
+ /**
+ * Generate a new uuid and replace the '-' with empty
+ */
+ def generateUUIDString(): String = {
+ java.util.UUID.randomUUID.toString.replace("-", "")
+ }
+
+ /**
+ * Generate a unique string with a prefix
+ *
+ * @param prefix
+ * @return
+ */
+ def generateUniqueName(prefix : String): String = {
+ prefix + generateUUIDString()
+ }
+
+ // random number in between [a...b]
+ def generateRandomInt(lowerBound: Int, upperBound: Int) = RNG.nextInt(upperBound - lowerBound) + lowerBound
+
+ def generateRandomGeolocation(radius: Double, centerLatitude: Double, centerLongitude: Double):Map[String, String] = {
+
+ val rd = radius / 111300 // Convert Radius from meters to degrees.
+ val u = RNG.nextFloat()
+ val v = RNG.nextFloat()
+ val q = math.sqrt(u) * rd
+ val w = q * rd
+ val t = 2 * math.Pi * v
+ val x = math.cos(t) * w
+ val y = math.sin(t) * w
+ val xp = x/math.cos(centerLatitude)
+ val latitude = (y + centerLatitude).toString
+ val longitude = (xp + centerLongitude).toString
+ val geolocation: Map[String, String] = Map("latitude"->latitude,"longitude"->longitude)
+
+ geolocation
+ }
+
+ def generateRandomQueryString: String = {
+
+ val queryParams = Array("age", "height", "weight")
+ var queryString = ""
+
+ for (numParams <- 1 to generateRandomInt(1, queryParams.length)) {
+ queryString = "age=" + Utils.generateRandomInt(18, 65).toString
+ if (numParams == 2) {
+ queryString += "%20AND%20height=" + Utils.generateRandomInt(48, 84).toString
+ } else if (numParams == 3) {
+ queryString += "%20AND%20weight=" + Utils.generateRandomInt(120, 350).toString
+ }
+ }
+
+ queryString
+ }
+
+ def randomEntityNameUrl(prefix: String, numEntities: Int, seed: Int, baseUrl: String): String = {
+ val randomVal = generateRandomInt(seed, seed+numEntities-1)
+
+ baseUrl + "/" + prefix.concat(randomVal.toString)
+ }
+
+ def createRandomPushNotifierName:String = {
+ Utils.generateUniqueName("notifier")
+ }
+
+ def toJSONStr(objectMap: Map[String, Any]):String = {
+ JSONObject(objectMap).toString()
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
index 8faf8c7..4150513 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
@@ -37,7 +37,7 @@ object ApplicationScenarios {
val createApplication = exec(http("Create Application")
.post(Settings.baseUrl + "/management/organizations/"+Settings.org+"/applications")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.body(StringBody("{\"name\":\"" + Settings.app + "\"}"))
.check(status.in(200 to 204))
@@ -45,7 +45,7 @@ object ApplicationScenarios {
val checkApplication = exec(http("Get Application")
.get(Settings.baseAppUrl)
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.saveAs("applicationStatus"))
)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
index 07e11fe..b2827bb 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
@@ -26,7 +26,7 @@ import io.gatling.http.Predef._
val postUserConnection = exec(
http("POST connection")
.post("/users/${user1}/likes/users/${user2}")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200))
)
@@ -34,14 +34,14 @@ import io.gatling.http.Predef._
val postUserToDeviceConnection = exec(
http("Connect user with device")
.post("/users/${username}/devices/${deviceId}")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200))
)
val postConnection = exec(
http("Connect user with device")
.post("/${connectionName}/${entityId}/${connectionType}/${entityId}")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200))
)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala
index 4abd8cb..a8a3d9c 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala
@@ -46,7 +46,7 @@ object DeviceScenarios {
*/
val postDeviceWithNotifier = exec(http("Create device with notifier")
.post("/devices")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.body(StringBody("""{"deviceModel":"Fake Device",
"deviceOSVerion":"Negative Version",
"""" + notifier + """.notifier.id":"${entityName}"}"""))
@@ -55,7 +55,7 @@ object DeviceScenarios {
val postDeviceWithNotifier400ok = exec(http("Create device with notifier")
.post("/devices")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.body(StringBody("""{"name":"${entityName}",
"deviceModel":"Fake Device",
"deviceOSVerion":"Negative Version",
@@ -70,7 +70,7 @@ object DeviceScenarios {
//try to do a GET on device name, if it 404's create it
http("Check and create device")
.get("/users/${username}/devices")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(jsonPath("$.entities").exists, jsonPath("$.entities").saveAs("devices"))
)
.exec(session =>{
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
new file mode 100644
index 0000000..844eb82
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.scenarios
+
+import io.gatling.core.Predef._
+import io.gatling.http.Predef._
+import org.apache.usergrid.enums.{EndConditionType, AuthType}
+import org.apache.usergrid.helpers.Extractors._
+import org.apache.usergrid.helpers.Utils
+import org.apache.usergrid.settings.{Headers, Settings}
+
+/**
+ * Provides CRUD methods for custom entities
+ *
+ *
+ *
+ */
+object EntityCollectionScenarios {
+
+ //The value for the cursor
+ val SessionVarCursor: String = "cursor"
+
+ def entityGetUrl(useCursor: Boolean): String = {
+ val url = Settings.baseAppUrl + "/" + Settings.collectionType + "?dummy" +
+ (if (useCursor) "&cursor=${" + SessionVarCursor + "}" else "") +
+ (if (Settings.searchLimit > 0) "&limit=" + Settings.searchLimit.toString() else "") +
+ (if (Settings.searchQuery != "") "&ql=" + Settings.searchQuery else "")
+
+ url
+ }
+
+ def entityGetByNameUrl(entityName: String): String = {
+ val url = Settings.baseCollectionUrl + "/" + entityName
+
+ url
+ }
+
+ def randomEntityNameUrl(prefix: String = Settings.entityPrefix, numEntities: Int = Settings.numEntities, seed: Int = Settings.entitySeed): String = {
+ Utils.randomEntityNameUrl(prefix, numEntities, seed, Settings.baseCollectionUrl)
+ }
+
+ val getEntitiesWithoutCursor = exec(
+ http("GET entities")
+ .get(entityGetUrl(false))
+ .headers(Headers.authToken)
+ .check(status.is(200), maybeExtractCursor(SessionVarCursor))
+ )
+
+ val getEntitiesWithCursor = exec(
+ http("GET entities")
+ .get(entityGetUrl(true))
+ .headers(Headers.authToken)
+ .check(status.is(200), maybeExtractCursor(SessionVarCursor))
+ )
+
+ val getEntityPagesToEnd = scenario("Get all entities")
+ .exec(injectTokenIntoSession())
+ .exec(injectAuthType())
+ .doIfOrElse(session => Settings.endConditionType == EndConditionType.MinutesElapsed) {
+ asLongAs(session => (System.currentTimeMillis() - Settings.testStartTime) < Settings.endMinutes*60*1000,"loopCounter",true) {
+ exec(getEntitiesWithoutCursor)
+ .asLongAs(stringParamExists(SessionVarCursor)) {
+ exec(getEntitiesWithCursor)
+ }
+ }
+ } {
+ repeat(Settings.endRequestCount) {
+ exec(getEntitiesWithoutCursor)
+ .asLongAs(stringParamExists(SessionVarCursor)) {
+ exec(getEntitiesWithCursor)
+ }
+ }
+ }
+ //.exec(sessionFunction => { sessionFunction })
+
+ val getRandomEntityAnonymous = exec(
+ http("GET entity by name (anonymous)")
+ .get(_ => randomEntityNameUrl())
+ .headers(Headers.authAnonymous)
+ .check(status.is(200))
+ )
+
+ val getRandomEntityWithToken = exec(
+ http("GET entity by name (token)")
+ .get(_ => randomEntityNameUrl())
+ .headers(Headers.authToken)
+ .check(status.is(200))
+ )
+
+ val getRandomEntitiesByName = scenario("Get entities by name randomly")
+ .exec(injectTokenIntoSession())
+ .exec(injectAuthType())
+ .doIfOrElse(session => Settings.endConditionType == EndConditionType.MinutesElapsed) {
+ asLongAs(session => (System.currentTimeMillis() - Settings.testStartTime) < Settings.endMinutes*60*1000) {
+ doIfOrElse(session => Settings.authType == AuthType.Anonymous) {
+ exec(getRandomEntityAnonymous)
+ } {
+ exec(getRandomEntityWithToken)
+ }
+ }
+ } {
+ repeat(Settings.endRequestCount) {
+ doIfOrElse(session => Settings.authType == AuthType.Anonymous) {
+ exec(getRandomEntityAnonymous)
+ } {
+ exec(getRandomEntityWithToken)
+ }
+ }
+ }
+
+ /*
+ val createEntityBatchScenario = scenario("Create custom entities")
+ .exec(injectStaticTokenToSession())
+ .feed(FeederGenerator.generateCustomEntityCreateFeeder(Settings.entityPrefix, Settings.numEntities))
+ .exec(EntityScenarios.postEntity)
+ */
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
index c3af32d..dd21e3c 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
@@ -19,55 +19,65 @@ package org.apache.usergrid.scenarios
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import org.apache.usergrid.datagenerators.{EntityDataGenerator, FeederGenerator}
-import org.apache.usergrid.settings.{Headers, Utils, Settings}
+import org.apache.usergrid.helpers.{Extractors,Utils}
+import org.apache.usergrid.settings.{Headers, Settings}
import scala.util.parsing.json.JSONObject
/**
* Provides CRUD methods for custom entities
- *
- *
- *
*/
+
object EntityScenarios {
val getEntity = exec(
http("GET custom entity")
.get(Settings.baseAppUrl+"/${collectionType}/${entityName}")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authAnonymous)
.check(status.is(200))
)
+ // not sure why I have to put stringToExpression -- thought String -> Expression[String] conversion would be automatic
val putEntity = exec(
http("Put custom entity")
- .put(Settings.baseAppUrl+"/"+ Settings.collectionType+"/${entityName}")
+ .put(stringToExpression(Settings.baseAppUrl + "/${collectionType}/${entityName}"))
.body(StringBody("""${entity}"""))
- .headers(Headers.jsonAnonymous)
+ .headers(Headers.auth("${authType}"))
.check(status.is(200))
)
val deleteEntity = exec(
http("DELETE custom entity")
- .get(Settings.baseAppUrl+"/${collectionType}/${entityName}")
- .headers(Headers.jsonAuthorized)
+ .get(Settings.baseAppUrl + "/${collectionType}/${entityName}")
+ .headers(Headers.auth("${authType}"))
.check(status.is(200))
)
val postEntity = exec(
http("Post custom entity")
- .post(Settings.baseAppUrl+"/"+ Settings.collectionType)
+ .post(stringToExpression(Settings.baseAppUrl + "/${collectionType}"))
.body(StringBody("""${entity}"""))
- .headers(Headers.jsonAnonymous)
+ .headers(Headers.auth("${authType}"))
.check(status.is(200))
)
+ /*
val postEntityWithToken = exec(
http("Post custom entity")
- .post(Settings.baseAppUrl+"/"+ Settings.collectionType)
+ .post(stringToExpression(Settings.baseAppUrl + "/${collectionType}"))
+ .body(StringBody("""${entity}"""))
+ .headers(Headers.authToken)
+ .check(status.is(200))
+ )
+
+ val postEntityWithBasicAuth = exec(
+ http("Post custom entity")
+ .post(stringToExpression(Settings.baseAppUrl + "/${collectionType}"))
.body(StringBody("""${entity}"""))
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authBasic)
.check(status.is(200))
)
+ */
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala
index d5ce7c7..85c6855 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala
@@ -18,30 +18,31 @@
import io.gatling.core.Predef._
import io.gatling.http.Predef._
- import org.apache.usergrid.settings.{Headers, Utils, Settings}
+import org.apache.usergrid.helpers.Utils
+import org.apache.usergrid.settings.{Headers, Settings}
- object GeoScenarios {
+object GeoScenarios {
val getGeolocation = exec(
http("GET geolocated user")
- .get("/users?ql=location%20within%20" + Settings.geosearchRadius + "%20of%20${latitude},${longitude}")
- .headers(Headers.jsonAuthorized)
+ .get("/users?ql=location%20within%20" + Settings.geoSearchRadius + "%20of%20${latitude},${longitude}")
+ .headers(Headers.authToken)
.check(status.is(200))
)
val getGeolocationWithQuery = exec(
http("GET geolocated user with query")
- .get("/users?ql=${queryParams}%20AND%20location%20within%20" + Settings.geosearchRadius + "%20of%20${latitude},${longitude}")
- .headers(Headers.jsonAuthorized)
+ .get("/users?ql=${queryParams}%20AND%20location%20within%20" + Settings.geoSearchRadius + "%20of%20${latitude},${longitude}")
+ .headers(Headers.authToken)
.check(status.is(200))
)
val updateGeolocation = exec(
http("PUT user location")
- .put("/users/user" + Utils.generateRandomInt(1, Settings.numUsers))
+ .put(stringToExpression("/users/user" + Utils.generateRandomInt(1, Settings.totalUsers)))
.body(StringBody("{\"location\":{\"latitude\":\"${latitude}\",\"longitude\":\"${longitude}\"}}"))
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200))
)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
index 61b2605..92998d0 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
@@ -28,6 +28,7 @@ import scala.io.Source
import org.apache.usergrid.settings.{Headers, Settings}
+
/**
*
* Creates a new device
@@ -56,14 +57,14 @@ object NotificationScenarios {
val sendNotification = exec(http("Send Single Notification")
.post("/devices/${entityName}/notifications")
.body(StringBody("{\"payloads\":{\"" + notifier + "\":\"testmessage\"}}"))
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200))
)
val sendNotificationToUser= exec(http("Send Notification to All Devices")
.post("/users/${userId}/notifications")
.body(StringBody("{\"payloads\":{\"" + notifier + "\":\"testmessage\"}}"))
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200))
)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
index 55c3d52..b2e32e5 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
@@ -38,7 +38,7 @@ import io.gatling.http.Predef._
*
*/
object NotifierScenarios {
-
+
val notifier = Settings.pushNotifier
val provider = Settings.pushProvider
val org = Settings.org
@@ -56,13 +56,13 @@ object NotifierScenarios {
.exec(http("Create Notifier")
.post(Settings.baseAppUrl+"/notifiers")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.body(StringBody("{\"name\":\"" + notifier + "\",\"provider\":\"" + provider + "\"}"))
.check(status.in(200 to 400)))
val checkNotifier = exec(http("Get Notifier")
.get(Settings.baseAppUrl+"/notifiers/"+notifier)
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200),status.saveAs("notifierStatus"))
)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
index 873759b..1cdc25c 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
@@ -38,8 +38,8 @@ object OrganizationScenarios {
val createOrgAndAdmin =
exec(http("Create Organization")
.post(Settings.baseUrl + "/management/organizations")
- .headers(Headers.jsonAnonymous)
- .body(StringBody("{\"organization\":\"" + Settings.org + "\",\"username\":\"" + Settings.admin + "\",\"name\":\"${entityName}\",\"email\":\"${entityName}@apigee.com\",\"password\":\"" + Settings.password + "\"}"))
+ .headers(Headers.authAnonymous)
+ .body(StringBody("{\"organization\":\"" + Settings.org + "\",\"username\":\"" + Settings.adminUser + "\",\"name\":\"${entityName}\",\"email\":\"${entityName}@apigee.com\",\"password\":\"" + Settings.adminPassword + "\"}"))
.check(status.in(200 to 400))
)
val createOrgBatch =
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
index 73ba3a9..4385797 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
@@ -41,9 +41,9 @@ import io.gatling.core.Predef._
object TokenScenarios {
val getManagementToken = exec(http("POST Org Token")
.post(Settings.baseUrl+"/management/token")
- .headers(Headers.jsonAnonymous)
+ .headers(Headers.authAnonymous)
//pass in the the username and password, store the "access_token" json response element as the var "authToken" in the session
- .body(StringBody("{\"username\":\"" + Settings.admin + "\",\"password\":\""+Settings.password+"\",\"grant_type\":\"password\"}"))
+ .body(StringBody("{\"username\":\"" + Settings.adminUser + "\",\"password\":\""+Settings.adminPassword+"\",\"grant_type\":\"password\"}"))
.check(jsonPath("$.access_token").find(0).saveAs("authToken"))
)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala
index c589365..a55f66a 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala
@@ -21,8 +21,9 @@ import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.http.request.StringBody
import org.apache.usergrid.datagenerators.FeederGenerator
-import org.apache.usergrid.settings.{Headers, Settings, Utils}
+import org.apache.usergrid.settings.{Headers, Settings}
import org.apache.usergrid.helpers.Extractors._
+import org.apache.usergrid.helpers.Utils
object UserScenarios {
@@ -46,7 +47,7 @@ object UserScenarios {
val getRandomUser = exec(
http("GET user")
.get("/users/user" + Utils.generateRandomInt(1, Settings.numEntities))
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200))
)
@@ -54,7 +55,7 @@ object UserScenarios {
val getUserByUsername = exec(
http("GET user")
.get("/users/${username}")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.saveAs(SessionVarUserStatus), jsonPath("$..entities[0]").exists, jsonPath("$..entities[0].uuid").exists, jsonPath("$..entities[0].uuid").saveAs(SessionVarUserId))
)
@@ -85,11 +86,11 @@ object UserScenarios {
exec(postUser)
}
-
+
val putUser = exec(
http("PUT geolocated Users")
.put("/users/${username}")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.body(new StringBody( """{"location":{"latitude":"${latitude}","longitude":"${longitude}"},"username":"${username}",
"displayName":"${displayName}","age":"${age}","seen":"${seen}","weight":"${weight}",
"height":"${height}","aboutMe":"${aboutMe}","profileId":"${profileId}","headline":"${headline}",
@@ -97,12 +98,12 @@ object UserScenarios {
.check(status.is(200), jsonPath("$..entities[0].uuid").saveAs(SessionVarUserId))
)
-
+
val deleteUser = exec(
http("DELETE geolocated Users")
.delete("/users/${username}")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.in(Seq(200,404)))
)
@@ -118,7 +119,7 @@ object UserScenarios {
val getUsersWithoutCursor = exec(
http("GET user")
.get("/users")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200), maybeExtractEntities(SessionVarUsers), maybeExtractCursor(SessionVarCursor))
)
@@ -129,7 +130,7 @@ object UserScenarios {
val getUsersWithCursor = exec(
http("GET user")
.get("/users?cursor=${" + SessionVarCursor + "}")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200), maybeExtractEntities(SessionVarUsers), maybeExtractCursor(SessionVarCursor))
) /**
* Debugging block
@@ -146,7 +147,7 @@ object UserScenarios {
val deleteUserByUsername = exec(
http("DELETE user")
.delete("/users/${username}")
- .headers(Headers.jsonAuthorized)
+ .headers(Headers.authToken)
.check(status.is(200), jsonPath("$..entities[0].uuid").saveAs(SessionVarUserId))
)
@@ -176,21 +177,21 @@ object UserScenarios {
/**
* Puts a new user every time
*/
- val putUsersInfinitely = scenario("Put Users").exec(injectStaticTokenToSession)
+ val putUsersInfinitely = scenario("Put Users").exec(injectManagementTokenIntoSession)
.feed(Settings.getInfiniteUserFeeder())
.exec(putUser)
/**
* Deletes user every time
*/
- val deleteUsersInfinitely = scenario("Delete Users").exec(injectStaticTokenToSession)
+ val deleteUsersInfinitely = scenario("Delete Users").exec(injectManagementTokenIntoSession)
.feed(Settings.getInfiniteUserFeeder())
.exec(deleteUser)
/**
* Get the users a page at a time until exhausted
*/
- val getUserPagesToEnd = scenario("Get User Pages").exec(injectStaticTokenToSession)
+ val getUserPagesToEnd = scenario("Get User Pages").exec(injectManagementTokenIntoSession)
//get users without a cursor
.exec(getUsersWithoutCursor)
//as long as we have a cursor, keep getting results
@@ -200,7 +201,7 @@ object UserScenarios {
sessionFunction
})
- val getUsersByUsername = scenario("Get User By Username").exec(injectStaticTokenToSession)
+ val getUsersByUsername = scenario("Get User By Username").exec(injectManagementTokenIntoSession)
.feed(Settings.getInfiniteUserFeeder())
//get users without a cursor
.exec(getUserByUsername)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
index 6cd6f2e..db6062f 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
@@ -16,6 +16,7 @@
*/
package org.apache.usergrid.settings
+ import org.apache.usergrid.enums.AuthType
import org.apache.usergrid.helpers.Setup
/**
@@ -26,7 +27,7 @@ object Headers {
/**
* Headers for anonymous posts
*/
- val jsonAnonymous = Map(
+ val authAnonymous = Map(
"Cache-Control" -> """no-cache""",
"Content-Type" -> """application/json; charset=UTF-8"""
)
@@ -34,14 +35,29 @@ object Headers {
/**
* Headers for authorized users with token and json content type
*/
- val jsonAuthorized = Map(
+ val authToken = Map(
"Cache-Control" -> """no-cache""",
"Content-Type" -> """application/json; charset=UTF-8""",
"Authorization" -> "Bearer ${authToken}"
)
+ /**
+ * Headers for basic auth
+ */
+ val authBasic = Map(
+ "Cache-Control" -> """no-cache""",
+ "Content-Type" -> """application/json; charset=UTF-8""",
+ "Authorization" -> ("Basic " + Settings.appUserBase64)
+ )
-
+ /**
+ * Header selector
+ */
+ def auth(authType:String): Map[String, String] = {
+ if (authType == AuthType.Basic) authBasic
+ else if (authType == AuthType.Token) authToken
+ else authAnonymous
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index 2619cad..75bed58 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -16,61 +16,87 @@
*/
package org.apache.usergrid.settings
+import java.nio.charset.StandardCharsets
+import java.util.Base64
+
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import org.apache.usergrid.datagenerators.FeederGenerator
+import org.apache.usergrid.enums._
import scala.concurrent.duration._
object Settings {
- // Target settings
- val org = System.getProperty("org")
- val app = System.getProperty("app")
- val admin = System.getProperty("adminUser")
- val password = System.getProperty("adminPassword")
- val baseUrl = System.getProperty("baseurl")
+ // load configuration settings via property or default
+ val org = System.getProperty(ConfigProperties.Org)
+ val app = System.getProperty(ConfigProperties.App)
+ val adminUser = System.getProperty(ConfigProperties.AdminUser)
+ val adminPassword = System.getProperty(ConfigProperties.AdminPassword)
+ val baseUrl = System.getProperty(ConfigProperties.BaseUrl)
val baseAppUrl = baseUrl + "/" + org + "/" + app
val httpConf = http.baseURL(baseAppUrl)
-
- val skipSetup:Boolean = System.getProperty("skipSetup") == "true"
- val duration:Int = Integer.getInteger("duration", 300).toInt // in seconds
-
-
-
- // Simulation settings
- val maxPossibleUsers:Int = Integer.getInteger("maxPossibleUsers", 1).toInt
- val numUsers:Int = maxPossibleUsers
- val userSeed:Int = Integer.getInteger("userSeed",1).toInt
-
- val numEntities:Int = Integer.getInteger("numEntities", 5000).toInt
- val numDevices:Int = Integer.getInteger("numDevices", 4000).toInt
-
- val collectionType:String = System.getProperty("collectionType", "defaultthings")
-
- val rampTime:Int = Integer.getInteger("rampTime", 0).toInt // in seconds
- val throttle:Int = Integer.getInteger("throttle", 50).toInt // in seconds
+ val authType = System.getProperty(ConfigProperties.AuthType, AuthType.Anonymous)
+ val tokenType = System.getProperty(ConfigProperties.TokenType, TokenType.User)
+
+ val skipSetup:Boolean = System.getProperty(ConfigProperties.SkipSetup) == "true"
+ val createOrg:Boolean = System.getProperty(ConfigProperties.CreateOrg) == "true"
+ val createApp:Boolean = System.getProperty(ConfigProperties.CreateApp) != "false"
+ val loadEntities:Boolean = System.getProperty(ConfigProperties.LoadEntities) != "false"
+ val scenarioType = System.getProperty(ConfigProperties.ScenarioType, ScenarioType.NameRandomInfinite)
+
+ val rampUsers:Int = Integer.getInteger(ConfigProperties.RampUsers, 0).toInt
+ val constantUsersPerSec:Int = Integer.getInteger(ConfigProperties.ConstantUsersPerSec, 0).toInt // users to add per second during constant injection
+ val constantUsersDuration:Int = Integer.getInteger(ConfigProperties.ConstantUsersDuration, 10).toInt // number of seconds
+ val totalUsers:Int = rampUsers + (constantUsersPerSec * constantUsersDuration)
+ val userSeed:Int = Integer.getInteger(ConfigProperties.UserSeed,1).toInt
+ val appUser = System.getProperty(ConfigProperties.AppUser)
+ val appUserPassword = System.getProperty(ConfigProperties.AppUserPassword)
+ val appUserBase64 = Base64.getEncoder.encodeToString((appUser + ":" + appUserPassword).getBytes(StandardCharsets.UTF_8))
+
+ val numEntities:Int = Integer.getInteger(ConfigProperties.NumEntities, 5000).toInt
+ val numDevices:Int = Integer.getInteger(ConfigProperties.NumDevices, 4000).toInt
+
+ val collectionType = System.getProperty(ConfigProperties.CollectionType, "customentities")
+ val baseCollectionUrl = baseAppUrl + "/" + collectionType
+
+ val rampTime:Int = Integer.getInteger(ConfigProperties.RampTime, 0).toInt // in seconds
+ val throttle:Int = Integer.getInteger(ConfigProperties.Throttle, 50).toInt // in seconds
+ val rpsTarget:Int = Integer.getInteger(ConfigProperties.RpsTarget, 50).toInt // requests per second target
+ val rpsRampTime:Int = Integer.getInteger(ConfigProperties.RpsRampTime, 10).toInt // in seconds
+ val holdDuration:Int = Integer.getInteger(ConfigProperties.HoldDuration, 300).toInt // in seconds
// Geolocation settings
val centerLatitude:Double = 37.442348 // latitude of center point
val centerLongitude:Double = -122.138268 // longitude of center point
val userLocationRadius:Double = 32000 // location of requesting user in meters
- val geosearchRadius:Int = 8000 // search area in meters
+ val geoSearchRadius:Int = 8000 // search area in meters
// Push Notification settings
- val pushNotifier = if (System.getProperty("pushNotifier") != null) System.getProperty("pushNotifier") else "loadNotifier"
- val pushProvider = if (System.getProperty("pushProvider") != null) System.getProperty("pushProvider") else "noop"
-
- println(s"Will inject up to $maxPossibleUsers users per sec")
-
- def getUserFeeder():Array[Map[String, String]]= {
- val userFeeder = FeederGenerator.generateUserWithGeolocationFeeder(numUsers, userLocationRadius, centerLatitude, centerLongitude)
- return userFeeder
+ val pushNotifier = System.getProperty(ConfigProperties.PushNotifier, "loadNotifier")
+ val pushProvider = System.getProperty(ConfigProperties.PushProvider, "noop")
+
+ // Large Entity Collection settings
+ val entityPrefix = System.getProperty(ConfigProperties.EntityPrefix, "entity")
+ val entityType = System.getProperty(ConfigProperties.EntityType, EntityType.Basic) // basic/trivial/?
+ val entitySeed = Integer.getInteger(ConfigProperties.EntitySeed, 1).toInt
+ val searchLimit = Integer.getInteger(ConfigProperties.SearchLimit, 0).toInt
+ val searchQuery = System.getProperty(ConfigProperties.SearchQuery, "")
+ val endConditionType = System.getProperty(ConfigProperties.EndConditionType, EndConditionType.MinutesElapsed)
+ val endMinutes = Integer.getInteger(ConfigProperties.EndMinutes, 10).toInt
+ val endRequestCount = Integer.getInteger(ConfigProperties.EndRequestCount, 10).toInt
+
+ def getUserFeeder():Array[Map[String, String]]= {
+ FeederGenerator.generateUserWithGeolocationFeeder(totalUsers, userLocationRadius, centerLatitude, centerLongitude)
}
def getInfiniteUserFeeder():Iterator[Map[String, String]]= {
- val userFeeder = FeederGenerator.generateUserWithGeolocationFeederInfinite(Settings.userSeed, userLocationRadius, centerLatitude, centerLongitude,maxPossibleUsers)
- return userFeeder
+ FeederGenerator.generateUserWithGeolocationFeederInfinite(userSeed, userLocationRadius, centerLatitude, centerLongitude)
}
+ var testStartTime = System.currentTimeMillis()
+
+ def setTestStartTime(): Unit = {
+ testStartTime = System.currentTimeMillis()
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Utils.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Utils.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Utils.scala
deleted file mode 100755
index 8997d8c..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Utils.scala
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.usergrid.settings
-
-import scala.util.Random
-import scala.math
-import Array._
-
-/**
- *
- * Utility for creating various data elements
- *
- */
-object Utils {
-
- private val RNG = new Random
-
- /**
- * Generate a new uuid and replace the '-' with empty
- */
- def generateUUIDString(): String = {
- return java.util.UUID.randomUUID.toString.replace("-", "")
- }
-
- /**
- * Generate a unique string with a prefix
- *
- * @param prefix
- * @return
- */
- def generateUniqueName(prefix : String): String = {
- return prefix + generateUUIDString()
- }
-
- // random number in between [a...b]
- def generateRandomInt(lowerBound: Int, upperBound: Int) = RNG.nextInt(upperBound - lowerBound) + lowerBound
-
- def generateRandomGeolocation(radius: Double, centerLatitude: Double, centerLongitude: Double):Map[String, String] = {
-
- var rd = radius / 111300 // Convert Radius from meters to degrees.
- var u = RNG.nextFloat()
- var v = RNG.nextFloat()
- var q = math.sqrt(u) * rd
- var w = q * rd
- var t = 2 * math.Pi * v
- var x = math.cos(t) * w
- var y = math.sin(t) * w
- var xp = x/math.cos(centerLatitude)
- var latitude = (y + centerLatitude).toString
- var longitude = (xp + centerLongitude).toString
- var geolocation: Map[String, String] = Map("latitude"->latitude,"longitude"->longitude)
-
- return geolocation
- }
-
- def generateRandomQueryString: String = {
-
- val queryParams = Array("age", "height", "weight")
- var queryString = ""
-
- for (numParams <- 1 to generateRandomInt(1, queryParams.length)) {
- queryString = "age=" + Utils.generateRandomInt(18, 65).toString
- if (numParams == 2) {
- queryString += "%20AND%20height=" + Utils.generateRandomInt(48, 84).toString
- } else if (numParams == 3) {
- queryString += "%20AND%20weight=" + Utils.generateRandomInt(120, 350).toString
- }
- }
-
- return queryString
- }
-
- def createRandomPushNotifier:String = {
- return Utils.generateUniqueName("notifier")
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/AppSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/AppSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/AppSimulation.scala
deleted file mode 100644
index a9cfd10..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/AppSimulation.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * * Licensed to the Apache Software Foundation (ASF) under one or more
- * * contributor license agreements. The ASF licenses this file to You
- * * under the Apache License, Version 2.0 (the "License"); you may not
- * * use this file except in compliance with the License.
- * * You may obtain a copy of the License at
- * *
- * * http://www.apache.org/licenses/LICENSE-2.0
- * *
- * * Unless required by applicable law or agreed to in writing, software
- * * distributed under the License is distributed on an "AS IS" BASIS,
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * * See the License for the specific language governing permissions and
- * * limitations under the License. For additional information regarding
- * * copyright in this work, please see the NOTICE file in the top level
- * * directory of this distribution.
- *
- */
-
-package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import io.gatling.core.scenario.Simulation
-import org.apache.usergrid.helpers.Setup
-import org.apache.usergrid.scenarios.NotificationScenarios
-import org.apache.usergrid.settings.Settings
-import scala.annotation.switch
-import scala.concurrent.duration._
-
-/**
- * Classy class class.
- */
-class AppSimulation extends Simulation {
- println("Begin setup")
- Setup.setupNotifier()
- println("End Setup")
-
- setUp(
- NotificationScenarios.createScenario
- .inject(constantUsersPerSec(Settings.maxPossibleUsers) during (Settings.duration))
- .protocols(Settings.httpConf.acceptHeader("application/json"))
- ).throttle(reachRps(Settings.throttle) in (Settings.rampTime seconds), holdFor(Settings.duration))
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
new file mode 100755
index 0000000..7a55577
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.simulations
+
+import io.gatling.core.Predef._
+import org.apache.usergrid.enums.ScenarioType
+import org.apache.usergrid.helpers.Setup
+import org.apache.usergrid.scenarios.EntityCollectionScenarios
+import org.apache.usergrid.settings.Settings
+
+/**
+ * Configurable simulations.
+ *
+ * Configuration items:
+ * skipSetup, createOrg, org, createApp, app, adminUser, adminPassword, baseUrl,
+ * numEntities, entityType, entityPrefix, entitySeed, rampUsers, rampTime,
+ * constantUsersPerSec, constantUsersDuration, collectionType, scenarioType
+ *
+ * getAllByCursor scenario: searchQuery, searchLimit
+ */
+class ConfigurableSimulation extends Simulation {
+ before(
+ if (!Settings.skipSetup) {
+ println("Begin setup")
+ if (Settings.createOrg) Setup.setupOrg()
+ if (Settings.createApp) Setup.setupApplication()
+ if (Settings.loadEntities) Setup.setupEntitiesCollection(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed)
+ } else {
+ println("Skipping setup")
+ }
+ )
+
+
+
+ Settings.setTestStartTime()
+ if (Settings.scenarioType == ScenarioType.GetAllByCursor) {
+ setUp(
+ EntityCollectionScenarios.getEntityPagesToEnd
+ .inject(
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+
+ ).protocols(Settings.httpConf.acceptHeader("application/json"))
+ )
+ } else if (Settings.scenarioType == ScenarioType.NameRandomInfinite) {
+ setUp(
+ EntityCollectionScenarios.getRandomEntitiesByName
+ .inject(
+ rampUsers(Settings.rampUsers) over Settings.rampTime,
+ constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
+
+ ).protocols(Settings.httpConf.acceptHeader("application/json"))
+ )
+ } else {
+ println(s"scenarioType ${Settings.scenarioType} not found.")
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConnectionsSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConnectionsSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConnectionsSimulation.scala
deleted file mode 100644
index 3756f84..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConnectionsSimulation.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *
- * * Licensed to the Apache Software Foundation (ASF) under one or more
- * * contributor license agreements. The ASF licenses this file to You
- * * under the Apache License, Version 2.0 (the "License"); you may not
- * * use this file except in compliance with the License.
- * * You may obtain a copy of the License at
- * *
- * * http://www.apache.org/licenses/LICENSE-2.0
- * *
- * * Unless required by applicable law or agreed to in writing, software
- * * distributed under the License is distributed on an "AS IS" BASIS,
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * * See the License for the specific language governing permissions and
- * * limitations under the License. For additional information regarding
- * * copyright in this work, please see the NOTICE file in the top level
- * * directory of this distribution.
- *
- */
-
-package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import io.gatling.core.scenario.Simulation
-import org.apache.usergrid.helpers.Setup
-import org.apache.usergrid.scenarios.{ConnectionScenarios, NotificationScenarios}
-import org.apache.usergrid.settings.Settings
-import scala.concurrent.duration._
-
-/**
- * Classy class class.
- */
-class ConnectionsSimulation extends Simulation{
-
- if(!Settings.skipSetup) {
- println("Begin setup")
- Setup.setupOrg()
- Setup.setupApplication()
- Setup.setupNotifier()
- Setup.setupUsers()
- println("End Setup")
- }else{
- println("Skipping Setup")
- }
-
- setUp(
- ConnectionScenarios.createScenario
- .inject(constantUsersPerSec(Settings.maxPossibleUsers) during (Settings.duration)) // wait for 15 seconds so create org can finish, need to figure out coordination
- .throttle(reachRps(Settings.throttle) in ( Settings.rampTime.seconds))
- .protocols( Settings.httpConf.acceptHeader("application/json"))
- )
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/DeleteUsersSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/DeleteUsersSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/DeleteUsersSimulation.scala
deleted file mode 100644
index bcfbe2d..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/DeleteUsersSimulation.scala
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *
- * * Licensed to the Apache Software Foundation (ASF) under one or more
- * * contributor license agreements. The ASF licenses this file to You
- * * under the Apache License, Version 2.0 (the "License"); you may not
- * * use this file except in compliance with the License.
- * * You may obtain a copy of the License at
- * *
- * * http://www.apache.org/licenses/LICENSE-2.0
- * *
- * * Unless required by applicable law or agreed to in writing, software
- * * distributed under the License is distributed on an "AS IS" BASIS,
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * * See the License for the specific language governing permissions and
- * * limitations under the License. For additional information regarding
- * * copyright in this work, please see the NOTICE file in the top level
- * * directory of this distribution.
- *
- */
-
-package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import io.gatling.core.scenario.Simulation
-import org.apache.usergrid.helpers.Setup
-import org.apache.usergrid.scenarios.UserScenarios
-import org.apache.usergrid.settings.Settings
-
-/**
- * Deletes application users continually to an application. Expects the following parameters
- *
- * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
- * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
- * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
- */
-class DeleteUsersSimulation extends Simulation {
-
- println("Begin setup")
- Setup.setupOrg()
- Setup.setupApplication()
- println("End Setup")
-
-
- setUp(
- UserScenarios.deleteUsersInfinitely
- .inject(
- /**
- * injection steps take from this forum post
- * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
- */
- rampUsers(Settings.maxPossibleUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.maxPossibleUsers) during Settings.duration
-
- )).protocols(Settings.httpConf.acceptHeader("application/json"))
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetEntitySimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetEntitySimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetEntitySimulation.scala
deleted file mode 100644
index 6e0ba81..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetEntitySimulation.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import io.gatling.http.Predef._
- import org.apache.usergrid.datagenerators.FeederGenerator
- import org.apache.usergrid.scenarios.UserScenarios
- import org.apache.usergrid.settings.Settings
- import scala.concurrent.duration._
-
-class GetEntitySimulation extends Simulation {
-
- // Target settings
- val httpConf = Settings.httpConf
-
- // Simulation settings
- val numUsers:Int = Settings.numUsers
- val numEntities:Int = Settings.numEntities
- val rampTime:Int = Settings.rampTime
- val throttle:Int = Settings.throttle
-
- val feeder = FeederGenerator.generateEntityNameFeeder("user", numEntities)
-
- val scnToRun = scenario("GET entity")
- .exec(UserScenarios.getRandomUser)
-
- setUp(scnToRun.inject(atOnceUsers(numUsers)).throttle(reachRps(throttle) in (rampTime.seconds)).protocols(httpConf)).maxDuration(Settings.duration)
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetUserPagesSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetUserPagesSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetUserPagesSimulation.scala
deleted file mode 100755
index 5d76ca0..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetUserPagesSimulation.scala
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import org.apache.usergrid.helpers.Setup
-import org.apache.usergrid.scenarios.UserScenarios
-import org.apache.usergrid.settings.Settings
-
-/**
- * Posts application users continually to an application. Expects the following parameters
- *
- * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
- * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
- * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
- */
-class GetUserPagesSimulation extends Simulation {
-
- println("Begin setup")
- Setup.setupOrg()
- Setup.setupApplication()
- println("End Setup")
-
-
- setUp(
- UserScenarios.getUserPagesToEnd
- .inject(
- /**
- * injection steps take from this forum post
- * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
- */
- rampUsers(Settings.maxPossibleUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.maxPossibleUsers) during Settings.duration
-
- )).protocols(Settings.httpConf.acceptHeader("application/json"))
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetUsersSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetUsersSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetUsersSimulation.scala
deleted file mode 100755
index a088e27..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/GetUsersSimulation.scala
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import org.apache.usergrid.helpers.Setup
-import org.apache.usergrid.scenarios.UserScenarios
-import org.apache.usergrid.settings.Settings
-
-/**
- * Posts application users continually to an application. Expects the following parameters
- *
- * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
- * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
- * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
- */
-class GetUsersSimulation extends Simulation {
-
- println("Begin setup")
- Setup.setupOrg()
- Setup.setupApplication()
- println("End Setup")
-
-
- setUp(
- UserScenarios.getUsersByUsername
- .inject(
- /**
- * injection steps take from this forum post
- * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
- */
- rampUsers(Settings.maxPossibleUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.maxPossibleUsers) during Settings.duration
-
- )).protocols(Settings.httpConf.acceptHeader("application/json"))
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostCustomEntitySimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostCustomEntitySimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostCustomEntitySimulation.scala
deleted file mode 100644
index ef972ed..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostCustomEntitySimulation.scala
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- *
- * * Licensed to the Apache Software Foundation (ASF) under one or more
- * * contributor license agreements. The ASF licenses this file to You
- * * under the Apache License, Version 2.0 (the "License"); you may not
- * * use this file except in compliance with the License.
- * * You may obtain a copy of the License at
- * *
- * * http://www.apache.org/licenses/LICENSE-2.0
- * *
- * * Unless required by applicable law or agreed to in writing, software
- * * distributed under the License is distributed on an "AS IS" BASIS,
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * * See the License for the specific language governing permissions and
- * * limitations under the License. For additional information regarding
- * * copyright in this work, please see the NOTICE file in the top level
- * * directory of this distribution.
- *
- */
-
-package org.apache.usergrid.simulations
-
-
-import io.gatling.core.scenario.Simulation
-import org.apache.usergrid.helpers.Setup
-import org.apache.usergrid.scenarios.{EntityScenarios, TokenScenarios}
-import java.nio.file.{Paths, Files}
-import io.gatling.core.Predef._
-import org.apache.usergrid.datagenerators.FeederGenerator
-import scala.concurrent.duration._
-import org.apache.usergrid.settings.{Utils, Headers, Settings}
-
-/**
- * PostCustomEntitySimulation - creates lots of custom entities
- *
- * Run this way:
- * mvn gatling:execute -DrampTime=10 -DmaxPossibleUsers=10 -Dduration=120 -Dorg=yourorgname -Dapp=sandbox -Dbaseurl=https://api.usergrid.com -DadminUser=yourusername -DadminPassword='yourpassword' -Dgatling.simulationClass=org.apache.usergrid.simulations.PostCustomEntitySimulation -DcollectionType=yourcollection
- *
- *
- */
-class PostCustomEntitySimulation extends Simulation {
-
- if(!Settings.skipSetup) {
- println("Begin setup")
- println("These aren't the droids you are looking for...")
- //exec(TokenScenarios.getManagementToken)
- println("End Setup")
- }else{
- println("Skipping Setup")
- }
-
- val numEntities:Int = Settings.numEntities
- val collectionType = Settings.collectionType
- println("collection type = " + collectionType)
- val rampTime:Int = Settings.rampTime
- val throttle:Int = Settings.throttle
- val feeder = FeederGenerator.generateCustomEntityInfinite(0)
- val httpConf = Settings.httpConf
-
- val scnToRun = scenario("POST custom entities")
- .feed(feeder)
- .exec(EntityScenarios.postEntity)
-
- /*
- val scnToRun = scenario("POST custom entities")
- .feed(feeder)
- .doIfOrElse(session => session("token").as[String].nonEmpty(session)) {
- exec(EntityScenarios.postEntityWithToken)
- } {
- exec(EntityScenarios.postEntity)
- }
-*/
-
-
- setUp(scnToRun.inject(
- rampUsers(Settings.maxPossibleUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.maxPossibleUsers) during Settings.duration
- ).protocols(httpConf)).maxDuration(Settings.duration)
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostUsersSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostUsersSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostUsersSimulation.scala
deleted file mode 100755
index 5184e92..0000000
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostUsersSimulation.scala
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.simulations
-
-import io.gatling.core.Predef._
-import org.apache.usergrid.helpers.Setup
-import org.apache.usergrid.scenarios.UserScenarios
-import org.apache.usergrid.settings.Settings
-
-/**
- * Posts application users continually to an application. Expects the following parameters
- *
- * -DmaxPossibleUsers : The maximum number of users to be making requests as fast as possible. Think of this as conccurrent users in the system
- * -DrampTime: The amount of time (in seconds) to allow for maxPossibleUsers to be reached. This will add new users linearlly
- * -Dduration: The amount of time (in seconds) to continue to perform requests up with the maxPossibleUsers
- */
-class PostUsersSimulation extends Simulation {
-
- println("Begin setup")
- Setup.setupOrg()
- Setup.setupApplication()
- println("End Setup")
-
-
- setUp(
- UserScenarios.postUsersInfinitely
- .inject(
- /**
- * injection steps take from this forum post
- * https://groups.google.com/forum/#!topic/gatling/JfYHaWCbA-w
- */
- rampUsers(Settings.maxPossibleUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.maxPossibleUsers) during Settings.duration
-
- )).protocols(Settings.httpConf.acceptHeader("application/json"))
-
-}
[08/21] incubator-usergrid git commit: USERGRID-871: base64 issues
with Java 7, will fix
Posted by to...@apache.org.
USERGRID-871: base64 issues with Java 7, will fix
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/f1326fd1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/f1326fd1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/f1326fd1
Branch: refs/heads/two-dot-o-dev
Commit: f1326fd17601096acc1cc38fb7534eba2dee81ba
Parents: c499e42
Author: Mike Dunker <md...@apigee.com>
Authored: Tue Jul 21 17:29:20 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Tue Jul 21 17:29:20 2015 -0700
----------------------------------------------------------------------
.../src/main/scala/org/apache/usergrid/settings/Settings.scala | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f1326fd1/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index 75bed58..72b591f 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -17,7 +17,8 @@
package org.apache.usergrid.settings
import java.nio.charset.StandardCharsets
-import java.util.Base64
+//import java.util.Base64
+
import io.gatling.core.Predef._
import io.gatling.http.Predef._
@@ -51,7 +52,8 @@ object Settings {
val userSeed:Int = Integer.getInteger(ConfigProperties.UserSeed,1).toInt
val appUser = System.getProperty(ConfigProperties.AppUser)
val appUserPassword = System.getProperty(ConfigProperties.AppUserPassword)
- val appUserBase64 = Base64.getEncoder.encodeToString((appUser + ":" + appUserPassword).getBytes(StandardCharsets.UTF_8))
+ //val appUserBase64 = Base64.getEncoder.encodeToString((appUser + ":" + appUserPassword).getBytes(StandardCharsets.UTF_8))
+ val appUserBase64 = "BROKEN FOR NOW"
val numEntities:Int = Integer.getInteger(ConfigProperties.NumEntities, 5000).toInt
val numDevices:Int = Integer.getInteger(ConfigProperties.NumDevices, 4000).toInt
[11/21] incubator-usergrid git commit: USERGRID-871: add update test
and some general cleanup
Posted by to...@apache.org.
USERGRID-871: add update test and some general cleanup
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/5d202d90
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/5d202d90
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/5d202d90
Branch: refs/heads/two-dot-o-dev
Commit: 5d202d90c6ace67f7e0644d6fe5623f11fafb716
Parents: 195449f
Author: Mike Dunker <md...@apigee.com>
Authored: Thu Jul 23 08:07:12 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Thu Jul 23 08:07:12 2015 -0700
----------------------------------------------------------------------
stack/loadtests/runLoadEntities.sh | 4 +-
stack/loadtests/runUpdateEntities.sh | 99 ++++++++++++++++++++
.../datagenerators/EntityDataGenerator.scala | 12 +--
.../datagenerators/FeederGenerator.scala | 48 ++++++----
.../org/apache/usergrid/enums/AuthType.scala | 6 ++
.../usergrid/enums/ConfigProperties.scala | 9 +-
.../usergrid/enums/EndConditionType.scala | 9 +-
.../org/apache/usergrid/enums/EntityType.scala | 9 +-
.../apache/usergrid/enums/ScenarioType.scala | 10 +-
.../org/apache/usergrid/enums/TokenType.scala | 9 +-
.../apache/usergrid/helpers/Extractors.scala | 27 ------
.../org/apache/usergrid/helpers/Setup.scala | 12 +--
.../org/apache/usergrid/helpers/Utils.scala | 2 +-
.../scenarios/ApplicationScenarios.scala | 2 +-
.../scenarios/ConnectionScenarios.scala | 8 +-
.../scenarios/EntityCollectionScenarios.scala | 60 +++++++-----
.../usergrid/scenarios/EntityScenarios.scala | 1 -
.../scenarios/NotificationScenarios.scala | 9 +-
.../usergrid/scenarios/NotifierScenarios.scala | 5 +-
.../scenarios/OrganizationScenarios.scala | 7 +-
.../usergrid/scenarios/TokenScenarios.scala | 11 +--
.../org/apache/usergrid/settings/Headers.scala | 1 -
.../org/apache/usergrid/settings/Settings.scala | 10 +-
.../simulations/ConfigurableSimulation.scala | 47 +++-------
.../simulations/deprecated/AppSimulation.scala | 3 -
.../deprecated/ConnectionsSimulation.scala | 3 -
.../deprecated/SetupSimulation.scala | 3 -
27 files changed, 250 insertions(+), 176 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/runLoadEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runLoadEntities.sh b/stack/loadtests/runLoadEntities.sh
index bee8d1a..d213fd4 100755
--- a/stack/loadtests/runLoadEntities.sh
+++ b/stack/loadtests/runLoadEntities.sh
@@ -37,9 +37,9 @@ mvn compile
#APP=$(date +%s)
ADMIN_USER=superuser
ADMIN_PASSWORD=test
-CREATE_ORG=false
+CREATE_ORG=true
ORG=gatling
-CREATE_APP=false
+CREATE_APP=true
APP=millionentities
COLLECTION_TYPE=trivialentities
SCENARIO_TYPE=loadEntities
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/runUpdateEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runUpdateEntities.sh b/stack/loadtests/runUpdateEntities.sh
new file mode 100755
index 0000000..0963a2d
--- /dev/null
+++ b/stack/loadtests/runUpdateEntities.sh
@@ -0,0 +1,99 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 6 ] || die "At least 6 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) NUM_ENTITIES"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+CONSTANT_USERS_PER_SEC="$4"
+CONSTANT_USERS_DURATION="$5"
+NUM_ENTITIES="$6"
+
+shift 6
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+#APP=$(date +%s)
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
+CREATE_ORG=false
+ORG=gatling
+CREATE_APP=false
+APP=millionentities
+COLLECTION_TYPE=trivialentities
+SCENARIO_TYPE=updateEntities
+# don't load entities as part of setup
+LOAD_ENTITIES=false
+
+SKIP_SETUP=TRUE
+#SEARCH_QUERY=order%20by%20specials%20desc
+#SEARCH_LIMIT=1000
+ENTITY_TYPE=trivial
+ENTITY_PREFIX=trivial
+ENTITY_SEED=1
+AUTH_TYPE=token
+TOKEN_TYPE=management
+END_CONDITION_TYPE=minutesElapsed
+#END_CONDITION_TYPE=requestCount
+END_MINUTES=2
+END_REQUEST_COUNT=100
+
+#Execute the test
+mvn gatling:execute \
+-DskipSetup=${SKIP_SETUP} \
+-DcreateOrg=${CREATE_ORG} \
+-Dorg=${ORG} \
+-DcreateApp=${CREATE_APP} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
+-DloadEntities=${LOAD_ENTITIES} \
+-DnumEntities=${NUM_ENTITIES} \
+-DentityType=${ENTITY_TYPE} \
+-DentityPrefix=${ENTITY_PREFIX} \
+-DentitySeed=${ENTITY_SEED} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
+-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
+-DcollectionType=${COLLECTION_TYPE} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DendConditionType=${END_CONDITION_TYPE} \
+-DendMinutes=${END_MINUTES} \
+-DendRequestCount=${END_REQUEST_COUNT} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
+
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
index 88b81c8..f9fa4fc 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
@@ -14,15 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
- package org.apache.usergrid.datagenerators
+package org.apache.usergrid.datagenerators
- import org.apache.usergrid.enums.EntityType
- import org.apache.usergrid.helpers.Utils
+import org.apache.usergrid.enums.EntityType
+import org.apache.usergrid.helpers.Utils
- import scala.collection.mutable.ArrayBuffer
- import scala.util.parsing.json.JSONObject
+import scala.collection.mutable.ArrayBuffer
+import scala.util.parsing.json.JSONObject
- object EntityDataGenerator {
+object EntityDataGenerator {
def generateBlockUserLists(numUsers: Int): Map[String, String] = {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
index 92444b2..1c80822 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
@@ -14,18 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
- package org.apache.usergrid.datagenerators
+package org.apache.usergrid.datagenerators
- import java.util
- import java.util.UUID
- import java.util.concurrent.atomic.{AtomicInteger, AtomicLong}
- import io.gatling.core.Predef._
- import org.apache.usergrid.helpers.Utils
- import org.apache.usergrid.settings.Settings
- import scala.collection.mutable.ArrayBuffer
- import scala.util.Random
+import java.util.UUID
+import java.util.concurrent.atomic.AtomicInteger
+import io.gatling.core.Predef._
+import org.apache.usergrid.helpers.Utils
+import org.apache.usergrid.settings.Settings
+import scala.collection.mutable.ArrayBuffer
- object FeederGenerator {
+object FeederGenerator {
def generateUserWithGeolocationFeeder(numUsers: Int, radius: Double, centerLatitude: Double, centerLongitude: Double): Array[Map[String, String]] = {
var userArray: ArrayBuffer[Map[String, String]] = new ArrayBuffer[Map[String, String]]
@@ -206,20 +204,32 @@
entityArray.toArray
}
- def generateCustomEntityFeeder(numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Array[Map[String, Any]] = {
- var entityMapArray: ArrayBuffer[Map[String, Any]] = new ArrayBuffer[Map[String, Any]]
+ /*
+ * Gatling doesn't handle feeders running out of data well -- ending test with failure and not building a report.
+ * This feeder will serve data forever, but validEntity will be set to "no" when data has run out. Each user can
+ * then exit in a controlled fashion.
+ */
+ def generateCustomEntityFeeder(numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Feeder[String] =
+ new Feeder[String] {
+ var counter = new AtomicInteger(0)
- for (i <- seed to numEntities+seed-1) {
- val entityName = prefix.concat(i.toString)
+ // runs forever -- users detect when data is done using validEntity field
+ override def hasNext: Boolean = true
+
+ override def next(): Map[String, String] = {
+ val i = counter.getAndIncrement()
+ val seededVal = i + seed
+ val entityName = prefix.concat(seededVal.toString)
val entity = EntityDataGenerator.generateEntity(entityType, entityName)
val entityUrl = Settings.baseCollectionUrl + "/" + entityName
- entityMapArray += Map("entityName" -> entityName, "entity" -> entity, "entityUrl" -> entityUrl)
- }
+ val validEntity = if (i >= numEntities) "no" else "yes"
- entityMapArray.toArray
+ Map("entityName" -> entityName, "entity" -> entity, "entityUrl" -> entityUrl, "validEntity" -> validEntity, "entityNum" -> (i+1).toString)
+ }
}
- def generateCustomEntityFeeder2 (numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Feeder[String] =
+ /*
+ def generateCustomEntityFeeder(numEntities: Int, entityType: String, prefix: String, seed: Int = 1): Feeder[String] =
new Feeder[String] {
var counter = new AtomicInteger(seed)
@@ -237,6 +247,8 @@
}
}
+ */
+
def generateCustomEntityInfiniteFeeder(seed: Int = Settings.entitySeed, entityType: String = Settings.entityType, prefix: String = Settings.entityPrefix): Iterator[String] = {
Iterator.from(seed).map(i=>EntityDataGenerator.generateEntity(entityType, prefix.concat(i.toString)))
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
index 2823d95..6086fdd 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/AuthType.scala
@@ -7,4 +7,10 @@ object AuthType {
val Anonymous = "anonymous"
val Token = "token"
val Basic = "basic"
+
+ val Values = Seq(Anonymous,Token,Basic)
+
+ def isValid(str: String): Boolean = {
+ Values.contains(str)
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
index 56350ee..2f13a12 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
@@ -44,9 +44,16 @@ object ConfigProperties {
val OrgCreationName = "orgCreationName"
val OrgCreationEmail = "orgCreationEmail"
val OrgCreationPassword = "orgCreationPassword"
+ val UpdateProperty = "updateProperty"
+ val UpdateValue = "updateValue"
+
val Values = Seq(Org,App,AdminUser,AdminPassword,BaseUrl,AuthType,TokenType,SkipSetup,CreateOrg,CreateApp,LoadEntities,
ScenarioType,RampUsers,ConstantUsersPerSec,ConstantUsersDuration,UserSeed,AppUser,AppUserPassword,NumEntities,
NumDevices,CollectionType,RampTime,Throttle,RpsTarget,RpsRampTime,HoldDuration,PushNotifier,EntityPrefix,EntityType,
EntitySeed,SearchLimit,SearchQuery,EndConditionType,EndMinutes,EndRequestCount,OrgCreationUsername,OrgCreationName,
- OrgCreationEmail,OrgCreationPassword)
+ OrgCreationEmail,OrgCreationPassword,UpdateProperty,UpdateValue)
+
+ def isValid(str: String): Boolean = {
+ Values.contains(str)
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EndConditionType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EndConditionType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EndConditionType.scala
index 4bbb9cc..2d4bf63 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EndConditionType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EndConditionType.scala
@@ -1,9 +1,12 @@
package org.apache.usergrid.enums
-/**
- * Created by mdunker on 7/21/15.
- */
object EndConditionType {
val MinutesElapsed = "minutesElapsed"
val RequestCount = "requestCount"
+
+ val Values = Seq(MinutesElapsed,RequestCount)
+
+ def isValid(str: String): Boolean = {
+ Values.contains(str)
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
index d17d280..dfb378c 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/EntityType.scala
@@ -1,9 +1,12 @@
package org.apache.usergrid.enums
-/**
- * Created by mdunker on 7/20/15.
- */
object EntityType {
val Trivial = "trivial"
val Basic = "basic"
+
+ val Values = Seq(Trivial,Basic)
+
+ def isValid(str: String): Boolean = {
+ Values.contains(str)
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
index e21a1ee..7dca619 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
@@ -1,11 +1,15 @@
package org.apache.usergrid.enums
-/**
- * Created by mdunker on 7/20/15.
- */
object ScenarioType {
val GetAllByCursor = "getAllByCursor"
val NameRandomInfinite = "nameRandomInfinite"
val LoadEntities = "loadEntities"
val DeleteEntities = "deleteEntities"
+ val UpdateEntities = "updateEntities"
+
+ val Values = Seq(GetAllByCursor,NameRandomInfinite,LoadEntities,DeleteEntities,UpdateEntities)
+
+ def isValid(str: String): Boolean = {
+ Values.contains(str)
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/enums/TokenType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/TokenType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/TokenType.scala
index 4d371e1..456a9cb 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/TokenType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/TokenType.scala
@@ -1,10 +1,13 @@
package org.apache.usergrid.enums
-/**
- * Created by mdunker on 7/20/15.
- */
object TokenType {
val None = "none"
val User = "user"
val Management = "management"
+
+ val Values = Seq(None, User, Management)
+
+ def isValid(str: String): Boolean = {
+ Values.contains(str)
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
index 8de995e..35f75a7 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
@@ -103,31 +103,4 @@ object Extractors {
session => session.set("authType", Settings.authType)
}
- /*
- def injectTokenToSession(authType: String, tokenType: String): Expression[Session] = {
- session => {
- if (authType == AuthType.Token && tokenType == TokenType.User) {
- session.set("authToken", Setup.getUserToken)
- } else if (authType == AuthType.Token && tokenType == TokenType.Management) {
- session.set("authToken", Setup.getManagementToken())
- } else {
- session.set("authToken", "")
- }
- }
- }
-
- def injectAuth(authType: String, tokenType: String): Expression[Session] = {
- session => {
- if (authType == AuthType.Token && tokenType == TokenType.User) {
- session.set("authToken", Setup.getUserToken)
- } else if (authType == AuthType.Token && tokenType == TokenType.Management) {
- session.set("authToken", Setup.getManagementToken())
- } else {
- session.set("authToken", "")
- }
- session.set("authType", authType)
- }
- }
- */
-
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
index af3aabb..d90353a 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
@@ -20,24 +20,14 @@
package org.apache.usergrid.helpers
-import java.util
-
import com.fasterxml.jackson.databind.ObjectMapper
import com.ning.http.client.{ListenableFuture, AsyncHttpClient,Response}
-import io.gatling.core.Predef._
-import io.gatling.http.Predef._
-import io.gatling.http.request.StringBody
-import io.gatling.jsonpath.JsonPath
import org.apache.usergrid.datagenerators.FeederGenerator
import org.apache.usergrid.enums.TokenType
-import org.apache.usergrid.settings.{Settings, Headers}
+import org.apache.usergrid.settings.Settings
import scala.collection.mutable.ArrayBuffer
-import scala.util.parsing.json.JSONObject
-/**
- * Classy class class.
- */
object Setup {
var managementToken:String = null
val client = new AsyncHttpClient()
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
index 82061d6..16ade96 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
- package org.apache.usergrid.helpers
+package org.apache.usergrid.helpers
import scala.util.Random
import scala.util.parsing.json.JSONObject
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
index 4150513..44fe118 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
@@ -18,7 +18,7 @@
import io.gatling.core.Predef._
import io.gatling.http.Predef._
- import org.apache.usergrid.settings.{Settings, Headers}
+import org.apache.usergrid.settings.{Settings, Headers}
/**
* Performs organization registration
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
index b2827bb..0ff20a0 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
@@ -14,14 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
- package org.apache.usergrid.scenarios
+package org.apache.usergrid.scenarios
import io.gatling.core.Predef._
import io.gatling.http.Predef._
- import org.apache.usergrid.datagenerators.FeederGenerator
- import org.apache.usergrid.settings.{Settings, Headers}
+import org.apache.usergrid.datagenerators.FeederGenerator
+import org.apache.usergrid.settings.{Settings, Headers}
- object ConnectionScenarios {
+object ConnectionScenarios {
val postUserConnection = exec(
http("POST connection")
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
index 592a507..1dd534c 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -147,56 +147,64 @@ object EntityCollectionScenarios {
.exec(injectTokenIntoSession())
.exec(injectAuthType())
.asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
- feed(FeederGenerator.generateCustomEntityFeeder2(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
+ feed(FeederGenerator.generateCustomEntityFeeder(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
+ .exec{
+ session => if (session("validEntity").as[String] == "yes") { println("Loading entity #" + session("entityNum").as[String]) }
+ session
+ }
.doIf(session => session("validEntity").as[String] == "yes") {
exec(loadEntity)
}
}
- //.rendezVous(Settings.totalUsers)
/*
- val loadEntity = exec(
- http("POST load entity")
- .post(Settings.baseCollectionUrl)
+ * Delete entities
+ */
+ val deleteEntity = exec(
+ http("DELETE entity")
+ .delete("""${entityUrl}""")
.headers(Headers.authToken)
- .body(StringBody("""${entity}"""))
- .check(status.in(Seq(200,400)))
+ // 200 for success, 404 if doesn't exist
+ .check(status.in(Seq(200)))
)
- val loadEntities = scenario("Load entities")
+ val deleteEntities = scenario("Delete entities")
.exec(injectTokenIntoSession())
.exec(injectAuthType())
- .forever(
- feed(FeederGenerator.generateCustomEntityFeeder(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
- .exec(loadEntity)
- )
- */
-
+ .asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
+ feed(FeederGenerator.generateCustomEntityFeeder(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
+ .exec {
+ session => if (session("validEntity").as[String] == "yes") { println("Deleting entity #" + session("entityNum").as[String]) }
+ session
+ }
+ .doIf(session => session("validEntity").as[String] == "yes") {
+ exec(deleteEntity)
+ }
+ }
/*
* Delete entities
*/
- val deleteEntity = exec(
- http("DELETE entity")
- .delete("""${entityUrl}""")
+ val updateEntity = exec(
+ http("UPDATE entity")
+ .put("""${entityUrl}""")
.headers(Headers.authToken)
+ .body(StringBody(Settings.updateBody))
// 200 for success, 404 if doesn't exist
.check(status.in(Seq(200)))
)
- val deleteEntities = scenario("Delete entities")
+ val updateEntities = scenario("Update entities")
.exec(injectTokenIntoSession())
.exec(injectAuthType())
.asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
- feed(FeederGenerator.generateCustomEntityFeeder2(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
+ feed(FeederGenerator.generateCustomEntityFeeder(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
+ .exec {
+ session => if (session("validEntity").as[String] == "yes") { println("Updating entity #" + session("entityNum").as[String]) }
+ session
+ }
.doIf(session => session("validEntity").as[String] == "yes") {
- exec(deleteEntity)
+ exec(updateEntity)
}
}
- /*
- val createEntityBatchScenario = scenario("Create custom entities")
- .exec(injectStaticTokenToSession())
- .feed(FeederGenerator.generateCustomEntityCreateFeeder(Settings.entityPrefix, Settings.numEntities))
- .exec(EntityScenarios.postEntity)
- */
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
index dd21e3c..83a648e 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
@@ -22,7 +22,6 @@ import org.apache.usergrid.datagenerators.{EntityDataGenerator, FeederGenerator}
import org.apache.usergrid.helpers.{Extractors,Utils}
import org.apache.usergrid.settings.{Headers, Settings}
-import scala.util.parsing.json.JSONObject
/**
* Provides CRUD methods for custom entities
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
index 92998d0..5471426 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
@@ -14,17 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
- package org.apache.usergrid.scenarios
-
-import java.io.File
-import java.nio.file.{Paths, Files}
+package org.apache.usergrid.scenarios
import io.gatling.core.Predef._
import io.gatling.http.Predef._
- import org.apache.usergrid.datagenerators.FeederGenerator
- import scala.concurrent.duration._
-
-import scala.io.Source
import org.apache.usergrid.settings.{Headers, Settings}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
index b2e32e5..9718ad3 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
@@ -14,12 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
- package org.apache.usergrid.scenarios
+package org.apache.usergrid.scenarios
import io.gatling.core.Predef._
import io.gatling.http.Predef._
- import org.apache.usergrid.settings.{Headers, Settings}
- import scala.concurrent.duration._
+import org.apache.usergrid.settings.{Headers, Settings}
/**
*
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
index 1cdc25c..0c1beef 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
@@ -14,13 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
- package org.apache.usergrid.scenarios
+package org.apache.usergrid.scenarios
import io.gatling.core.Predef._
import io.gatling.http.Predef._
- import org.apache.usergrid.datagenerators.FeederGenerator
- import org.apache.usergrid.settings.{Settings, Headers}
- import scala.concurrent.duration._
+import org.apache.usergrid.datagenerators.FeederGenerator
+import org.apache.usergrid.settings.{Settings, Headers}
/**
* Performs organization registration
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
index 4385797..d0eca02 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
@@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
- package org.apache.usergrid.scenarios
+package org.apache.usergrid.scenarios
import io.gatling.core.Predef._
- import io.gatling.http.Predef._
- import io.gatling.http.request.StringBody
- import org.apache.usergrid.settings.Headers
- import org.apache.usergrid.settings.Settings
+import io.gatling.http.Predef._
+import io.gatling.http.request.StringBody
+import org.apache.usergrid.settings.Headers
+import org.apache.usergrid.settings.Settings
- import scala.concurrent.duration._
/**
* Class that will get the token and insert it into the test session.
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
index db6062f..04c4d3b 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Headers.scala
@@ -17,7 +17,6 @@
package org.apache.usergrid.settings
import org.apache.usergrid.enums.AuthType
- import org.apache.usergrid.helpers.Setup
/**
*
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index 3992c68..a7669a1 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -17,14 +17,13 @@
package org.apache.usergrid.settings
import java.nio.charset.StandardCharsets
-import java.util.Base64
+import java.util.{Date, Base64}
-import io.gatling.core.Predef._
import io.gatling.http.Predef._
import org.apache.usergrid.datagenerators.FeederGenerator
import org.apache.usergrid.enums._
-import scala.concurrent.duration._
+import org.apache.usergrid.helpers.Utils
object Settings {
@@ -92,6 +91,11 @@ object Settings {
val orgCreationName = System.getProperty(ConfigProperties.OrgCreationName, orgCreationUsername)
val orgCreationPassword = System.getProperty(ConfigProperties.OrgCreationPassword, "test")
+ // Entity update
+ val updateProperty = System.getProperty(ConfigProperties.UpdateProperty, "updateProp")
+ val updateValue = System.getProperty(ConfigProperties.UpdateValue, new Date().toString)
+ val updateBody = Utils.toJSONStr(Map(updateProperty -> updateValue))
+
def getUserFeeder():Array[Map[String, String]]= {
FeederGenerator.generateUserWithGeolocationFeeder(totalUsers, userLocationRadius, centerLatitude, centerLongitude)
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
index 4b0f96a..2e13a6c 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
@@ -17,6 +17,7 @@
package org.apache.usergrid.simulations
import io.gatling.core.Predef._
+import io.gatling.core.structure.ScenarioBuilder
import org.apache.usergrid.enums.ScenarioType
import org.apache.usergrid.helpers.Setup
import org.apache.usergrid.scenarios.EntityCollectionScenarios
@@ -33,6 +34,17 @@ import org.apache.usergrid.settings.Settings
* getAllByCursor scenario: searchQuery, searchLimit
*/
class ConfigurableSimulation extends Simulation {
+
+ def getScenario(scenarioType: String): ScenarioBuilder = {
+ scenarioType match {
+ case ScenarioType.LoadEntities => EntityCollectionScenarios.loadEntities
+ case ScenarioType.DeleteEntities => EntityCollectionScenarios.deleteEntities
+ case ScenarioType.UpdateEntities => EntityCollectionScenarios.updateEntities
+ case ScenarioType.GetAllByCursor => EntityCollectionScenarios.getEntityPagesToEnd
+ case ScenarioType.NameRandomInfinite => EntityCollectionScenarios.getRandomEntitiesByName
+ }
+ }
+
before(
if (!Settings.skipSetup) {
println("Begin setup")
@@ -44,43 +56,14 @@ class ConfigurableSimulation extends Simulation {
}
)
-
-
Settings.setTestStartTime()
- if (Settings.scenarioType == ScenarioType.LoadEntities) {
- setUp(
- EntityCollectionScenarios.loadEntities
- .inject(
- rampUsers(Settings.rampUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
-
- ).protocols(Settings.httpConf.acceptHeader("application/json"))
- )
- } else if (Settings.scenarioType == ScenarioType.DeleteEntities) {
- setUp(
- EntityCollectionScenarios.deleteEntities
- .inject(
- rampUsers(Settings.rampUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
-
- ).protocols(Settings.httpConf.acceptHeader("application/json"))
- )
- } else if (Settings.scenarioType == ScenarioType.GetAllByCursor) {
- setUp(
- EntityCollectionScenarios.getEntityPagesToEnd
- .inject(
- rampUsers(Settings.rampUsers) over Settings.rampTime,
- constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
-
- ).protocols(Settings.httpConf.acceptHeader("application/json"))
- )
- } else if (Settings.scenarioType == ScenarioType.NameRandomInfinite) {
+ if (ScenarioType.isValid(Settings.scenarioType)) {
+ val scenario: ScenarioBuilder = getScenario(Settings.scenarioType)
setUp(
- EntityCollectionScenarios.getRandomEntitiesByName
+ scenario
.inject(
rampUsers(Settings.rampUsers) over Settings.rampTime,
constantUsersPerSec(Settings.constantUsersPerSec) during Settings.constantUsersDuration
-
).protocols(Settings.httpConf.acceptHeader("application/json"))
)
} else {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/AppSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/AppSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/AppSimulation.scala
index 7f1af08..a66f6b7 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/AppSimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/AppSimulation.scala
@@ -28,9 +28,6 @@ import org.apache.usergrid.settings.Settings
import scala.concurrent.duration._
-/**
- * Classy class class.
- */
class AppSimulation extends Simulation {
println("Begin setup")
Setup.setupNotifier()
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/ConnectionsSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/ConnectionsSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/ConnectionsSimulation.scala
index 8e3cd57..69ff0b1 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/ConnectionsSimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/ConnectionsSimulation.scala
@@ -28,9 +28,6 @@ import org.apache.usergrid.settings.Settings
import scala.concurrent.duration._
-/**
- * Classy class class.
- */
class ConnectionsSimulation extends Simulation{
if(!Settings.skipSetup) {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d202d90/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/SetupSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/SetupSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/SetupSimulation.scala
index 484fb32..8032228 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/SetupSimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/SetupSimulation.scala
@@ -27,9 +27,6 @@ import org.apache.usergrid.settings.Settings
import scala.concurrent.duration._
-/**
- * Classy class class.
- */
class SetupSimulation extends Simulation{
println("Begin setup")
[20/21] incubator-usergrid git commit: USERGRID-871: synchronize the
uuid Map
Posted by to...@apache.org.
USERGRID-871: synchronize the uuid Map
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/b038b46f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/b038b46f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/b038b46f
Branch: refs/heads/two-dot-o-dev
Commit: b038b46f92dfc30f621d773063dac662ba14a67f
Parents: d6368af
Author: Mike Dunker <md...@apigee.com>
Authored: Mon Aug 3 12:27:59 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Mon Aug 3 12:27:59 2015 -0700
----------------------------------------------------------------------
stack/loadtests/runAuditGetCollectionEntities.sh | 5 +++--
.../src/main/scala/org/apache/usergrid/settings/Settings.scala | 6 +++++-
2 files changed, 8 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b038b46f/stack/loadtests/runAuditGetCollectionEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runAuditGetCollectionEntities.sh b/stack/loadtests/runAuditGetCollectionEntities.sh
index 673c2b7..b79b609 100755
--- a/stack/loadtests/runAuditGetCollectionEntities.sh
+++ b/stack/loadtests/runAuditGetCollectionEntities.sh
@@ -38,8 +38,9 @@ ADMIN_PASSWORD=test
ORG=gatling
APP=millionentities
SCENARIO_TYPE=auditGetCollectionEntities
-SEARCH_LIMIT=177
-SEARCH_QUERY=order%20by%20name
+SEARCH_LIMIT=1000
+#SEARCH_QUERY=order%20by%20name
+SEARCH_QUERY=
AUTH_TYPE=token
TOKEN_TYPE=management
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b038b46f/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index 663d4d6..0714698 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -230,7 +230,11 @@ object Settings {
private var uuidMap: Map[Int, String] = Map()
def addUuid(num: Int, uuid: String): Unit = {
- if (captureUuids) uuidMap += (num -> uuid)
+ if (captureUuids) {
+ uuidMap.synchronized {
+ uuidMap += (num -> uuid)
+ }
+ }
// println(s"UUID: ${name},${uuid}")
}
[12/21] incubator-usergrid git commit: Merge remote-tracking branch
'upstream/two-dot-o-dev' into two-dot-o-dev
Posted by to...@apache.org.
Merge remote-tracking branch 'upstream/two-dot-o-dev' into two-dot-o-dev
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/eec8175b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/eec8175b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/eec8175b
Branch: refs/heads/two-dot-o-dev
Commit: eec8175b45e1945df4983e91a627c0deb1a1fcf9
Parents: 5d202d9 54fccac
Author: Mike Dunker <md...@apigee.com>
Authored: Thu Jul 23 12:29:47 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Thu Jul 23 12:29:47 2015 -0700
----------------------------------------------------------------------
.gitignore | 4 +
CHANGELOG | 3 -
LICENSE | 10 +
stack/LICENSE-2.0.txt | 202 -------
.../main/resources/usergrid-default.properties | 4 +
.../corepersistence/CpEntityManager.java | 122 +++--
.../corepersistence/CpEntityManagerFactory.java | 6 +-
.../index/ApplicationIndexLocationStrategy.java | 2 +-
.../index/ReplicatedIndexLocationStrategy.java | 2 +-
.../usergrid/persistence/EntityManager.java | 5 +
.../apache/usergrid/persistence/Results.java | 4 +
.../usergrid/persistence/CollectionIT.java | 84 ++-
.../MvccEntitySerializationStrategyV2Impl.java | 21 +-
.../MvccEntitySerializationStrategyV3Impl.java | 47 +-
.../core/astyanax/AstyanaxKeyspaceProvider.java | 1 +
.../persistence/core/astyanax/CassandraFig.java | 3 +
.../persistence/core/rx/RxSchedulerFig.java | 9 +
.../index/impl/EsEntityIndexImpl.java | 2 +
.../persistence/query/tree/GrammarTreeTest.java | 32 ++
stack/pom.xml | 3 +-
.../apache/usergrid/rest/AbstractRestIT.java | 509 ------------------
.../java/org/apache/usergrid/rest/BasicIT.java | 6 +-
.../apache/usergrid/rest/IndexResourceIT.java | 15 +-
.../apache/usergrid/rest/NotificationsIT.java | 10 +-
.../apache/usergrid/rest/PartialUpdateTest.java | 4 +-
.../apache/usergrid/rest/SystemResourceIT.java | 8 +-
.../apache/usergrid/rest/TestContextSetup.java | 81 ---
.../rest/applications/ApplicationCreateIT.java | 12 +-
.../rest/applications/ApplicationDeleteIT.java | 12 +-
.../applications/ApplicationResourceIT.java | 6 +-
.../applications/assets/AssetResourceIT.java | 8 +-
.../collection/BrowserCompatibilityTest.java | 11 +-
.../collection/CollectionsResourceIT.java | 43 +-
.../collection/DuplicateNameIT.java | 4 +-
.../activities/ActivityResourceIT.java | 6 +-
.../collection/activities/PutTest.java | 11 +-
.../collection/devices/DevicesResourceIT.java | 8 +-
.../collection/groups/GroupResourceIT.java | 6 +-
.../collection/paging/PagingResourceIT.java | 12 +-
.../users/ConnectionResourceTest.java | 8 +-
.../collection/users/OwnershipResourceIT.java | 6 +-
.../collection/users/PermissionsResourceIT.java | 4 +-
.../collection/users/RetrieveUsersTest.java | 10 +-
.../collection/users/UserResourceIT.java | 6 +-
.../events/ApplicationRequestCounterIT.java | 8 +-
.../applications/events/EventsResourceIT.java | 96 ++--
.../applications/queries/AndOrQueryTest.java | 37 +-
.../queries/BadGrammarQueryTest.java | 6 +-
.../applications/queries/BasicGeoTests.java | 38 +-
.../applications/queries/GeoPagingTest.java | 8 +-
.../applications/queries/MatrixQueryTests.java | 10 +-
.../rest/applications/queries/OrderByTest.java | 18 +-
.../applications/queries/QueryTestBase.java | 6 +-
.../rest/applications/utils/TestUtils.java | 4 +-
.../rest/applications/utils/UserRepo.java | 4 +-
.../rest/filters/ContentTypeResourceIT.java | 8 +-
.../usergrid/rest/management/AccessTokenIT.java | 10 +-
.../usergrid/rest/management/AdminUsersIT.java | 59 +-
.../rest/management/ExportResourceIT.java | 7 +-
.../rest/management/ImportResourceIT.java | 12 +-
.../rest/management/ManagementResourceIT.java | 16 +-
.../rest/management/OrganizationsIT.java | 6 +-
.../rest/management/RegistrationIT.java | 19 +-
.../organizations/AdminEmailEncodingIT.java | 10 +-
.../applications/ApplicationsIT.java | 91 ----
.../rest/test/PropertiesResourceIT.java | 80 ---
.../rest/test/resource/AbstractRestIT.java | 184 +++++++
.../rest/test/resource/ClientSetup.java | 172 ++++++
.../rest/test/resource/CollectionResource.java | 27 -
.../usergrid/rest/test/resource/Connection.java | 61 ---
.../rest/test/resource/CustomCollection.java | 32 --
.../usergrid/rest/test/resource/DumbClient.java | 58 ++
.../rest/test/resource/EntityResource.java | 110 ----
.../rest/test/resource/MatrixResource.java | 64 ---
.../apache/usergrid/rest/test/resource/Me.java | 36 --
.../rest/test/resource/NamedResource.java | 195 -------
.../usergrid/rest/test/resource/README.md | 110 ++++
.../usergrid/rest/test/resource/RestClient.java | 134 +++++
.../rest/test/resource/RootResource.java | 65 ---
.../rest/test/resource/SetResource.java | 96 ----
.../rest/test/resource/TestContext.java | 256 ---------
.../rest/test/resource/TestOrganization.java | 55 --
.../test/resource/TestPropertiesResource.java | 47 ++
.../rest/test/resource/ValueResource.java | 328 ------------
.../rest/test/resource/app/Application.java | 86 ---
.../rest/test/resource/app/Collection.java | 81 ---
.../usergrid/rest/test/resource/app/Device.java | 49 --
.../usergrid/rest/test/resource/app/Group.java | 56 --
.../test/resource/app/GroupsCollection.java | 66 ---
.../usergrid/rest/test/resource/app/Role.java | 56 --
.../rest/test/resource/app/RolesCollection.java | 64 ---
.../usergrid/rest/test/resource/app/User.java | 55 --
.../rest/test/resource/app/UsersCollection.java | 86 ---
.../resource/app/queue/DevicesCollection.java | 37 --
.../rest/test/resource/app/queue/Queue.java | 193 -------
.../resource/app/queue/QueuesCollection.java | 36 --
.../app/queue/SubscribersCollection.java | 61 ---
.../test/resource/app/queue/Transaction.java | 84 ---
.../app/queue/TransactionsCollection.java | 36 --
.../endpoints/ApplicationsResource.java | 73 +++
.../resource/endpoints/CollectionEndpoint.java | 356 ++++++++++++
.../resource/endpoints/DatabaseResource.java | 39 ++
.../test/resource/endpoints/EntityEndpoint.java | 174 ++++++
.../test/resource/endpoints/NamedResource.java | 358 +++++++++++++
.../endpoints/OrganizationResource.java | 49 ++
.../test/resource/endpoints/RootResource.java | 86 +++
.../test/resource/endpoints/SetupResource.java | 52 ++
.../test/resource/endpoints/SystemResource.java | 57 ++
.../test/resource/endpoints/TokenResource.java | 89 +++
.../test/resource/endpoints/UrlResource.java | 44 ++
.../endpoints/mgmt/ApplicationResource.java | 105 ++++
.../endpoints/mgmt/ApplicationsResource.java | 65 +++
.../endpoints/mgmt/AuthorizeResource.java | 59 ++
.../endpoints/mgmt/ConfirmResource.java | 46 ++
.../endpoints/mgmt/CredentialsResource.java | 53 ++
.../resource/endpoints/mgmt/FeedResource.java | 49 ++
.../endpoints/mgmt/ManagementResource.java | 60 +++
.../endpoints/mgmt/ManagementResponse.java | 72 +++
.../resource/endpoints/mgmt/MeResource.java | 36 ++
.../resource/endpoints/mgmt/OrgResource.java | 167 ++++++
.../mgmt/OrganizationApplicationResponse.java | 60 +++
.../endpoints/mgmt/OrganizationResource.java | 80 +++
.../endpoints/mgmt/PasswordResource.java | 45 ++
.../endpoints/mgmt/ReactivateResource.java | 46 ++
.../resource/endpoints/mgmt/ResetResource.java | 42 ++
.../endpoints/mgmt/RevokeTokenResource.java | 32 ++
.../endpoints/mgmt/RevokeTokensResource.java | 33 ++
.../resource/endpoints/mgmt/TokenResource.java | 71 +++
.../resource/endpoints/mgmt/UserResource.java | 88 +++
.../resource/endpoints/mgmt/UsersResource.java | 57 ++
.../rest/test/resource/mgmt/Application.java | 49 --
.../resource/mgmt/ApplicationsCollection.java | 53 --
.../rest/test/resource/mgmt/Management.java | 98 ----
.../rest/test/resource/mgmt/Organization.java | 60 ---
.../resource/mgmt/OrganizationsCollection.java | 74 ---
.../test/resource/model/ActivityEntity.java | 49 ++
.../rest/test/resource/model/ApiResponse.java | 223 ++++++++
.../rest/test/resource/model/Application.java | 39 ++
.../resource/model/ChangePasswordEntity.java | 33 ++
.../rest/test/resource/model/Collection.java | 98 ++++
.../rest/test/resource/model/Credentials.java | 47 ++
.../rest/test/resource/model/Entity.java | 213 ++++++++
.../rest/test/resource/model/Organization.java | 119 ++++
.../test/resource/model/QueryParameters.java | 93 ++++
.../rest/test/resource/model/Token.java | 81 +++
.../usergrid/rest/test/resource/model/User.java | 101 ++++
.../rest/test/resource/state/ClientContext.java | 39 ++
.../test/resource2point0/AbstractRestIT.java | 184 -------
.../rest/test/resource2point0/ClientSetup.java | 172 ------
.../rest/test/resource2point0/DumbClient.java | 58 --
.../rest/test/resource2point0/README.md | 111 ----
.../rest/test/resource2point0/RestClient.java | 134 -----
.../resource2point0/TestPropertiesResource.java | 47 --
.../endpoints/ApplicationsResource.java | 77 ---
.../endpoints/CollectionEndpoint.java | 357 ------------
.../endpoints/DatabaseResource.java | 39 --
.../endpoints/EntityEndpoint.java | 174 ------
.../endpoints/NamedResource.java | 356 ------------
.../endpoints/OrganizationResource.java | 49 --
.../resource2point0/endpoints/RootResource.java | 86 ---
.../endpoints/SetupResource.java | 52 --
.../endpoints/SystemResource.java | 57 --
.../endpoints/TokenResource.java | 89 ---
.../resource2point0/endpoints/UrlResource.java | 44 --
.../endpoints/mgmt/ApplicationResource.java | 105 ----
.../endpoints/mgmt/ApplicationsResource.java | 65 ---
.../endpoints/mgmt/AuthorizeResource.java | 59 --
.../endpoints/mgmt/ConfirmResource.java | 46 --
.../endpoints/mgmt/CredentialsResource.java | 53 --
.../endpoints/mgmt/FeedResource.java | 49 --
.../endpoints/mgmt/ManagementResource.java | 60 ---
.../endpoints/mgmt/ManagementResponse.java | 72 ---
.../endpoints/mgmt/MeResource.java | 36 --
.../endpoints/mgmt/OrgResource.java | 167 ------
.../mgmt/OrganizationApplicationResponse.java | 60 ---
.../endpoints/mgmt/OrganizationResource.java | 80 ---
.../endpoints/mgmt/PasswordResource.java | 45 --
.../endpoints/mgmt/ReactivateResource.java | 46 --
.../endpoints/mgmt/ResetResource.java | 42 --
.../endpoints/mgmt/RevokeTokenResource.java | 32 --
.../endpoints/mgmt/RevokeTokensResource.java | 33 --
.../endpoints/mgmt/TokenResource.java | 71 ---
.../endpoints/mgmt/UserResource.java | 88 ---
.../endpoints/mgmt/UsersResource.java | 57 --
.../resource2point0/model/ActivityEntity.java | 49 --
.../test/resource2point0/model/ApiResponse.java | 219 --------
.../test/resource2point0/model/Application.java | 39 --
.../model/ChangePasswordEntity.java | 33 --
.../test/resource2point0/model/Collection.java | 98 ----
.../test/resource2point0/model/Credentials.java | 47 --
.../rest/test/resource2point0/model/Entity.java | 212 --------
.../resource2point0/model/Organization.java | 119 ----
.../resource2point0/model/QueryParameters.java | 93 ----
.../rest/test/resource2point0/model/Token.java | 81 ---
.../rest/test/resource2point0/model/User.java | 101 ----
.../resource2point0/state/ClientContext.java | 39 --
.../rest/test/security/TestAdminUser.java | 63 ---
.../rest/test/security/TestAppUser.java | 63 ---
.../usergrid/rest/test/security/TestUser.java | 132 -----
.../src/test/resources/cat-larger-than-6mb.jpg | Bin 9799257 -> 0 bytes
.../src/test/resources/ship-larger-than-6mb.gif | Bin 0 -> 7407487 bytes
stack/rest_integration_tests/README.md | 19 +
stack/rest_integration_tests/config/default.js | 37 ++
stack/rest_integration_tests/config/index.js | 25 +
stack/rest_integration_tests/index.js | 20 +
stack/rest_integration_tests/lib/connections.js | 132 +++++
stack/rest_integration_tests/lib/entities.js | 125 +++++
.../rest_integration_tests/lib/notifications.js | 48 ++
stack/rest_integration_tests/lib/random.js | 74 +++
stack/rest_integration_tests/lib/response.js | 30 ++
stack/rest_integration_tests/lib/token.js | 49 ++
stack/rest_integration_tests/lib/urls.js | 37 ++
stack/rest_integration_tests/lib/users.js | 82 +++
stack/rest_integration_tests/package.json | 17 +
.../test/authentication/management.js | 38 ++
.../test/authentication/org.js | 37 ++
.../test/authentication/resetPassword.js | 78 +++
.../test/authentication/user.js | 40 ++
.../test/connections/create.js | 49 ++
.../test/connections/delete.js | 77 +++
.../test/connections/get.js | 82 +++
.../test/entities/create.js | 38 ++
.../test/entities/deleteAll.js | 37 ++
.../rest_integration_tests/test/entities/get.js | 51 ++
.../test/entities/update.js | 43 ++
stack/rest_integration_tests/test/main.js | 72 +++
stack/rest_integration_tests/test/mocha.opts | 3 +
.../test/notifications/create.js | 36 ++
.../test/queries/comparison.js | 58 ++
.../test/queries/contains.js | 116 ++++
.../test/queries/equals.js | 54 ++
.../test/queries/location.js | 42 ++
.../test/queries/order.js | 82 +++
stack/rest_integration_tests/test/setup.js | 103 ++++
stack/rest_integration_tests/test/teardown.js | 65 +++
.../rest_integration_tests/test/users/create.js | 45 ++
.../management/AccountCreationProps.java | 6 +-
.../cassandra/ManagementServiceImpl.java | 158 ++----
.../usergrid/services/AbstractService.java | 281 ++++++----
.../apache/usergrid/management/EmailFlowIT.java | 73 +--
stack/tools/pom.xml | 6 +
.../org/apache/usergrid/tools/AppAudit.java | 30 +-
.../java/org/apache/usergrid/tools/Cli.java | 6 +-
.../apache/usergrid/tools/DupAdminRepair.java | 34 +-
.../org/apache/usergrid/tools/DupOrgRepair.java | 36 +-
.../apache/usergrid/tools/EntityCleanup.java | 178 ------
.../org/apache/usergrid/tools/EntityUpdate.java | 25 +-
.../org/apache/usergrid/tools/ExportAdmins.java | 164 +++---
.../org/apache/usergrid/tools/ExportApp.java | 536 +++++++++++++++++++
.../usergrid/tools/ExportDataCreator.java | 244 +++++++--
.../usergrid/tools/ExportingToolBase.java | 2 +-
.../org/apache/usergrid/tools/ImportAdmins.java | 278 +++++++---
.../org/apache/usergrid/tools/ToolBase.java | 6 +-
.../org/apache/usergrid/tools/UserManager.java | 22 +
stack/tools/src/main/resources/log4j.properties | 6 +
.../apache/usergrid/tools/ExportAppTest.java | 118 ++++
.../usergrid/tools/ExportImportAdminsTest.java | 71 ++-
...adata.usergrid-management.1433331614293.json | 52 ++
...users.usergrid-management.1433331614293.json | 12 +
259 files changed, 8615 insertions(+), 9523 deletions(-)
----------------------------------------------------------------------
[15/21] incubator-usergrid git commit: USERGRID-871: sort UUID map
before writing
Posted by to...@apache.org.
USERGRID-871: sort UUID map before writing
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/0a0ef1b9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/0a0ef1b9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/0a0ef1b9
Branch: refs/heads/two-dot-o-dev
Commit: 0a0ef1b91c5dce394c6358b75e2e5ff1e5a0ba43
Parents: af446be
Author: Mike Dunker <md...@apigee.com>
Authored: Thu Jul 30 09:33:17 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Thu Jul 30 09:33:17 2015 -0700
----------------------------------------------------------------------
.../usergrid/scenarios/EntityCollectionScenarios.scala | 6 +++---
.../scala/org/apache/usergrid/settings/Settings.scala | 11 ++++++-----
stack/loadtests/src/test/resources/logback-test.xml | 3 ++-
3 files changed, 11 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0a0ef1b9/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
index 4e37842..b661d9c 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -196,7 +196,7 @@ object EntityCollectionScenarios {
// 200 for success, 400 if already exists
.check(status.in(Seq(200)), extractCreateUuid(SessionVarUuid)))
.exec(session => {
- Settings.addUuid(session("entityNum").as[String], session(SessionVarUuid).as[String])
+ Settings.addUuid(session("entityNum").as[String].toInt, session(SessionVarUuid).as[String])
session
})
}
@@ -234,10 +234,10 @@ object EntityCollectionScenarios {
.exec(injectAuthType())
.asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
feed(FeederGenerator.generateCustomEntityFeeder(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
- .exec {
+ /*.exec {
session => if (session("validEntity").as[String] == "yes") { println("Deleting entity #" + session("entityNum").as[String]) }
session
- }
+ }*/
.doIf(session => session("validEntity").as[String] == "yes") {
exec(deleteEntity)
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0a0ef1b9/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index dc7ff73..387fd24 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -158,9 +158,9 @@ object Settings {
val feedUuidFilename = if (feedUuids) uuidFilename else dummyCsv
val purgeUsers:Int = initIntSetting(ConfigProperties.PurgeUsers)
- private var uuidMap: Map[String, String] = Map()
- def addUuid(name: String, uuid: String): Unit = {
- if (captureUuids) uuidMap += (name -> uuid)
+ private var uuidMap: Map[Int, String] = Map()
+ def addUuid(num: Int, uuid: String): Unit = {
+ if (captureUuids) uuidMap += (num -> uuid)
// println(s"UUID: ${name},${uuid}")
}
@@ -171,8 +171,9 @@ object Settings {
new PrintWriter(fos, false)
}
writer.println("name,uuid")
- uuidMap.keys.foreach { name =>
- writer.println(s"${Settings.entityPrefix}${name},${uuidMap(name)}")
+ val uuidList: List[(Int, String)] = uuidMap.toList.sortBy(l => l._1)
+ uuidList.foreach { l =>
+ writer.println(s"${Settings.entityPrefix}${l._1},${l._2}")
}
writer.flush()
writer.close()
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0a0ef1b9/stack/loadtests/src/test/resources/logback-test.xml
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/resources/logback-test.xml b/stack/loadtests/src/test/resources/logback-test.xml
index 5ad4ea3..dd39a3e 100644
--- a/stack/loadtests/src/test/resources/logback-test.xml
+++ b/stack/loadtests/src/test/resources/logback-test.xml
@@ -27,8 +27,9 @@
<!-- Uncomment for logging ALL HTTP request and responses -->
<!-- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="TRACE" /> -->
+ <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="TRACE" />
<!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="DEBUG" />
+ <!-- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="DEBUG" /> -->
<!-- <logger name="io.gatling.http" level="TRACE" /> -->
<!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
[14/21] incubator-usergrid git commit: USERGRID-871: clean up
settings + overall cleanup
Posted by to...@apache.org.
USERGRID-871: clean up settings + overall cleanup
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/af446bee
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/af446bee
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/af446bee
Branch: refs/heads/two-dot-o-dev
Commit: af446bee546bc8378ffde17014bfbe77c69b6528
Parents: bfc2be2
Author: Mike Dunker <md...@apigee.com>
Authored: Wed Jul 29 18:27:49 2015 -0700
Committer: Mike Dunker <md...@apigee.com>
Committed: Wed Jul 29 18:27:49 2015 -0700
----------------------------------------------------------------------
stack/loadtests/runCollectionQueryTest.sh | 4 +-
stack/loadtests/runDeleteEntities.sh | 6 +-
stack/loadtests/runLoadEntities.sh | 18 +-
stack/loadtests/runRandomEntityByNameTest.sh | 4 +-
stack/loadtests/runRandomEntityByUuidTest.sh | 99 ++++++++
stack/loadtests/runUpdateEntities.sh | 6 +-
.../datagenerators/EntityDataGenerator.scala | 2 +-
.../datagenerators/FeederGenerator.scala | 3 +
.../usergrid/enums/ConfigProperties.scala | 71 +++++-
.../apache/usergrid/enums/ScenarioType.scala | 3 +-
.../apache/usergrid/helpers/Extractors.scala | 8 +-
.../org/apache/usergrid/helpers/Setup.scala | 85 ++++---
.../org/apache/usergrid/helpers/Utils.scala | 13 +-
.../scenarios/ApplicationScenarios.scala | 6 +-
.../scenarios/ConnectionScenarios.scala | 2 +-
.../usergrid/scenarios/DeviceScenarios.scala | 17 +-
.../scenarios/EntityCollectionScenarios.scala | 132 ++++++++---
.../usergrid/scenarios/EntityScenarios.scala | 12 +-
.../usergrid/scenarios/GeoScenarios.scala | 4 +-
.../scenarios/NotificationScenarios.scala | 14 +-
.../usergrid/scenarios/NotifierScenarios.scala | 10 +-
.../scenarios/OrganizationScenarios.scala | 8 +-
.../usergrid/scenarios/TokenScenarios.scala | 6 +-
.../usergrid/scenarios/UserScenarios.scala | 14 +-
.../org/apache/usergrid/settings/Settings.scala | 223 +++++++++++++------
.../simulations/ConfigurableSimulation.scala | 13 +-
.../deprecated/PostCustomEntitySimulation.scala | 6 +-
.../deprecated/PutCustomEntitySimulation.scala | 6 +-
stack/loadtests/src/test/resources/dummy.csv | 1 +
.../src/test/resources/logback-test.xml | 6 +-
stack/loadtests/src/test/resources/logback.xml | 4 +-
31 files changed, 566 insertions(+), 240 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/runCollectionQueryTest.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runCollectionQueryTest.sh b/stack/loadtests/runCollectionQueryTest.sh
index 7d1779c..9882cf2 100755
--- a/stack/loadtests/runCollectionQueryTest.sh
+++ b/stack/loadtests/runCollectionQueryTest.sh
@@ -41,7 +41,7 @@ ORG=gatling
CREATE_APP=false
#APP=$(date +%s)
APP=millionentities
-COLLECTION_TYPE=basicentities
+COLLECTION=basicentities
SCENARIO_TYPE=getAllByCursor
LOAD_ENTITIES=false
NUM_ENTITIES=10000
@@ -76,7 +76,7 @@ mvn gatling:execute -Dorg=usergrid \
-DrampTime=${RAMP_TIME} \
-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
--DcollectionType=${COLLECTION_TYPE} \
+-Dcollection=${COLLECTION} \
-DscenarioType=${SCENARIO_TYPE} \
-DauthType=${AUTH_TYPE} \
-DtokenType=${TOKEN_TYPE} \
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/runDeleteEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runDeleteEntities.sh b/stack/loadtests/runDeleteEntities.sh
index 1ca557e..0883fa8 100755
--- a/stack/loadtests/runDeleteEntities.sh
+++ b/stack/loadtests/runDeleteEntities.sh
@@ -41,12 +41,12 @@ CREATE_ORG=false
ORG=gatling
CREATE_APP=false
APP=millionentities
-COLLECTION_TYPE=trivialentities
+COLLECTION=trivialentities
SCENARIO_TYPE=deleteEntities
# don't load entities as part of setup
LOAD_ENTITIES=false
-SKIP_SETUP=TRUE
+SKIP_SETUP=true
#SEARCH_QUERY=order%20by%20specials%20desc
#SEARCH_LIMIT=1000
ENTITY_TYPE=trivial
@@ -78,7 +78,7 @@ mvn gatling:execute \
-DrampTime=${RAMP_TIME} \
-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
--DcollectionType=${COLLECTION_TYPE} \
+-Dcollection=${COLLECTION} \
-DscenarioType=${SCENARIO_TYPE} \
-DauthType=${AUTH_TYPE} \
-DtokenType=${TOKEN_TYPE} \
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/runLoadEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runLoadEntities.sh b/stack/loadtests/runLoadEntities.sh
index e166c58..1471d70 100755
--- a/stack/loadtests/runLoadEntities.sh
+++ b/stack/loadtests/runLoadEntities.sh
@@ -19,7 +19,7 @@ die() { echo "$@" 1>&2 ; exit 1; }
#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
#Then aggregate the results
####
-[ "$#" -ge 8 ] || die "At least 8 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) NUM_ENTITIES ENTITY_WORKER_NUM ENTITY_WORKER_COUNT"
+[ "$#" -ge 8 ] || die "At least 8 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) NUM_ENTITIES ENTITY_WORKER_NUM ENTITY_WORKER_COUNT [UUID_FILENAME]"
URL="$1"
RAMP_USERS="$2"
@@ -29,8 +29,9 @@ CONSTANT_USERS_DURATION="$5"
NUM_ENTITIES="$6"
ENTITY_WORKER_NUM="$7"
ENTITY_WORKER_COUNT="$8"
+UUID_FILENAME="$9"
-shift 8
+shift 9
#Compile everything
mvn compile
@@ -39,16 +40,17 @@ mvn compile
#APP=$(date +%s)
ADMIN_USER=superuser
ADMIN_PASSWORD=test
-CREATE_ORG=true
+CREATE_ORG=false
ORG=gatling
-CREATE_APP=true
+CREATE_APP=false
APP=millionentities
-COLLECTION_TYPE=trivialentities
+COLLECTION=trivialentities
+SANDBOX_COLLECTION=true
SCENARIO_TYPE=loadEntities
# don't load entities as part of setup
LOAD_ENTITIES=false
-SKIP_SETUP=FALSE
+SKIP_SETUP=false
#SEARCH_QUERY=order%20by%20specials%20desc
#SEARCH_LIMIT=1000
ENTITY_TYPE=trivial
@@ -80,7 +82,7 @@ mvn gatling:execute \
-DrampTime=${RAMP_TIME} \
-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
--DcollectionType=${COLLECTION_TYPE} \
+-Dcollection=${COLLECTION} \
-DscenarioType=${SCENARIO_TYPE} \
-DauthType=${AUTH_TYPE} \
-DtokenType=${TOKEN_TYPE} \
@@ -89,6 +91,8 @@ mvn gatling:execute \
-DendRequestCount=${END_REQUEST_COUNT} \
-DentityWorkerCount=${ENTITY_WORKER_COUNT} \
-DentityWorkerNum=${ENTITY_WORKER_NUM} \
+-DuuidFilename=${UUID_FILENAME} \
+-DsandboxCollection=${SANDBOX_COLLECTION} \
-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/runRandomEntityByNameTest.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runRandomEntityByNameTest.sh b/stack/loadtests/runRandomEntityByNameTest.sh
index dd98aa6..5967a1b 100755
--- a/stack/loadtests/runRandomEntityByNameTest.sh
+++ b/stack/loadtests/runRandomEntityByNameTest.sh
@@ -40,7 +40,7 @@ CREATE_ORG=false
ORG=gatling
CREATE_APP=false
APP=millionentities
-COLLECTION_TYPE=trivialentities
+COLLECTION=trivialentities
SCENARIO_TYPE=nameRandomInfinite
LOAD_ENTITIES=false
NUM_ENTITIES=10000
@@ -76,7 +76,7 @@ mvn gatling:execute \
-DrampTime=${RAMP_TIME} \
-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
--DcollectionType=${COLLECTION_TYPE} \
+-Dcollection=${COLLECTION} \
-DscenarioType=${SCENARIO_TYPE} \
-DauthType=${AUTH_TYPE} \
-DtokenType=${TOKEN_TYPE} \
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/runRandomEntityByUuidTest.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runRandomEntityByUuidTest.sh b/stack/loadtests/runRandomEntityByUuidTest.sh
new file mode 100755
index 0000000..4a83eb5
--- /dev/null
+++ b/stack/loadtests/runRandomEntityByUuidTest.sh
@@ -0,0 +1,99 @@
+#!/bin/bash
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+die() { echo "$@" 1>&2 ; exit 1; }
+
+####
+#This is a script to simplify running gatling tests. It will default several parameters, invoke the maven plugins
+#Then aggregate the results
+####
+[ "$#" -ge 6 ] || die "At least 6 arguments required, $# provided. Example is $0 URL RAMP_USERS RAMP_TIME(seconds) CONSTANT_USERS_PER_SEC, CONSTANT_USERS_DURATION(seconds) UUID_FILENAME"
+
+URL="$1"
+RAMP_USERS="$2"
+RAMP_TIME="$3"
+CONSTANT_USERS_PER_SEC="$4"
+CONSTANT_USERS_DURATION="$5"
+UUID_FILENAME="$6"
+
+shift 6
+
+#Compile everything
+mvn compile
+
+#Set the app id to be a date epoch for uniqueness
+#APP=$(date +%s)
+ADMIN_USER=superuser
+ADMIN_PASSWORD=test
+CREATE_ORG=false
+ORG=gatling
+CREATE_APP=false
+APP=millionentities
+COLLECTION=trivialentities
+SCENARIO_TYPE=uuidRandomInfinite
+LOAD_ENTITIES=false
+NUM_ENTITIES=10000
+SKIP_SETUP=false
+#SEARCH_QUERY=order%20by%20specials%20desc
+#SEARCH_LIMIT=1000
+ENTITY_TYPE=trivial
+ENTITY_PREFIX=trivial
+ENTITY_SEED=1
+AUTH_TYPE=anonymous
+TOKEN_TYPE=management
+END_CONDITION_TYPE=minutesElapsed
+#END_CONDITION_TYPE=requestCount
+END_MINUTES=2
+END_REQUEST_COUNT=100
+
+#Execute the test
+mvn gatling:execute \
+-DskipSetup=${SKIP_SETUP} \
+-DcreateOrg=${CREATE_ORG} \
+-Dorg=${ORG} \
+-DcreateApp=${CREATE_APP} \
+-Dapp=${APP} \
+-Dbaseurl=${URL} \
+-DadminUser=${ADMIN_USER} \
+-DadminPassword=${ADMIN_PASSWORD} \
+-DloadEntities=${LOAD_ENTITIES} \
+-DnumEntities=${NUM_ENTITIES} \
+-DentityType=${ENTITY_TYPE} \
+-DentityPrefix=${ENTITY_PREFIX} \
+-DentitySeed=${ENTITY_SEED} \
+-DrampUsers=${RAMP_USERS} \
+-DrampTime=${RAMP_TIME} \
+-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
+-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
+-Dcollection=${COLLECTION} \
+-DscenarioType=${SCENARIO_TYPE} \
+-DauthType=${AUTH_TYPE} \
+-DtokenType=${TOKEN_TYPE} \
+-DendConditionType=${END_CONDITION_TYPE} \
+-DendMinutes=${END_MINUTES} \
+-DendRequestCount=${END_REQUEST_COUNT} \
+-DuuidFilename=${UUID_FILENAME} \
+-Dgatling.simulationClass=org.apache.usergrid.simulations.ConfigurableSimulation
+
+
+
+#Now move all the reports
+#AGGREGATE_DIR="target/aggregate-$(date +%s)"
+
+#mkdir -p ${AGGREGATE_DIR}
+
+#copy to the format of target/aggregate(date)/(simnulationame)-simulation.log
+#find target -name "simulation.log" -exec cp {} ${AGGREGATE_DIR}/$(basename $(dirname {} ))-simulation.log \;
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/runUpdateEntities.sh
----------------------------------------------------------------------
diff --git a/stack/loadtests/runUpdateEntities.sh b/stack/loadtests/runUpdateEntities.sh
index 0963a2d..85d529d 100755
--- a/stack/loadtests/runUpdateEntities.sh
+++ b/stack/loadtests/runUpdateEntities.sh
@@ -41,12 +41,12 @@ CREATE_ORG=false
ORG=gatling
CREATE_APP=false
APP=millionentities
-COLLECTION_TYPE=trivialentities
+COLLECTION=trivialentities
SCENARIO_TYPE=updateEntities
# don't load entities as part of setup
LOAD_ENTITIES=false
-SKIP_SETUP=TRUE
+SKIP_SETUP=true
#SEARCH_QUERY=order%20by%20specials%20desc
#SEARCH_LIMIT=1000
ENTITY_TYPE=trivial
@@ -78,7 +78,7 @@ mvn gatling:execute \
-DrampTime=${RAMP_TIME} \
-DconstantUsersPerSec=${CONSTANT_USERS_PER_SEC} \
-DconstantUsersDuration=${CONSTANT_USERS_DURATION} \
--DcollectionType=${COLLECTION_TYPE} \
+-Dcollection=${COLLECTION} \
-DscenarioType=${SCENARIO_TYPE} \
-DauthType=${AUTH_TYPE} \
-DtokenType=${TOKEN_TYPE} \
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
index f9fa4fc..cd359b7 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
@@ -45,7 +45,7 @@ object EntityDataGenerator {
Map(
- "username" -> "user".concat(userId.toString),
+ "username" -> "user".concat(userId),
"profileId" -> Utils.generateRandomInt(10000, 1000000).toString,
"displayName" -> Utils.generateRandomInt(10000, 1000000).toString,
"showAge" -> Utils.generateRandomInt(0, 1).toString,
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
index 1c80822..f218b5b 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
@@ -65,6 +65,7 @@ object FeederGenerator {
val geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
val blockLists: Map[String, String] = EntityDataGenerator.generateBlockUserLists(1)
+ // merge maps
user ++ geolocation ++ blockLists
}
@@ -224,6 +225,8 @@ object FeederGenerator {
val entityUrl = Settings.baseCollectionUrl + "/" + entityName
val validEntity = if (i >= numEntities) "no" else "yes"
+ // println(entityName)
+
Map("entityName" -> entityName, "entity" -> entity, "entityUrl" -> entityUrl, "validEntity" -> validEntity, "entityNum" -> (i+1).toString)
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
index 855a7ae..7e6cf55 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ConfigProperties.scala
@@ -1,5 +1,7 @@
package org.apache.usergrid.enums
+import java.util.Date
+
/**
* Created by mdunker on 7/20/15.
*/
@@ -24,7 +26,7 @@ object ConfigProperties {
val AppUserPassword = "appUserPassword"
val NumEntities = "numEntities"
val NumDevices = "numDevices"
- val CollectionType = "collectionType"
+ val Collection = "collection"
val RampTime = "rampTime"
val Throttle = "throttle"
val RpsTarget = "rpsTarget"
@@ -48,14 +50,75 @@ object ConfigProperties {
val UpdateValue = "updateValue"
val EntityWorkerCount = "entityWorkerCount"
val EntityWorkerNum = "entityWorkerNum"
+ val UuidFilename = "uuidFilename"
+ val SandboxCollection = "sandboxCollection"
+ val PurgeUsers = "purgeUsers"
val Values = Seq(Org,App,AdminUser,AdminPassword,BaseUrl,AuthType,TokenType,SkipSetup,CreateOrg,CreateApp,LoadEntities,
ScenarioType,RampUsers,ConstantUsersPerSec,ConstantUsersDuration,UserSeed,AppUser,AppUserPassword,NumEntities,
- NumDevices,CollectionType,RampTime,Throttle,RpsTarget,RpsRampTime,HoldDuration,PushNotifier,EntityPrefix,EntityType,
- EntitySeed,SearchLimit,SearchQuery,EndConditionType,EndMinutes,EndRequestCount,OrgCreationUsername,OrgCreationName,
- OrgCreationEmail,OrgCreationPassword,UpdateProperty,UpdateValue,EntityWorkerCount,EntityWorkerNum)
+ NumDevices,Collection,RampTime,Throttle,RpsTarget,RpsRampTime,HoldDuration,PushNotifier,PushProvider,EntityPrefix,
+ EntityType,EntitySeed,SearchLimit,SearchQuery,EndConditionType,EndMinutes,EndRequestCount,OrgCreationUsername,
+ OrgCreationName,OrgCreationEmail,OrgCreationPassword,UpdateProperty,UpdateValue,EntityWorkerCount,EntityWorkerNum,
+ UuidFilename,SandboxCollection,PurgeUsers)
def isValid(str: String): Boolean = {
Values.contains(str)
}
+
+ // defaults for all the configuration items
+ def getDefault(cfg: String): Any = {
+ if (isValid(cfg)) {
+ cfg match {
+ case Org => ""
+ case App => ""
+ case AdminUser => ""
+ case AdminPassword => ""
+ case BaseUrl => ""
+ case AuthType => org.apache.usergrid.enums.AuthType.Anonymous
+ case TokenType => org.apache.usergrid.enums.TokenType.User
+ case SkipSetup => false
+ case CreateOrg => false
+ case CreateApp => false
+ case LoadEntities => false
+ case ScenarioType => org.apache.usergrid.enums.ScenarioType.NameRandomInfinite
+ case RampUsers => 0
+ case ConstantUsersPerSec => 0
+ case ConstantUsersDuration => 10
+ case UserSeed => 1
+ case AppUser => ""
+ case AppUserPassword => ""
+ case NumEntities => 5000
+ case NumDevices => 4000
+ case Collection => "customentities"
+ case RampTime => 0
+ case Throttle => 50
+ case RpsTarget => 50
+ case RpsRampTime => 10
+ case HoldDuration => 300
+ case PushNotifier => "loadNotifier"
+ case PushProvider => "noop"
+ case EntityPrefix => "entity"
+ case EntityType => org.apache.usergrid.enums.EntityType.Basic
+ case EntitySeed => 1
+ case SearchLimit => 0
+ case SearchQuery => ""
+ case EndConditionType => org.apache.usergrid.enums.EndConditionType.MinutesElapsed
+ case EndMinutes => 10
+ case EndRequestCount => 1000
+ case OrgCreationUsername => "" // actual default is {org}_admin
+ case OrgCreationName => "" // actual default is {org}_admin
+ case OrgCreationEmail => "" // actual default is {org}_admin@usergrid.com
+ case OrgCreationPassword => "test"
+ case UpdateProperty => "updateProp"
+ case UpdateValue => new Date().toString
+ case EntityWorkerCount => 0
+ case EntityWorkerNum => 0
+ case UuidFilename => "dummy.csv"
+ case SandboxCollection => false
+ case PurgeUsers => 100
+ }
+ } else {
+ null
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
index 7dca619..db9a3af 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/enums/ScenarioType.scala
@@ -6,8 +6,9 @@ object ScenarioType {
val LoadEntities = "loadEntities"
val DeleteEntities = "deleteEntities"
val UpdateEntities = "updateEntities"
+ val UuidRandomInfinite = "uuidRandomInfinite"
- val Values = Seq(GetAllByCursor,NameRandomInfinite,LoadEntities,DeleteEntities,UpdateEntities)
+ val Values = Seq(GetAllByCursor,NameRandomInfinite,LoadEntities,DeleteEntities,UpdateEntities,UuidRandomInfinite)
def isValid(str: String): Boolean = {
Values.contains(str)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
index f8aad98..120d790 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Extractors.scala
@@ -43,7 +43,7 @@ object Extractors {
/**
* Will extract the uuid from the create response. If the uuid is not present, an empty string will be set
*/
- def extractUuid(saveAsName: String) = {
+ def extractCreateUuid(saveAsName: String) = {
jsonPath("$.entities[0].uuid").transformOption(extract => {
//it may or may not be present. If it is, save it, otherwise save it as an empty string
extract.orElse(Some(""))
@@ -83,8 +83,8 @@ object Extractors {
* under the variable "authToken"
* @return
*/
- def injectManagementTokenIntoSession(): Expression[Session] = {
- session => session.set("authToken", Setup.getManagementToken())
+ def injectManagementTokenIntoSession: Expression[Session] = {
+ session => session.set("authToken", Setup.getManagementToken)
}
def injectUserTokenIntoSession(): Expression[Session] = {
@@ -93,7 +93,7 @@ object Extractors {
// handles different types of tokens
def injectTokenIntoSession(): Expression[Session] = {
- session => session.set("authToken", Setup.getToken())
+ session => session.set("authToken", Setup.getToken)
}
def injectAnonymousAuth(): Expression[Session] = {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
index d90353a..727c295 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Setup.scala
@@ -35,7 +35,11 @@ object Setup {
def getToken(tokenUrl:String, username:String, password:String):String = {
val getToken = client
.preparePost(tokenUrl)
- .setBody("{\"username\":\"" + username + "\",\"password\":\"" + password + "\",\"grant_type\":\"password\"}")
+ .setBody(Utils.toJSONStr(Map(
+ "username" -> username,
+ "password" -> password,
+ "grant_type" -> "password"
+ )))
.setHeader("Cache-Control", "no-cache")
.setHeader("Content-Type", "application/json; charset=UTF-8")
.build()
@@ -45,21 +49,21 @@ object Setup {
tree.get("access_token").asText()
}
- def getManagementToken():String = {
+ def getManagementToken:String = {
if(managementToken == null) {
- managementToken = getToken(Settings.baseUrl + "/management/token", Settings.adminUser, Settings.adminPassword)
+ managementToken = getToken(s"${Settings.baseUrl}/management/token", Settings.adminUser, Settings.adminPassword)
println("Management token is "+managementToken)
}
managementToken
}
def getUserToken:String = {
- getToken(Settings.baseAppUrl + "/token", Settings.appUser, Settings.appUserPassword)
+ getToken(s"${Settings.baseAppUrl}/token", Settings.appUser, Settings.appUserPassword)
}
- def getToken():String = {
+ def getToken:String = {
var token = ""
- if (Settings.tokenType == TokenType.Management) token = getManagementToken()
+ if (Settings.tokenType == TokenType.Management) token = getManagementToken
if (Settings.tokenType == TokenType.User) token = getUserToken
token
@@ -68,7 +72,7 @@ object Setup {
def setupOrg(): Integer = {
val createOrgPost = client
- .preparePost(Settings.baseUrl + "/management/organizations")
+ .preparePost(s"${Settings.baseUrl}/management/organizations")
.setHeader("Cache-Control", "no-cache")
.setHeader("Content-Type", "application/json; charset=UTF-8")
.setBody(Utils.toJSONStr(Map(
@@ -82,7 +86,7 @@ object Setup {
val orgResponse = client.executeRequest(createOrgPost).get()
- printResponse("POST ORG",orgResponse.getStatusCode,orgResponse.getResponseBody)
+ printResponse("POST ORG", orgResponse.getStatusCode, orgResponse.getResponseBody)
orgResponse.getStatusCode
}
@@ -90,17 +94,35 @@ object Setup {
def setupApplication(): Integer = {
val createAppPost = client
- .preparePost(Settings.baseUrl + "/management/organizations/" + Settings.org + "/applications")
+ .preparePost(s"${Settings.baseUrl}/management/organizations/${Settings.org}/applications")
.setBody(Utils.toJSONStr(Map("name" -> Settings.app)))
.setHeader("Cache-Control", "no-cache")
.setHeader("Content-Type", "application/json; charset=UTF-8")
- .setHeader("Authorization", "Bearer " + getManagementToken)
+ .setHeader("Authorization", s"Bearer $getManagementToken")
.build()
- val appResponse = client.executeRequest(createAppPost).get();
+ val appResponse = client.executeRequest(createAppPost).get()
val statusCode = appResponse.getStatusCode
- printResponse("POST APP",statusCode, appResponse.getResponseBody)
+ printResponse("POST APP", statusCode, appResponse.getResponseBody)
+
+ statusCode
+ }
+
+ def sandboxCollection(): Integer = {
+
+ val sandboxCollectionPost = client
+ .preparePost(s"${Settings.baseAppUrl}/roles/guest/permissions")
+ .setBody(Utils.toJSONStr(Map("permission" -> s"GET,PUT,POST,DELETE:/${Settings.collection}/**")))
+ .setHeader("Cache-Control", "no-cache")
+ .setHeader("Content-Type", "application/json; charset=UTF-8")
+ .setHeader("Authorization", s"Bearer $getManagementToken")
+ .build()
+
+ val response = client.executeRequest(sandboxCollectionPost).get()
+
+ val statusCode = response.getStatusCode
+ printResponse("SANDBOX COLLECTION", statusCode, response.getResponseBody)
statusCode
}
@@ -108,21 +130,21 @@ object Setup {
def setupNotifier():Integer = {
val createNotifier = client
- .preparePost(Settings.baseAppUrl + "/notifiers")
+ .preparePost(s"${Settings.baseAppUrl}/notifiers")
.setBody(Utils.toJSONStr(Map("name" -> Settings.pushNotifier, "provider" -> Settings.pushProvider)))
.setHeader("Cache-Control", "no-cache")
.setHeader("Content-Type", "application/json; charset=UTF-8")
- .setHeader("Authorization","Bearer " + getManagementToken)
+ .setHeader("Authorization", s"Bearer $getManagementToken")
.build()
- val notifierResponse = client.executeRequest(createNotifier).get();
- printResponse("POST Notifier", notifierResponse.getStatusCode ,notifierResponse.getResponseBody())
+ val notifierResponse = client.executeRequest(createNotifier).get()
+ printResponse("POST Notifier", notifierResponse.getStatusCode ,notifierResponse.getResponseBody)
notifierResponse.getStatusCode
}
def setupUsers() = {
- val userFeeder = Settings.getUserFeeder()
+ val userFeeder = Settings.getUserFeeder
val numUsers = userFeeder.length
println(s"setupUsers: Sending requests for $numUsers users")
@@ -132,7 +154,7 @@ object Setup {
list.foreach(f => {
val response = f.get()
if (response.getStatusCode != 200) {
- printResponse("Post User", response.getStatusCode, response.getResponseBody())
+ printResponse("Post User", response.getStatusCode, response.getResponseBody)
} else {
successCount += 1
}
@@ -141,7 +163,7 @@ object Setup {
}
userFeeder.foreach(user => {
list += setupUser(user)
- if (list.length == Integer.getInteger("purgeUsers",100)) {
+ if (list.length == Settings.purgeUsers) {
purgeList()
}
})
@@ -170,12 +192,12 @@ object Setup {
"displayName":"$displayName","age":"$age","seen":"$seen","weight":"$weight",
"height":"$height","aboutMe":"$aboutMe","profileId":"$profileId","headline":"$headline",
"showAge":"$showAge","relationshipStatus":"$relationshipStatus","ethnicity":"$ethnicity","password":"$password"}"""
- val authToken = getManagementToken()
+ val authToken = getManagementToken
val createUser = client
- .preparePost(Settings.baseAppUrl + "/users")
+ .preparePost(s"${Settings.baseAppUrl}/users")
.setBody(body)
.setBodyEncoding("UTF-8")
- .setHeader("Authorization","Bearer "+authToken)
+ .setHeader("Authorization",s"Bearer $authToken")
.build()
client.executeRequest(createUser)
@@ -183,11 +205,10 @@ object Setup {
def setupEntitiesCollection(numEntities: Int, entityType: String, prefix: String, seed: Int = 1) = {
val entitiesFeeder = FeederGenerator.generateCustomEntityArray(numEntities, entityType, prefix, seed)
- val purgeUsers = Integer.getInteger("purgeUsers", 100)
- val list: ArrayBuffer[ListenableFuture[Response]] = new ArrayBuffer[ListenableFuture[Response]]
- var successCount: Int = 0;
- def purgeList(): Unit = {
+ val list:ArrayBuffer[ListenableFuture[Response]] = new ArrayBuffer[ListenableFuture[Response]]
+ var successCount:Int = 0
+ def purgeList():Unit = {
list.foreach(f => {
val response = f.get()
if (response.getStatusCode != 200) {
@@ -202,7 +223,7 @@ object Setup {
entitiesFeeder.foreach(payload => {
//println("setupEntitiesCollection: payload=" + payload)
list += setupEntity(payload)
- if(list.length == purgeUsers) {
+ if(list.length == Settings.purgeUsers) {
purgeList()
}
})
@@ -213,21 +234,21 @@ object Setup {
}
def setupEntity(payload: String):ListenableFuture[Response] = {
- val authToken = getManagementToken()
+ val authToken = getManagementToken
val createEntity = client
- .preparePost(Settings.baseAppUrl + "/" + Settings.collectionType)
+ .preparePost(Settings.baseCollectionUrl)
.setBody(payload)
.setBodyEncoding("UTF-8")
- .setHeader("Authorization", "Bearer " + authToken)
+ .setHeader("Authorization", s"Bearer $authToken")
.setHeader("Content-Type", "application/json; charset=UTF-8")
.build()
- //println("setupEntity: baseAppUrl=" + Settings.baseAppUrl + ", collectionType=" + Settings.collectionType + ", payload=" + payload)
+ //println("setupEntity: baseAppUrl=" + Settings.baseAppUrl + ", collection=" + Settings.collection + ", payload=" + payload)
client.executeRequest(createEntity)
}
def printResponse(caller:String, status:Int, body:String) = {
- println(caller + ": status: "+status.toString+" body:"+body)
+ println(caller + s"$caller:\nstatus: $status\nbody:\n$body")
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
index 16ade96..91c8081 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/helpers/Utils.scala
@@ -72,11 +72,12 @@ object Utils {
var queryString = ""
for (numParams <- 1 to generateRandomInt(1, queryParams.length)) {
- queryString = "age=" + Utils.generateRandomInt(18, 65).toString
- if (numParams == 2) {
- queryString += "%20AND%20height=" + Utils.generateRandomInt(48, 84).toString
- } else if (numParams == 3) {
- queryString += "%20AND%20weight=" + Utils.generateRandomInt(120, 350).toString
+ queryString = s"age=${Utils.generateRandomInt(18,65).toString}"
+ if (numParams >= 2) {
+ queryString += s"%20AND%20height=${Utils.generateRandomInt(48,84).toString}"
+ }
+ if (numParams >= 3) {
+ queryString += s"%20AND%20weight=${Utils.generateRandomInt(120,350).toString}"
}
}
@@ -86,7 +87,7 @@ object Utils {
def randomEntityNameUrl(prefix: String, numEntities: Int, seed: Int, baseUrl: String): String = {
val randomVal = generateRandomInt(seed, seed+numEntities-1)
- baseUrl + "/" + prefix.concat(randomVal.toString)
+ s"$baseUrl/$prefix$randomVal"
}
def createRandomPushNotifierName:String = {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
index 44fe118..085af88 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ApplicationScenarios.scala
@@ -36,10 +36,10 @@ import org.apache.usergrid.settings.{Settings, Headers}
object ApplicationScenarios {
val createApplication = exec(http("Create Application")
- .post(Settings.baseUrl + "/management/organizations/"+Settings.org+"/applications")
+ .post(_ => Settings.baseUrl + "/management/organizations/" + Settings.org + "/applications")
.headers(Headers.authToken)
- .body(StringBody("{\"name\":\"" + Settings.app + "\"}"))
- .check(status.in(200 to 204))
+ .body(StringBody(_ => """ { "name": """" + Settings.app + """" } """))
+ .check(status.in(Range(200,204)))
)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
index 0ff20a0..56a40bb 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/ConnectionScenarios.scala
@@ -52,7 +52,7 @@ object ConnectionScenarios {
.exec( UserScenarios.getUserByUsername)
.repeat(2){
feed(entityNameFeeder)
- .exec( DeviceScenarios.postDeviceWithNotifier)
+ .exec(DeviceScenarios.postDeviceWithNotifier)
.exec(ConnectionScenarios.postUserToDeviceConnection)
}
.exec(session => {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala
index a8a3d9c..57df0b9 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/DeviceScenarios.scala
@@ -47,20 +47,15 @@ object DeviceScenarios {
val postDeviceWithNotifier = exec(http("Create device with notifier")
.post("/devices")
.headers(Headers.authToken)
- .body(StringBody("""{"deviceModel":"Fake Device",
- "deviceOSVerion":"Negative Version",
- """" + notifier + """.notifier.id":"${entityName}"}"""))
+ .body(StringBody(session => """{ "deviceModel": "Fake Device", "deviceOSVersion": "Negative Version", """" + notifier + """.notifier.id": "${entityName}" }"""))
.check(status.is(200), jsonPath("$..entities[0]").exists , jsonPath("$..entities[0].uuid").exists , jsonPath("$..entities[0].uuid").saveAs("deviceId")))
val postDeviceWithNotifier400ok = exec(http("Create device with notifier")
.post("/devices")
.headers(Headers.authToken)
- .body(StringBody("""{"name":"${entityName}",
- "deviceModel":"Fake Device",
- "deviceOSVerion":"Negative Version",
- "${notifier}.notifier.id":"${entityName}"}"""))
- .check(status.in(200 to 400), jsonPath("$.entities[0].uuid").saveAs("deviceId")))
+ .body(StringBody(session => """{ "name":"${entityName}", "deviceModel":"Fake Device", "deviceOSVersion":"Negative Version", """" + notifier + """.notifier.id":"${entityName}" }"""))
+ .check(status.in(Range(200, 400)), jsonPath("$.entities[0].uuid").saveAs("deviceId")))
/**
@@ -79,11 +74,11 @@ object DeviceScenarios {
} )
//create the device if we got a 404
.doIf("${devices}","[]") {
- exec(session =>{
+ /*exec(session =>{
println("adding devices")
session
- } )
- .exec(postDeviceWithNotifier)
+ } )*/
+ exec(postDeviceWithNotifier)
.exec(ConnectionScenarios.postUserToDeviceConnection)
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
index 1fa1c07..4e37842 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityCollectionScenarios.scala
@@ -17,6 +17,7 @@
package org.apache.usergrid.scenarios
import io.gatling.core.Predef._
+import io.gatling.core.feeder.RecordSeqFeederBuilder
import io.gatling.http.Predef._
import org.apache.usergrid.datagenerators.FeederGenerator
import org.apache.usergrid.enums.{EndConditionType, AuthType}
@@ -37,16 +38,17 @@ object EntityCollectionScenarios {
val SessionVarUuid: String = "createUuid"
def entityGetUrl(useCursor: Boolean): String = {
- val url = Settings.baseAppUrl + "/" + Settings.collectionType + "?dummy" +
- (if (useCursor) "&cursor=${" + SessionVarCursor + "}" else "") +
- (if (Settings.searchLimit > 0) "&limit=" + Settings.searchLimit.toString() else "") +
- (if (Settings.searchQuery != "") "&ql=" + Settings.searchQuery else "")
+ val url = s"/${Settings.collection}?" +
+ (if (useCursor) "cursor=${" + SessionVarCursor + "}&" else "") +
+ (if (Settings.searchQuery != "") s"ql=${Settings.searchQuery}&" else "") +
+ (if (Settings.searchLimit > 0) s"limit=${Settings.searchLimit}&" else "")
- url
+ // remove trailing & or ?
+ url.dropRight(1)
}
def entityGetByNameUrl(entityName: String): String = {
- val url = Settings.baseCollectionUrl + "/" + entityName
+ val url = s"/${Settings.collection}/$entityName"
url
}
@@ -55,6 +57,10 @@ object EntityCollectionScenarios {
Utils.randomEntityNameUrl(prefix, numEntities, seed, Settings.baseCollectionUrl)
}
+ def uuidFeeder(): RecordSeqFeederBuilder[String] = {
+ csv(Settings.feedUuidFilename).random
+ }
+
/*
* Loop through entities using cursor
*/
@@ -75,15 +81,15 @@ object EntityCollectionScenarios {
val getEntityPagesToEnd = scenario("Get all entities")
.exec(injectTokenIntoSession())
.exec(injectAuthType())
- .doIfOrElse(session => Settings.endConditionType == EndConditionType.MinutesElapsed) {
- asLongAs(session => (System.currentTimeMillis() - Settings.testStartTime) < Settings.endMinutes*60*1000,"loopCounter",true) {
+ .doIfOrElse(_ => Settings.endConditionType == EndConditionType.MinutesElapsed) {
+ asLongAs(_ => Settings.continueMinutesTest, exitASAP = true) {
exec(getEntitiesWithoutCursor)
.asLongAs(stringParamExists(SessionVarCursor)) {
exec(getEntitiesWithCursor)
}
}
} {
- repeat(Settings.endRequestCount) {
+ repeat(_ => Settings.endRequestCount.toInt) {
exec(getEntitiesWithoutCursor)
.asLongAs(stringParamExists(SessionVarCursor)) {
exec(getEntitiesWithCursor)
@@ -93,18 +99,18 @@ object EntityCollectionScenarios {
//.exec(sessionFunction => { sessionFunction })
/*
- * Get random entities
+ * Get random entities by name
*/
val getRandomEntityAnonymous = exec(
http("GET entity by name (anonymous)")
- .get(_ => randomEntityNameUrl())
+ .get(randomEntityNameUrl())
.headers(Headers.authAnonymous)
.check(status.is(200))
)
val getRandomEntityWithToken = exec(
http("GET entity by name (token)")
- .get(_ => randomEntityNameUrl())
+ .get(randomEntityNameUrl())
.headers(Headers.authToken)
.check(status.is(200))
)
@@ -112,21 +118,69 @@ object EntityCollectionScenarios {
val getRandomEntitiesByName = scenario("Get entities by name randomly")
.exec(injectTokenIntoSession())
.exec(injectAuthType())
- .doIfOrElse(session => Settings.endConditionType == EndConditionType.MinutesElapsed) {
- asLongAs(session => (System.currentTimeMillis() - Settings.testStartTime) < Settings.endMinutes*60*1000) {
- doIfOrElse(session => Settings.authType == AuthType.Anonymous) {
- exec(getRandomEntityAnonymous)
- } {
- exec(getRandomEntityWithToken)
- }
+ .doIfOrElse(_ => Settings.endConditionType == EndConditionType.MinutesElapsed) {
+ asLongAs(_ => Settings.continueMinutesTest) {
+ doIfOrElse(_ => Settings.authType == AuthType.Anonymous) {
+ exec(getRandomEntityAnonymous)
+ } {
+ exec(getRandomEntityWithToken)
+ }
+ }
+ } {
+ repeat(_ => Settings.endRequestCount.toInt) {
+ doIfOrElse(_ => Settings.authType == AuthType.Anonymous) {
+ exec(getRandomEntityAnonymous)
+ } {
+ exec(getRandomEntityWithToken)
+ }
+ }
+ }
+
+ /*
+ * Get random entities by UUID
+ */
+ val getRandomEntityByUuidAnonymous = exec(
+ http("GET entity by UUID (anonymous)")
+ .get("/" + Settings.collection + "/${uuid}")
+ .headers(Headers.authAnonymous)
+ .check(status.is(200))
+ )
+
+ val getRandomEntityByUuidWithToken = exec(
+ http("GET entity by UUID (token)")
+ .get("/" + Settings.collection + "/${uuid}")
+ .headers(Headers.authToken)
+ .check(status.is(200))
+ )
+
+ val getRandomEntitiesByUuid = scenario("Get entities by uuid randomly")
+ .exec(injectTokenIntoSession())
+ .exec(injectAuthType())
+ .doIfOrElse(_ => Settings.endConditionType == EndConditionType.MinutesElapsed) {
+ asLongAs(_ => Settings.continueMinutesTest) {
+ feed(uuidFeeder())
+ /*.exec{
+ session => println(s"UUID: ${session("uuid").as[String]}")
+ session
+ }*/
+ .doIfOrElse(_ => Settings.authType == AuthType.Anonymous) {
+ exec(getRandomEntityByUuidAnonymous)
+ } {
+ exec(getRandomEntityByUuidWithToken)
+ }
}
} {
- repeat(Settings.endRequestCount) {
- doIfOrElse(session => Settings.authType == AuthType.Anonymous) {
- exec(getRandomEntityAnonymous)
- } {
- exec(getRandomEntityWithToken)
- }
+ repeat(_ => Settings.endRequestCount.toInt) {
+ feed(uuidFeeder())
+ /*.exec {
+ session => println(s"UUID: ${session("uuid").as[String]}")
+ session
+ }*/
+ .doIfOrElse(_ => Settings.authType == AuthType.Anonymous) {
+ exec(getRandomEntityByUuidAnonymous)
+ } {
+ exec(getRandomEntityByUuidWithToken)
+ }
}
}
@@ -136,11 +190,15 @@ object EntityCollectionScenarios {
val loadEntity = exec(
doIf("${validEntity}", "yes") {
exec(http("POST load entity")
- .post(Settings.baseCollectionUrl)
+ .post(_ => "/" + Settings.collection)
.headers(Headers.authToken)
.body(StringBody("""${entity}"""))
// 200 for success, 400 if already exists
- .check(status.in(Seq(200))))
+ .check(status.in(Seq(200)), extractCreateUuid(SessionVarUuid)))
+ .exec(session => {
+ Settings.addUuid(session("entityNum").as[String], session(SessionVarUuid).as[String])
+ session
+ })
}
)
@@ -149,12 +207,14 @@ object EntityCollectionScenarios {
.exec(injectAuthType())
.asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
feed(FeederGenerator.generateCustomEntityFeeder(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
- .exec{
+ /*.exec{
session => if (session("validEntity").as[String] == "yes") { println("Loading entity #" + session("entityNum").as[String]) }
session
- }
+ }*/
.doIf(session => session("validEntity").as[String] == "yes") {
- exec(loadEntity)
+ tryMax(5) {
+ exec(loadEntity)
+ }
}
}
@@ -177,14 +237,14 @@ object EntityCollectionScenarios {
.exec {
session => if (session("validEntity").as[String] == "yes") { println("Deleting entity #" + session("entityNum").as[String]) }
session
- }
+ }
.doIf(session => session("validEntity").as[String] == "yes") {
- exec(deleteEntity)
- }
+ exec(deleteEntity)
+ }
}
/*
- * Delete entities
+ * Update entities
*/
val updateEntity = exec(
http("UPDATE entity")
@@ -200,10 +260,10 @@ object EntityCollectionScenarios {
.exec(injectAuthType())
.asLongAs(session => session("validEntity").asOption[String].map(validEntity => validEntity != "no").getOrElse[Boolean](true)) {
feed(FeederGenerator.generateCustomEntityFeeder(Settings.numEntities, Settings.entityType, Settings.entityPrefix, Settings.entitySeed))
- .exec {
+ /*.exec {
session => if (session("validEntity").as[String] == "yes") { println("Updating entity #" + session("entityNum").as[String]) }
session
- }
+ }*/
.doIf(session => session("validEntity").as[String] == "yes") {
exec(updateEntity)
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
index 83a648e..65d0111 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
@@ -31,7 +31,7 @@ object EntityScenarios {
val getEntity = exec(
http("GET custom entity")
- .get(Settings.baseAppUrl+"/${collectionType}/${entityName}")
+ .get("/${collection}/${entityName}")
.headers(Headers.authAnonymous)
.check(status.is(200))
)
@@ -39,7 +39,7 @@ object EntityScenarios {
// not sure why I have to put stringToExpression -- thought String -> Expression[String] conversion would be automatic
val putEntity = exec(
http("Put custom entity")
- .put(stringToExpression(Settings.baseAppUrl + "/${collectionType}/${entityName}"))
+ .put("/${collection}/${entityName}")
.body(StringBody("""${entity}"""))
.headers(Headers.auth("${authType}"))
.check(status.is(200))
@@ -48,14 +48,14 @@ object EntityScenarios {
val deleteEntity = exec(
http("DELETE custom entity")
- .get(Settings.baseAppUrl + "/${collectionType}/${entityName}")
+ .delete("/${collection}/${entityName}")
.headers(Headers.auth("${authType}"))
.check(status.is(200))
)
val postEntity = exec(
http("Post custom entity")
- .post(stringToExpression(Settings.baseAppUrl + "/${collectionType}"))
+ .post("/${collection}")
.body(StringBody("""${entity}"""))
.headers(Headers.auth("${authType}"))
.check(status.is(200))
@@ -64,7 +64,7 @@ object EntityScenarios {
/*
val postEntityWithToken = exec(
http("Post custom entity")
- .post(stringToExpression(Settings.baseAppUrl + "/${collectionType}"))
+ .post("/${collection}")
.body(StringBody("""${entity}"""))
.headers(Headers.authToken)
.check(status.is(200))
@@ -72,7 +72,7 @@ object EntityScenarios {
val postEntityWithBasicAuth = exec(
http("Post custom entity")
- .post(stringToExpression(Settings.baseAppUrl + "/${collectionType}"))
+ .post("/${collection}")
.body(StringBody("""${entity}"""))
.headers(Headers.authBasic)
.check(status.is(200))
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala
index 85c6855..d7b108e 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/GeoScenarios.scala
@@ -40,8 +40,8 @@ object GeoScenarios {
val updateGeolocation = exec(
http("PUT user location")
- .put(stringToExpression("/users/user" + Utils.generateRandomInt(1, Settings.totalUsers)))
- .body(StringBody("{\"location\":{\"latitude\":\"${latitude}\",\"longitude\":\"${longitude}\"}}"))
+ .put(_ => "/users/user" + Utils.generateRandomInt(1, Settings.totalUsers))
+ .body(StringBody("""{ "location": { "latitude": "${latitude}", "longitude": "${longitude}"} }"""))
.headers(Headers.authToken)
.check(status.is(200))
)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
index 5471426..738c43a 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotificationScenarios.scala
@@ -48,21 +48,21 @@ object NotificationScenarios {
* send the notification now
*/
val sendNotification = exec(http("Send Single Notification")
- .post("/devices/${entityName}/notifications")
- .body(StringBody("{\"payloads\":{\"" + notifier + "\":\"testmessage\"}}"))
- .headers(Headers.authToken)
- .check(status.is(200))
- )
+ .post("/devices/${entityName}/notifications")
+ .body(StringBody(_ => """{ "payloads": { """" + notifier + """": "testmessage"} }"""))
+ .headers(Headers.authToken)
+ .check(status.is(200))
+ )
val sendNotificationToUser= exec(http("Send Notification to All Devices")
.post("/users/${userId}/notifications")
- .body(StringBody("{\"payloads\":{\"" + notifier + "\":\"testmessage\"}}"))
+ .body(StringBody(_ => """{ "payloads": {"""" + notifier + """": "testmessage"} }"""))
.headers(Headers.authToken)
.check(status.is(200))
)
- val userFeeder = Settings.getInfiniteUserFeeder()
+ val userFeeder = Settings.getInfiniteUserFeeder
val createScenario = scenario("Create Push Notification")
.feed(userFeeder)
.exec(TokenScenarios.getUserToken)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
index 9718ad3..11f57bd 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/NotifierScenarios.scala
@@ -54,13 +54,13 @@ object NotifierScenarios {
)
.exec(http("Create Notifier")
- .post(Settings.baseAppUrl+"/notifiers")
- .headers(Headers.authToken)
- .body(StringBody("{\"name\":\"" + notifier + "\",\"provider\":\"" + provider + "\"}"))
- .check(status.in(200 to 400)))
+ .post("/notifiers")
+ .headers(Headers.authToken)
+ .body(StringBody(_ => """{ "name": """" + notifier + """", "provider": """" + provider + """"}"""))
+ .check(status.in(Range(200,400))))
val checkNotifier = exec(http("Get Notifier")
- .get(Settings.baseAppUrl+"/notifiers/"+notifier)
+ .get("/notifiers/"+notifier)
.headers(Headers.authToken)
.check(status.is(200),status.saveAs("notifierStatus"))
)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
index 0c1beef..3e6593d 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/OrganizationScenarios.scala
@@ -36,10 +36,10 @@ object OrganizationScenarios {
//register the org with the randomly generated org
val createOrgAndAdmin =
exec(http("Create Organization")
- .post(Settings.baseUrl + "/management/organizations")
+ .post(_ => Settings.baseUrl + "/management/organizations")
.headers(Headers.authAnonymous)
- .body(StringBody("{\"organization\":\"" + Settings.org + "\",\"username\":\"" + Settings.adminUser + "\",\"name\":\"${entityName}\",\"email\":\"${entityName}@apigee.com\",\"password\":\"" + Settings.adminPassword + "\"}"))
- .check(status.in(200 to 400))
+ .body(StringBody(session => """{ "organization": """" + Settings.org + """", "username": """" + Settings.adminUser + """", "name": "${entityName}", "email": "${entityName}@apigee.com", "password":"""" + Settings.adminPassword + """" }"""))
+ .check(status.in(Range(200,400)))
)
val createOrgBatch =
feed(FeederGenerator.generateRandomEntityNameFeeder("org", 1))
@@ -49,7 +49,7 @@ object OrganizationScenarios {
.exec(NotifierScenarios.createNotifier)
.exec(session => {
// print the Session for debugging, don't do that on real Simulations
- println(session)
+ // println(session)
session
})
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
index d0eca02..c7ff4db 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/TokenScenarios.scala
@@ -39,10 +39,10 @@ import org.apache.usergrid.settings.Settings
object TokenScenarios {
val getManagementToken = exec(http("POST Org Token")
- .post(Settings.baseUrl+"/management/token")
+ .post(_ => Settings.baseUrl + "/management/token")
.headers(Headers.authAnonymous)
//pass in the the username and password, store the "access_token" json response element as the var "authToken" in the session
- .body(StringBody("{\"username\":\"" + Settings.adminUser + "\",\"password\":\""+Settings.adminPassword+"\",\"grant_type\":\"password\"}"))
+ .body(StringBody(_ => """{ "username": """" + Settings.adminUser + """", "password": """" + Settings.adminPassword + """", "grant_type": "password" }"""))
.check(jsonPath("$.access_token").find(0).saveAs("authToken"))
)
@@ -50,7 +50,7 @@ object TokenScenarios {
exec(
http("POST user token")
.post("/token")
- .body(StringBody("{\"grant_type\":\"password\",\"username\":\"${username}\",\"password\":\"password\"}"))
+ .body(StringBody("""{ "grant_type": "password", "username": "${username}", "password": "password" }"""))
.check(status.is(200),jsonPath("$..access_token").exists,jsonPath("$..access_token").saveAs("authToken"))
)
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala
index a55f66a..7269af7 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/UserScenarios.scala
@@ -68,7 +68,7 @@ object UserScenarios {
exec(
http("POST geolocated Users")
.post("/users")
- .body(new StringBody( """{"location":{"latitude":"${latitude}","longitude":"${longitude}"},"username":"${username}",
+ .body(StringBody( """{"location":{"latitude":"${latitude}","longitude":"${longitude}"},"username":"${username}",
"displayName":"${displayName}","age":"${age}","seen":"${seen}","weight":"${weight}",
"height":"${height}","aboutMe":"${aboutMe}","profileId":"${profileId}","headline":"${headline}",
"showAge":"${showAge}","relationshipStatus":"${relationshipStatus}","ethnicity":"${ethnicity}","password":"password"}"""))
@@ -91,7 +91,7 @@ object UserScenarios {
http("PUT geolocated Users")
.put("/users/${username}")
.headers(Headers.authToken)
- .body(new StringBody( """{"location":{"latitude":"${latitude}","longitude":"${longitude}"},"username":"${username}",
+ .body(StringBody( """{"location":{"latitude":"${latitude}","longitude":"${longitude}"},"username":"${username}",
"displayName":"${displayName}","age":"${age}","seen":"${seen}","weight":"${weight}",
"height":"${height}","aboutMe":"${aboutMe}","profileId":"${profileId}","headline":"${headline}",
"showAge":"${showAge}","relationshipStatus":"${relationshipStatus}","ethnicity":"${ethnicity}","password":"password"}"""))
@@ -156,7 +156,7 @@ object UserScenarios {
* Logs in as the user, then creates 2 devices if they do not exist
*/
val createUsersWithDevicesScenario = scenario("Create Users")
- .feed(Settings.getInfiniteUserFeeder())
+ .feed(Settings.getInfiniteUserFeeder)
.exec(TokenScenarios.getManagementToken)
.exec(UserScenarios.postUserIfNotExists)
.exec(TokenScenarios.getUserToken)
@@ -170,7 +170,7 @@ object UserScenarios {
* Posts a new user every time
*/
val postUsersInfinitely = scenario("Post Users")
- .feed(Settings.getInfiniteUserFeeder())
+ .feed(Settings.getInfiniteUserFeeder)
.exec(postUser)
@@ -178,14 +178,14 @@ object UserScenarios {
* Puts a new user every time
*/
val putUsersInfinitely = scenario("Put Users").exec(injectManagementTokenIntoSession)
- .feed(Settings.getInfiniteUserFeeder())
+ .feed(Settings.getInfiniteUserFeeder)
.exec(putUser)
/**
* Deletes user every time
*/
val deleteUsersInfinitely = scenario("Delete Users").exec(injectManagementTokenIntoSession)
- .feed(Settings.getInfiniteUserFeeder())
+ .feed(Settings.getInfiniteUserFeeder)
.exec(deleteUser)
/**
@@ -202,7 +202,7 @@ object UserScenarios {
})
val getUsersByUsername = scenario("Get User By Username").exec(injectManagementTokenIntoSession)
- .feed(Settings.getInfiniteUserFeeder())
+ .feed(Settings.getInfiniteUserFeeder)
//get users without a cursor
.exec(getUserByUsername)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index cca3056..dc7ff73 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -16,55 +16,89 @@
*/
package org.apache.usergrid.settings
+import java.io.{PrintWriter, FileOutputStream}
import java.nio.charset.StandardCharsets
import java.util.{Date, Base64}
import io.gatling.http.Predef._
+import io.gatling.http.config.HttpProtocolBuilder
import org.apache.usergrid.datagenerators.FeederGenerator
import org.apache.usergrid.enums._
import org.apache.usergrid.helpers.Utils
object Settings {
+ def initStrSetting(cfg: String): String = {
+ val setting = System.getProperty(cfg)
+
+ if (setting != null) setting else ConfigProperties.getDefault(cfg).toString
+ }
+
+ def initBoolSetting(cfg: String): Boolean = {
+ val strSetting = System.getProperty(cfg)
+ val default:Boolean = ConfigProperties.getDefault(cfg).asInstanceOf[Boolean]
+
+ if (strSetting != null) {
+ if (default) // default is true
+ strSetting.toLowerCase != "false"
+ else // default is false
+ strSetting.toLowerCase == "true"
+ } else {
+ default
+ }
+ }
+
+ def initIntSetting(cfg: String): Int = {
+ val integerSetting:Integer = Integer.getInteger(cfg)
+
+ if (integerSetting != null)
+ integerSetting.toInt
+ else
+ ConfigProperties.getDefault(cfg).asInstanceOf[Int]
+ }
+
// load configuration settings via property or default
- val org = System.getProperty(ConfigProperties.Org)
- val app = System.getProperty(ConfigProperties.App)
- val adminUser = System.getProperty(ConfigProperties.AdminUser)
- val adminPassword = System.getProperty(ConfigProperties.AdminPassword)
- val baseUrl = System.getProperty(ConfigProperties.BaseUrl)
- val baseAppUrl = baseUrl + "/" + org + "/" + app
- val httpConf = http.baseURL(baseAppUrl)
- val authType = System.getProperty(ConfigProperties.AuthType, AuthType.Anonymous)
- val tokenType = System.getProperty(ConfigProperties.TokenType, TokenType.User)
-
- val skipSetup:Boolean = System.getProperty(ConfigProperties.SkipSetup) == "true"
- val createOrg:Boolean = !skipSetup && (System.getProperty(ConfigProperties.CreateOrg) == "true")
- val createApp:Boolean = !skipSetup && (System.getProperty(ConfigProperties.CreateApp) != "false")
- val loadEntities:Boolean = !skipSetup && (System.getProperty(ConfigProperties.LoadEntities) != "false")
- val scenarioType = System.getProperty(ConfigProperties.ScenarioType, ScenarioType.NameRandomInfinite)
-
- val rampUsers:Int = Integer.getInteger(ConfigProperties.RampUsers, 0).toInt
- val constantUsersPerSec:Int = Integer.getInteger(ConfigProperties.ConstantUsersPerSec, 0).toInt // users to add per second during constant injection
- val constantUsersDuration:Int = Integer.getInteger(ConfigProperties.ConstantUsersDuration, 10).toInt // number of seconds
+ val org = initStrSetting(ConfigProperties.Org)
+ val app = initStrSetting(ConfigProperties.App)
+ val adminUser = initStrSetting(ConfigProperties.AdminUser)
+ val adminPassword = initStrSetting(ConfigProperties.AdminPassword)
+
+ private val cfgBaseUrl = initStrSetting(ConfigProperties.BaseUrl)
+ val baseUrl = if (cfgBaseUrl.takeRight(1) == "/") cfgBaseUrl.dropRight(1) else cfgBaseUrl
+ val baseAppUrl:String = baseUrl + "/" + org + "/" + app
+
+ val httpConf: HttpProtocolBuilder = http.baseURL(baseAppUrl)
+ val authType = initStrSetting(ConfigProperties.AuthType)
+ val tokenType = initStrSetting(ConfigProperties.TokenType)
+
+ val skipSetup:Boolean = initBoolSetting(ConfigProperties.SkipSetup)
+ val createOrg:Boolean = !skipSetup && initBoolSetting(ConfigProperties.CreateOrg)
+ val createApp:Boolean = !skipSetup && initBoolSetting(ConfigProperties.CreateApp)
+ val loadEntities:Boolean = !skipSetup && initBoolSetting(ConfigProperties.LoadEntities)
+ val sandboxCollection:Boolean = initBoolSetting(ConfigProperties.SandboxCollection)
+ val scenarioType = initStrSetting(ConfigProperties.ScenarioType)
+
+ val rampUsers:Int = initIntSetting(ConfigProperties.RampUsers)
+ val constantUsersPerSec:Int = initIntSetting(ConfigProperties.ConstantUsersPerSec) // users to add per second during constant injection
+ val constantUsersDuration:Int = initIntSetting(ConfigProperties.ConstantUsersDuration) // number of seconds
val totalUsers:Int = rampUsers + (constantUsersPerSec * constantUsersDuration)
- val userSeed:Int = Integer.getInteger(ConfigProperties.UserSeed,1).toInt
- val appUser = System.getProperty(ConfigProperties.AppUser)
- val appUserPassword = System.getProperty(ConfigProperties.AppUserPassword)
+ val userSeed:Int = initIntSetting(ConfigProperties.UserSeed)
+ val appUser = initStrSetting(ConfigProperties.AppUser)
+ val appUserPassword = initStrSetting(ConfigProperties.AppUserPassword)
val appUserBase64 = Base64.getEncoder.encodeToString((appUser + ":" + appUserPassword).getBytes(StandardCharsets.UTF_8))
- var numEntities:Int = Integer.getInteger(ConfigProperties.NumEntities, 5000).toInt
- val totalNumEntities:Int = numEntities
- val numDevices:Int = Integer.getInteger(ConfigProperties.NumDevices, 4000).toInt
+ val totalNumEntities:Int = initIntSetting(ConfigProperties.NumEntities)
+ val numDevices:Int = initIntSetting(ConfigProperties.NumDevices)
- val collectionType = System.getProperty(ConfigProperties.CollectionType, "customentities")
- val baseCollectionUrl = baseAppUrl + "/" + collectionType
+ val collection = initStrSetting(ConfigProperties.Collection)
+ val baseCollectionUrl = baseAppUrl + "/" + collection
- val rampTime:Int = Integer.getInteger(ConfigProperties.RampTime, 0).toInt // in seconds
- val throttle:Int = Integer.getInteger(ConfigProperties.Throttle, 50).toInt // in seconds
- val rpsTarget:Int = Integer.getInteger(ConfigProperties.RpsTarget, 50).toInt // requests per second target
- val rpsRampTime:Int = Integer.getInteger(ConfigProperties.RpsRampTime, 10).toInt // in seconds
- val holdDuration:Int = Integer.getInteger(ConfigProperties.HoldDuration, 300).toInt // in seconds
+ val rampTime:Int = initIntSetting(ConfigProperties.RampTime) // in seconds
+ val throttle:Int = initIntSetting(ConfigProperties.Throttle) // in seconds
+ val rpsTarget:Int = initIntSetting(ConfigProperties.RpsTarget) // requests per second target
+ val rpsRampTime:Int = initIntSetting(ConfigProperties.RpsRampTime) // in seconds
+ val holdDuration:Int = initIntSetting(ConfigProperties.HoldDuration) // in seconds
// Geolocation settings
val centerLatitude:Double = 37.442348 // latitude of center point
@@ -73,78 +107,119 @@ object Settings {
val geoSearchRadius:Int = 8000 // search area in meters
// Push Notification settings
- val pushNotifier = System.getProperty(ConfigProperties.PushNotifier, "loadNotifier")
- val pushProvider = System.getProperty(ConfigProperties.PushProvider, "noop")
+ val pushNotifier = initStrSetting(ConfigProperties.PushNotifier)
+ val pushProvider = initStrSetting(ConfigProperties.PushProvider)
// Large Entity Collection settings
- val entityPrefix = System.getProperty(ConfigProperties.EntityPrefix, "entity")
- val entityType = System.getProperty(ConfigProperties.EntityType, EntityType.Basic) // basic/trivial/?
- var entitySeed = Integer.getInteger(ConfigProperties.EntitySeed, 1).toInt
- val overallEntitySeed = entitySeed
- val searchLimit = Integer.getInteger(ConfigProperties.SearchLimit, 0).toInt
- val searchQuery = System.getProperty(ConfigProperties.SearchQuery, "")
- val endConditionType = System.getProperty(ConfigProperties.EndConditionType, EndConditionType.MinutesElapsed)
- val endMinutes = Integer.getInteger(ConfigProperties.EndMinutes, 10).toInt
- val endRequestCount = Integer.getInteger(ConfigProperties.EndRequestCount, 10).toInt
+ val entityPrefix = initStrSetting(ConfigProperties.EntityPrefix)
+ val entityType = initStrSetting(ConfigProperties.EntityType) // basic/trivial/?
+ val overallEntitySeed = initIntSetting(ConfigProperties.EntitySeed)
+ val searchLimit:Int = initIntSetting(ConfigProperties.SearchLimit)
+ val searchQuery = initStrSetting(ConfigProperties.SearchQuery)
+ val endConditionType = initStrSetting(ConfigProperties.EndConditionType)
+ val endMinutes:Int = initIntSetting(ConfigProperties.EndMinutes)
+ val endRequestCount:Int = initIntSetting(ConfigProperties.EndRequestCount)
// Org creation fields
- val orgCreationUsername = System.getProperty(ConfigProperties.OrgCreationUsername, org.concat("_admin"))
- val orgCreationEmail = System.getProperty(ConfigProperties.OrgCreationEmail, orgCreationUsername.concat("@usergrid.com"))
- val orgCreationName = System.getProperty(ConfigProperties.OrgCreationName, orgCreationUsername)
- val orgCreationPassword = System.getProperty(ConfigProperties.OrgCreationPassword, "test")
+ private val cfgOrgCreationUsername = initStrSetting(ConfigProperties.OrgCreationUsername)
+ private val cfgOrgCreationEmail = initStrSetting(ConfigProperties.OrgCreationEmail)
+ private val cfgOrgCreationName = initStrSetting(ConfigProperties.OrgCreationName)
+ val orgCreationUsername = if (cfgOrgCreationUsername == "") org.concat("_admin") else cfgOrgCreationUsername
+ val orgCreationEmail = if (cfgOrgCreationEmail == "") orgCreationUsername.concat("@usergrid.com") else cfgOrgCreationEmail
+ val orgCreationName = if (cfgOrgCreationName == "") orgCreationUsername else cfgOrgCreationName
+ val orgCreationPassword = initStrSetting(ConfigProperties.OrgCreationPassword)
// Entity update
- val updateProperty = System.getProperty(ConfigProperties.UpdateProperty, "updateProp")
- val updateValue = System.getProperty(ConfigProperties.UpdateValue, new Date().toString)
+ val updateProperty = initStrSetting(ConfigProperties.UpdateProperty)
+ val updateValue = initStrSetting(ConfigProperties.UpdateValue)
val updateBody = Utils.toJSONStr(Map(updateProperty -> updateValue))
// Entity workers
- val entityWorkerCount = Integer.getInteger(ConfigProperties.EntityWorkerCount,1)
- val entityWorkerNum = Integer.getInteger(ConfigProperties.EntityWorkerNum, 1)
-
- if (entityWorkerCount > 1 && entityWorkerNum >= 1 && entityWorkerNum <= entityWorkerCount) {
- // split entities across multiple workers
- val entitiesPerWorkerFloor = totalNumEntities / entityWorkerCount
- val leftOver = totalNumEntities % entityWorkerCount
- val zeroBasedWorkerNum = entityWorkerNum - 1
- val takeExtraEntity = if (entityWorkerNum <= leftOver) 1 else 0
- entitySeed = overallEntitySeed + zeroBasedWorkerNum * entitiesPerWorkerFloor + (if (takeExtraEntity == 1) zeroBasedWorkerNum else leftOver)
- numEntities = entitiesPerWorkerFloor + takeExtraEntity
+ private val cfgEntityWorkerCount:Int = initIntSetting(ConfigProperties.EntityWorkerCount)
+ private val cfgEntityWorkerNum:Int = initIntSetting(ConfigProperties.EntityWorkerNum)
+ val useWorkers:Boolean = cfgEntityWorkerCount > 1 && cfgEntityWorkerNum >= 1 && cfgEntityWorkerNum <= cfgEntityWorkerCount
+ val entityWorkerCount:Int = if (useWorkers) cfgEntityWorkerCount else 1
+ val entityWorkerNum:Int = if (useWorkers) cfgEntityWorkerNum else 1
+
+ // if only one worker system, these numbers will still be fine
+ private val entitiesPerWorkerFloor:Int = totalNumEntities / entityWorkerCount
+ private val leftOver:Int = totalNumEntities % entityWorkerCount // will be 0 if only one worker
+ private val extraEntity:Int = if (entityWorkerNum <= leftOver) 1 else 0
+ private val zeroBasedWorkerNum:Int = entityWorkerNum - 1
+ val entitySeed:Int = overallEntitySeed + zeroBasedWorkerNum * entitiesPerWorkerFloor + (if (extraEntity == 1) zeroBasedWorkerNum else leftOver)
+ val numEntities:Int = entitiesPerWorkerFloor + extraEntity
+
+ // UUID log file, have to go through this because creating a csv feeder with an invalid csv file fails at maven compile time
+ private val dummyCsv = ConfigProperties.getDefault(ConfigProperties.UuidFilename).toString
+ private val uuidFilename = initStrSetting(ConfigProperties.UuidFilename)
+ val captureUuids = uuidFilename != dummyCsv && scenarioType == ScenarioType.LoadEntities
+ val feedUuids = uuidFilename != dummyCsv && scenarioType == ScenarioType.UuidRandomInfinite
+ val captureUuidFilename = if (captureUuids) uuidFilename else dummyCsv
+ val feedUuidFilename = if (feedUuids) uuidFilename else dummyCsv
+ val purgeUsers:Int = initIntSetting(ConfigProperties.PurgeUsers)
+
+ private var uuidMap: Map[String, String] = Map()
+ def addUuid(name: String, uuid: String): Unit = {
+ if (captureUuids) uuidMap += (name -> uuid)
+ // println(s"UUID: ${name},${uuid}")
+ }
+
+ def writeUuidsToFile(): Unit = {
+ if (captureUuids) {
+ val writer = {
+ val fos = new FileOutputStream(captureUuidFilename)
+ new PrintWriter(fos, false)
+ }
+ writer.println("name,uuid")
+ uuidMap.keys.foreach { name =>
+ writer.println(s"${Settings.entityPrefix}${name},${uuidMap(name)}")
+ }
+ writer.flush()
+ writer.close()
+ }
}
- def getUserFeeder():Array[Map[String, String]]= {
+ def getUserFeeder:Array[Map[String, String]]= {
FeederGenerator.generateUserWithGeolocationFeeder(totalUsers, userLocationRadius, centerLatitude, centerLongitude)
}
- def getInfiniteUserFeeder():Iterator[Map[String, String]]= {
+ def getInfiniteUserFeeder:Iterator[Map[String, String]]= {
FeederGenerator.generateUserWithGeolocationFeederInfinite(userSeed, userLocationRadius, centerLatitude, centerLongitude)
}
- var testStartTime = System.currentTimeMillis()
+ private var testStartTime: Long = System.currentTimeMillis()
+
+ def getTestStartTime: Long = {
+ testStartTime
+ }
def setTestStartTime(): Unit = {
testStartTime = System.currentTimeMillis()
}
+ def continueMinutesTest: Boolean = {
+ (System.currentTimeMillis() - testStartTime) < (endMinutes.toLong*60L*1000L)
+ }
+
def printSettingsSummary(): Unit = {
- val authTypeStr = authType + (if (authType == AuthType.Token) s"(${tokenType})" else "")
- val endConditionStr = if (endConditionType == EndConditionType.MinutesElapsed) s"${endMinutes} minutes elapsed" else s"${endRequestCount} requests"
+ val authTypeStr = authType + (if (authType == AuthType.Token) s"($tokenType)" else "")
+ val endConditionStr = if (endConditionType == EndConditionType.MinutesElapsed) s"$endMinutes minutes elapsed" else s"$endRequestCount requests"
println("-----------------------------------------------------------------------------")
println("SIMULATION SETTINGS")
println("-----------------------------------------------------------------------------")
println()
- println(s"Org:${org} App:${app} Collection:${collectionType}")
- println(s"CreateOrg:${createOrg} CreateApp:${createApp} LoadEntities:${loadEntities}")
- println(s"ScenarioType:${scenarioType} AuthType:${authTypeStr}")
+ println(s"Org:$org App:$app Collection:$collection")
+ println(s"CreateOrg:$createOrg CreateApp:$createApp LoadEntities:$loadEntities")
+ println(s"ScenarioType:$scenarioType AuthType:$authTypeStr")
println()
- println(s"Entity Type:${entityType} Prefix:${entityPrefix}")
+ println(s"Entity Type:$entityType Prefix:$entityPrefix")
println()
- println(s"Overall: NumEntities:${totalNumEntities} Seed:${overallEntitySeed} Workers:${entityWorkerCount}")
- println(s"Worker: NumEntities:${numEntities} Seed:${entitySeed} WorkerNum:${entityWorkerNum}")
+ println(s"Overall: NumEntities:$totalNumEntities Seed:$overallEntitySeed Workers:$entityWorkerCount")
+ println(s"Worker: NumEntities:$numEntities Seed:$entitySeed WorkerNum:$entityWorkerNum")
println()
- println(s"Ramp: Users:${rampUsers} Time:${rampTime}")
- println(s"Constant: UsersPerSec:${constantUsersPerSec} Time:${constantUsersDuration}")
- println(s"End Condition:${endConditionStr}")
+ println(s"Ramp: Users:$rampUsers Time:$rampTime")
+ println(s"Constant: UsersPerSec:$constantUsersPerSec Time:$constantUsersDuration")
+ println(s"End Condition:$endConditionStr")
println()
println("-----------------------------------------------------------------------------")
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
index 8151cb1..da5189e 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/ConfigurableSimulation.scala
@@ -29,7 +29,7 @@ import org.apache.usergrid.settings.Settings
* Configuration items:
* skipSetup, createOrg, org, createApp, app, adminUser, adminPassword, baseUrl,
* numEntities, entityType, entityPrefix, entitySeed, rampUsers, rampTime,
- * constantUsersPerSec, constantUsersDuration, collectionType, scenarioType
+ * constantUsersPerSec, constantUsersDuration, collection, scenarioType
*
* getAllByCursor scenario: searchQuery, searchLimit
*/
@@ -42,10 +42,11 @@ class ConfigurableSimulation extends Simulation {
case ScenarioType.UpdateEntities => EntityCollectionScenarios.updateEntities
case ScenarioType.GetAllByCursor => EntityCollectionScenarios.getEntityPagesToEnd
case ScenarioType.NameRandomInfinite => EntityCollectionScenarios.getRandomEntitiesByName
+ case ScenarioType.UuidRandomInfinite => EntityCollectionScenarios.getRandomEntitiesByUuid
}
}
- before(
+ before{
if (!Settings.skipSetup) {
println("Begin setup")
if (Settings.createOrg) Setup.setupOrg()
@@ -54,7 +55,8 @@ class ConfigurableSimulation extends Simulation {
} else {
println("Skipping setup")
}
- )
+ if (Settings.sandboxCollection) Setup.sandboxCollection()
+ }
Settings.setTestStartTime()
if (ScenarioType.isValid(Settings.scenarioType)) {
@@ -70,9 +72,10 @@ class ConfigurableSimulation extends Simulation {
println(s"scenarioType ${Settings.scenarioType} not found.")
}
- after(
+ after {
+ if (Settings.captureUuids) Settings.writeUuidsToFile()
Settings.printSettingsSummary()
- )
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostCustomEntitySimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostCustomEntitySimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostCustomEntitySimulation.scala
index 9369489..2db4160 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostCustomEntitySimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PostCustomEntitySimulation.scala
@@ -30,7 +30,7 @@ import org.apache.usergrid.settings.Settings
* PostCustomEntitySimulation - creates lots of custom entities
*
* Run this way:
- * mvn gatling:execute -DrampTime=10 -DmaxPossibleUsers=10 -Dduration=120 -Dorg=yourorgname -Dapp=sandbox -Dbaseurl=https://api.usergrid.com -DadminUser=yourusername -DadminPassword='yourpassword' -Dgatling.simulationClass=org.apache.usergrid.simulations.deprecated.PostCustomEntitySimulation -DcollectionType=yourcollection
+ * mvn gatling:execute -DrampTime=10 -DmaxPossibleUsers=10 -Dduration=120 -Dorg=yourorgname -Dapp=sandbox -Dbaseurl=https://api.usergrid.com -DadminUser=yourusername -DadminPassword='yourpassword' -Dgatling.simulationClass=org.apache.usergrid.simulations.deprecated.PostCustomEntitySimulation -Dcollection=yourcollection
*
*
*/
@@ -46,8 +46,8 @@ class PostCustomEntitySimulation extends Simulation {
}
val numEntities:Int = Settings.numEntities
- val collectionType = Settings.collectionType
- println("collection type = " + collectionType)
+ val collection = Settings.collection
+ println("collection type = " + collection)
val rampTime:Int = Settings.rampTime
val throttle:Int = Settings.throttle
val feeder = FeederGenerator.generateCustomEntityInfinite(0)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutCustomEntitySimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutCustomEntitySimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutCustomEntitySimulation.scala
index bffed0f..57e4faf 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutCustomEntitySimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/deprecated/PutCustomEntitySimulation.scala
@@ -29,7 +29,7 @@ import org.apache.usergrid.settings.Settings
* PostCustomEntitySimulation - creates lots of custom entities
*
* Run this way:
- * mvn gatling:execute -DrampTime=10 -DmaxPossibleUsers=10 -Dduration=120 -Dorg=yourorgname -Dapp=sandbox -Dbaseurl=https://api.usergrid.com -DadminUser=yourusername -DadminPassword='yourpassword' -Dgatling.simulationClass=org.apache.usergrid.simulations.deprecated.PostCustomEntitySimulation -DcollectionType=yourcollection
+ * mvn gatling:execute -DrampTime=10 -DmaxPossibleUsers=10 -Dduration=120 -Dorg=yourorgname -Dapp=sandbox -Dbaseurl=https://api.usergrid.com -DadminUser=yourusername -DadminPassword='yourpassword' -Dgatling.simulationClass=org.apache.usergrid.simulations.deprecated.PostCustomEntitySimulation -Dcollection=yourcollection
*
*
*/
@@ -45,8 +45,8 @@ class PutCustomEntitySimulation extends Simulation {
}
val numEntities:Int = Settings.numEntities
- val collectionType = Settings.collectionType
- println("collection type = " + collectionType)
+ val collection = Settings.collection
+ println("collection type = " + collection)
val rampTime:Int = Settings.rampTime
val throttle:Int = Settings.throttle
val feeder = FeederGenerator.generateCustomEntityPutInfinite(0)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/test/resources/dummy.csv
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/resources/dummy.csv b/stack/loadtests/src/test/resources/dummy.csv
new file mode 100644
index 0000000..187f36b
--- /dev/null
+++ b/stack/loadtests/src/test/resources/dummy.csv
@@ -0,0 +1 @@
+name,uuid
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/test/resources/logback-test.xml
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/resources/logback-test.xml b/stack/loadtests/src/test/resources/logback-test.xml
index 6a188ab..5ad4ea3 100644
--- a/stack/loadtests/src/test/resources/logback-test.xml
+++ b/stack/loadtests/src/test/resources/logback-test.xml
@@ -26,11 +26,11 @@
</appender>
<!-- Uncomment for logging ALL HTTP request and responses -->
- <!-- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="TRACE" /> -->
+ <!-- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="TRACE" /> -->
<!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="DEBUG" />
+ <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="DEBUG" />
-<logger name="io.gatling.http" level="TRACE" />
+<!-- <logger name="io.gatling.http" level="TRACE" /> -->
<!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
<root level="WARN">
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/af446bee/stack/loadtests/src/test/resources/logback.xml
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/test/resources/logback.xml b/stack/loadtests/src/test/resources/logback.xml
index 6ba218c..232d333 100644
--- a/stack/loadtests/src/test/resources/logback.xml
+++ b/stack/loadtests/src/test/resources/logback.xml
@@ -27,9 +27,9 @@
</appender>
<!-- Uncomment for logging ALL HTTP request and responses -->
- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="TRACE" />
+ <!-- <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="TRACE" /> -->
<!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
- <!--<logger name="io.gatling.http.ahc.AsyncHandlerActor" level="DEBUG" />-->
+ <logger name="io.gatling.http.ahc.AsyncHandlerActor" level="DEBUG" />
<root level="WARN">
<appender-ref ref="CONSOLE" />
[03/21] incubator-usergrid git commit: USERGRID-871: refactor Gatling
load testing code
Posted by to...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c499e421/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/lastNames.txt
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/lastNames.txt b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/lastNames.txt
new file mode 100644
index 0000000..c9ec798
--- /dev/null
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/lastNames.txt
@@ -0,0 +1,88799 @@
+Smith
+Johnson
+Williams
+Jones
+Brown
+Davis
+Miller
+Wilson
+Moore
+Taylor
+Anderson
+Thomas
+Jackson
+White
+Harris
+Martin
+Thompson
+Garcia
+Martinez
+Robinson
+Clark
+Rodriguez
+Lewis
+Lee
+Walker
+Hall
+Allen
+Young
+Hernandez
+King
+Wright
+Lopez
+Hill
+Scott
+Green
+Adams
+Baker
+Gonzalez
+Nelson
+Carter
+Mitchell
+Perez
+Roberts
+Turner
+Phillips
+Campbell
+Parker
+Evans
+Edwards
+Collins
+Stewart
+Sanchez
+Morris
+Rogers
+Reed
+Cook
+Morgan
+Bell
+Murphy
+Bailey
+Rivera
+Cooper
+Richardson
+Cox
+Howard
+Ward
+Torres
+Peterson
+Gray
+Ramirez
+James
+Watson
+Brooks
+Kelly
+Sanders
+Price
+Bennett
+Wood
+Barnes
+Ross
+Henderson
+Coleman
+Jenkins
+Perry
+Powell
+Long
+Patterson
+Hughes
+Flores
+Washington
+Butler
+Simmons
+Foster
+Gonzales
+Bryant
+Alexander
+Russell
+Griffin
+Diaz
+Hayes
+Myers
+Ford
+Hamilton
+Graham
+Sullivan
+Wallace
+Woods
+Cole
+West
+Jordan
+Owens
+Reynolds
+Fisher
+Ellis
+Harrison
+Gibson
+Mcdonald
+Cruz
+Marshall
+Ortiz
+Gomez
+Murray
+Freeman
+Wells
+Webb
+Simpson
+Stevens
+Tucker
+Porter
+Hunter
+Hicks
+Crawford
+Henry
+Boyd
+Mason
+Morales
+Kennedy
+Warren
+Dixon
+Ramos
+Reyes
+Burns
+Gordon
+Shaw
+Holmes
+Rice
+Robertson
+Hunt
+Black
+Daniels
+Palmer
+Mills
+Nichols
+Grant
+Knight
+Ferguson
+Rose
+Stone
+Hawkins
+Dunn
+Perkins
+Hudson
+Spencer
+Gardner
+Stephens
+Payne
+Pierce
+Berry
+Matthews
+Arnold
+Wagner
+Willis
+Ray
+Watkins
+Olson
+Carroll
+Duncan
+Snyder
+Hart
+Cunningham
+Bradley
+Lane
+Andrews
+Ruiz
+Harper
+Fox
+Riley
+Armstrong
+Carpenter
+Weaver
+Greene
+Lawrence
+Elliott
+Chavez
+Sims
+Austin
+Peters
+Kelley
+Franklin
+Lawson
+Fields
+Gutierrez
+Ryan
+Schmidt
+Carr
+Vasquez
+Castillo
+Wheeler
+Chapman
+Oliver
+Montgomery
+Richards
+Williamson
+Johnston
+Banks
+Meyer
+Bishop
+Mccoy
+Howell
+Alvarez
+Morrison
+Hansen
+Fernandez
+Garza
+Harvey
+Little
+Burton
+Stanley
+Nguyen
+George
+Jacobs
+Reid
+Kim
+Fuller
+Lynch
+Dean
+Gilbert
+Garrett
+Romero
+Welch
+Larson
+Frazier
+Burke
+Hanson
+Day
+Mendoza
+Moreno
+Bowman
+Medina
+Fowler
+Brewer
+Hoffman
+Carlson
+Silva
+Pearson
+Holland
+Douglas
+Fleming
+Jensen
+Vargas
+Byrd
+Davidson
+Hopkins
+May
+Terry
+Herrera
+Wade
+Soto
+Walters
+Curtis
+Neal
+Caldwell
+Lowe
+Jennings
+Barnett
+Graves
+Jimenez
+Horton
+Shelton
+Barrett
+Obrien
+Castro
+Sutton
+Gregory
+Mckinney
+Lucas
+Miles
+Craig
+Rodriquez
+Chambers
+Holt
+Lambert
+Fletcher
+Watts
+Bates
+Hale
+Rhodes
+Pena
+Beck
+Newman
+Haynes
+Mcdaniel
+Mendez
+Bush
+Vaughn
+Parks
+Dawson
+Santiago
+Norris
+Hardy
+Love
+Steele
+Curry
+Powers
+Schultz
+Barker
+Guzman
+Page
+Munoz
+Ball
+Keller
+Chandler
+Weber
+Leonard
+Walsh
+Lyons
+Ramsey
+Wolfe
+Schneider
+Mullins
+Benson
+Sharp
+Bowen
+Daniel
+Barber
+Cummings
+Hines
+Baldwin
+Griffith
+Valdez
+Hubbard
+Salazar
+Reeves
+Warner
+Stevenson
+Burgess
+Santos
+Tate
+Cross
+Garner
+Mann
+Mack
+Moss
+Thornton
+Dennis
+Mcgee
+Farmer
+Delgado
+Aguilar
+Vega
+Glover
+Manning
+Cohen
+Harmon
+Rodgers
+Robbins
+Newton
+Todd
+Blair
+Higgins
+Ingram
+Reese
+Cannon
+Strickland
+Townsend
+Potter
+Goodwin
+Walton
+Rowe
+Hampton
+Ortega
+Patton
+Swanson
+Joseph
+Francis
+Goodman
+Maldonado
+Yates
+Becker
+Erickson
+Hodges
+Rios
+Conner
+Adkins
+Webster
+Norman
+Malone
+Hammond
+Flowers
+Cobb
+Moody
+Quinn
+Blake
+Maxwell
+Pope
+Floyd
+Osborne
+Paul
+Mccarthy
+Guerrero
+Lindsey
+Estrada
+Sandoval
+Gibbs
+Tyler
+Gross
+Fitzgerald
+Stokes
+Doyle
+Sherman
+Saunders
+Wise
+Colon
+Gill
+Alvarado
+Greer
+Padilla
+Simon
+Waters
+Nunez
+Ballard
+Schwartz
+Mcbride
+Houston
+Christensen
+Klein
+Pratt
+Briggs
+Parsons
+Mclaughlin
+Zimmerman
+French
+Buchanan
+Moran
+Copeland
+Roy
+Pittman
+Brady
+Mccormick
+Holloway
+Brock
+Poole
+Frank
+Logan
+Owen
+Bass
+Marsh
+Drake
+Wong
+Jefferson
+Park
+Morton
+Abbott
+Sparks
+Patrick
+Norton
+Huff
+Clayton
+Massey
+Lloyd
+Figueroa
+Carson
+Bowers
+Roberson
+Barton
+Tran
+Lamb
+Harrington
+Casey
+Boone
+Cortez
+Clarke
+Mathis
+Singleton
+Wilkins
+Cain
+Bryan
+Underwood
+Hogan
+Mckenzie
+Collier
+Luna
+Phelps
+Mcguire
+Allison
+Bridges
+Wilkerson
+Nash
+Summers
+Atkins
+Wilcox
+Pitts
+Conley
+Marquez
+Burnett
+Richard
+Cochran
+Chase
+Davenport
+Hood
+Gates
+Clay
+Ayala
+Sawyer
+Roman
+Vazquez
+Dickerson
+Hodge
+Acosta
+Flynn
+Espinoza
+Nicholson
+Monroe
+Wolf
+Morrow
+Kirk
+Randall
+Anthony
+Whitaker
+Oconnor
+Skinner
+Ware
+Molina
+Kirby
+Huffman
+Bradford
+Charles
+Gilmore
+Dominguez
+Oneal
+Bruce
+Lang
+Combs
+Kramer
+Heath
+Hancock
+Gallagher
+Gaines
+Shaffer
+Short
+Wiggins
+Mathews
+Mcclain
+Fischer
+Wall
+Small
+Melton
+Hensley
+Bond
+Dyer
+Cameron
+Grimes
+Contreras
+Christian
+Wyatt
+Baxter
+Snow
+Mosley
+Shepherd
+Larsen
+Hoover
+Beasley
+Glenn
+Petersen
+Whitehead
+Meyers
+Keith
+Garrison
+Vincent
+Shields
+Horn
+Savage
+Olsen
+Schroeder
+Hartman
+Woodard
+Mueller
+Kemp
+Deleon
+Booth
+Patel
+Calhoun
+Wiley
+Eaton
+Cline
+Navarro
+Harrell
+Lester
+Humphrey
+Parrish
+Duran
+Hutchinson
+Hess
+Dorsey
+Bullock
+Robles
+Beard
+Dalton
+Avila
+Vance
+Rich
+Blackwell
+York
+Johns
+Blankenship
+Trevino
+Salinas
+Campos
+Pruitt
+Moses
+Callahan
+Golden
+Montoya
+Hardin
+Guerra
+Mcdowell
+Carey
+Stafford
+Gallegos
+Henson
+Wilkinson
+Booker
+Merritt
+Miranda
+Atkinson
+Orr
+Decker
+Hobbs
+Preston
+Tanner
+Knox
+Pacheco
+Stephenson
+Glass
+Rojas
+Serrano
+Marks
+Hickman
+English
+Sweeney
+Strong
+Prince
+Mcclure
+Conway
+Walter
+Roth
+Maynard
+Farrell
+Lowery
+Hurst
+Nixon
+Weiss
+Trujillo
+Ellison
+Sloan
+Juarez
+Winters
+Mclean
+Randolph
+Leon
+Boyer
+Villarreal
+Mccall
+Gentry
+Carrillo
+Kent
+Ayers
+Lara
+Shannon
+Sexton
+Pace
+Hull
+Leblanc
+Browning
+Velasquez
+Leach
+Chang
+House
+Sellers
+Herring
+Noble
+Foley
+Bartlett
+Mercado
+Landry
+Durham
+Walls
+Barr
+Mckee
+Bauer
+Rivers
+Everett
+Bradshaw
+Pugh
+Velez
+Rush
+Estes
+Dodson
+Morse
+Sheppard
+Weeks
+Camacho
+Bean
+Barron
+Livingston
+Middleton
+Spears
+Branch
+Blevins
+Chen
+Kerr
+Mcconnell
+Hatfield
+Harding
+Ashley
+Solis
+Herman
+Frost
+Giles
+Blackburn
+William
+Pennington
+Woodward
+Finley
+Mcintosh
+Koch
+Best
+Solomon
+Mccullough
+Dudley
+Nolan
+Blanchard
+Rivas
+Brennan
+Mejia
+Kane
+Benton
+Joyce
+Buckley
+Haley
+Valentine
+Maddox
+Russo
+Mcknight
+Buck
+Moon
+Mcmillan
+Crosby
+Berg
+Dotson
+Mays
+Roach
+Church
+Chan
+Richmond
+Meadows
+Faulkner
+Oneill
+Knapp
+Kline
+Barry
+Ochoa
+Jacobson
+Gay
+Avery
+Hendricks
+Horne
+Shepard
+Hebert
+Cherry
+Cardenas
+Mcintyre
+Whitney
+Waller
+Holman
+Donaldson
+Cantu
+Terrell
+Morin
+Gillespie
+Fuentes
+Tillman
+Sanford
+Bentley
+Peck
+Key
+Salas
+Rollins
+Gamble
+Dickson
+Battle
+Santana
+Cabrera
+Cervantes
+Howe
+Hinton
+Hurley
+Spence
+Zamora
+Yang
+Mcneil
+Suarez
+Case
+Petty
+Gould
+Mcfarland
+Sampson
+Carver
+Bray
+Rosario
+Macdonald
+Stout
+Hester
+Melendez
+Dillon
+Farley
+Hopper
+Galloway
+Potts
+Bernard
+Joyner
+Stein
+Aguirre
+Osborn
+Mercer
+Bender
+Franco
+Rowland
+Sykes
+Benjamin
+Travis
+Pickett
+Crane
+Sears
+Mayo
+Dunlap
+Hayden
+Wilder
+Mckay
+Coffey
+Mccarty
+Ewing
+Cooley
+Vaughan
+Bonner
+Cotton
+Holder
+Stark
+Ferrell
+Cantrell
+Fulton
+Lynn
+Lott
+Calderon
+Rosa
+Pollard
+Hooper
+Burch
+Mullen
+Fry
+Riddle
+Levy
+David
+Duke
+Odonnell
+Guy
+Michael
+Britt
+Frederick
+Daugherty
+Berger
+Dillard
+Alston
+Jarvis
+Frye
+Riggs
+Chaney
+Odom
+Duffy
+Fitzpatrick
+Valenzuela
+Merrill
+Mayer
+Alford
+Mcpherson
+Acevedo
+Donovan
+Barrera
+Albert
+Cote
+Reilly
+Compton
+Raymond
+Mooney
+Mcgowan
+Craft
+Cleveland
+Clemons
+Wynn
+Nielsen
+Baird
+Stanton
+Snider
+Rosales
+Bright
+Witt
+Stuart
+Hays
+Holden
+Rutledge
+Kinney
+Clements
+Castaneda
+Slater
+Hahn
+Emerson
+Conrad
+Burks
+Delaney
+Pate
+Lancaster
+Sweet
+Justice
+Tyson
+Sharpe
+Whitfield
+Talley
+Macias
+Irwin
+Burris
+Ratliff
+Mccray
+Madden
+Kaufman
+Beach
+Goff
+Cash
+Bolton
+Mcfadden
+Levine
+Good
+Byers
+Kirkland
+Kidd
+Workman
+Carney
+Dale
+Mcleod
+Holcomb
+England
+Finch
+Head
+Burt
+Hendrix
+Sosa
+Haney
+Franks
+Sargent
+Nieves
+Downs
+Rasmussen
+Bird
+Hewitt
+Lindsay
+Le
+Foreman
+Valencia
+Oneil
+Delacruz
+Vinson
+Dejesus
+Hyde
+Forbes
+Gilliam
+Guthrie
+Wooten
+Huber
+Barlow
+Boyle
+Mcmahon
+Buckner
+Rocha
+Puckett
+Langley
+Knowles
+Cooke
+Velazquez
+Whitley
+Noel
+Vang
+Shea
+Rouse
+Hartley
+Mayfield
+Elder
+Rankin
+Hanna
+Cowan
+Lucero
+Arroyo
+Slaughter
+Haas
+Oconnell
+Minor
+Kendrick
+Shirley
+Kendall
+Boucher
+Archer
+Boggs
+Odell
+Dougherty
+Andersen
+Newell
+Crowe
+Wang
+Friedman
+Bland
+Swain
+Holley
+Felix
+Pearce
+Childs
+Yarbrough
+Galvan
+Proctor
+Meeks
+Lozano
+Mora
+Rangel
+Bacon
+Villanueva
+Schaefer
+Rosado
+Helms
+Boyce
+Goss
+Stinson
+Smart
+Lake
+Ibarra
+Hutchins
+Covington
+Reyna
+Gregg
+Werner
+Crowley
+Hatcher
+Mackey
+Bunch
+Womack
+Polk
+Jamison
+Dodd
+Childress
+Childers
+Camp
+Villa
+Dye
+Springer
+Mahoney
+Dailey
+Belcher
+Lockhart
+Griggs
+Costa
+Connor
+Brandt
+Winter
+Walden
+Moser
+Tracy
+Tatum
+Mccann
+Akers
+Lutz
+Pryor
+Law
+Orozco
+Mcallister
+Lugo
+Davies
+Shoemaker
+Madison
+Rutherford
+Newsome
+Magee
+Chamberlain
+Blanton
+Simms
+Godfrey
+Flanagan
+Crum
+Cordova
+Escobar
+Downing
+Sinclair
+Donahue
+Krueger
+Mcginnis
+Gore
+Farris
+Webber
+Corbett
+Andrade
+Starr
+Lyon
+Yoder
+Hastings
+Mcgrath
+Spivey
+Krause
+Harden
+Crabtree
+Kirkpatrick
+Hollis
+Brandon
+Arrington
+Ervin
+Clifton
+Ritter
+Mcghee
+Bolden
+Maloney
+Gagnon
+Dunbar
+Ponce
+Pike
+Mayes
+Heard
+Beatty
+Mobley
+Kimball
+Butts
+Montes
+Herbert
+Grady
+Eldridge
+Braun
+Hamm
+Gibbons
+Seymour
+Moyer
+Manley
+Herron
+Plummer
+Elmore
+Cramer
+Gary
+Rucker
+Hilton
+Blue
+Pierson
+Fontenot
+Field
+Rubio
+Grace
+Goldstein
+Elkins
+Wills
+Novak
+John
+Hickey
+Worley
+Gorman
+Katz
+Dickinson
+Broussard
+Fritz
+Woodruff
+Crow
+Christopher
+Britton
+Forrest
+Nance
+Lehman
+Bingham
+Zuniga
+Whaley
+Shafer
+Coffman
+Steward
+Delarosa
+Nix
+Neely
+Numbers
+Mata
+Manuel
+Davila
+Mccabe
+Kessler
+Emery
+Bowling
+Hinkle
+Welsh
+Pagan
+Goldberg
+Goins
+Crouch
+Cuevas
+Quinones
+Mcdermott
+Hendrickson
+Samuels
+Denton
+Bergeron
+Lam
+Ivey
+Locke
+Haines
+Thurman
+Snell
+Hoskins
+Byrne
+Milton
+Winston
+Arthur
+Arias
+Stanford
+Roe
+Corbin
+Beltran
+Chappell
+Hurt
+Downey
+Dooley
+Tuttle
+Couch
+Payton
+Mcelroy
+Crockett
+Groves
+Clement
+Leslie
+Cartwright
+Dickey
+Mcgill
+Dubois
+Muniz
+Erwin
+Self
+Tolbert
+Dempsey
+Cisneros
+Sewell
+Latham
+Garland
+Vigil
+Tapia
+Sterling
+Rainey
+Norwood
+Lacy
+Stroud
+Meade
+Amos
+Tipton
+Lord
+Kuhn
+Hilliard
+Bonilla
+Teague
+Courtney
+Gunn
+Ho
+Greenwood
+Correa
+Reece
+Weston
+Poe
+Trent
+Pineda
+Phipps
+Frey
+Kaiser
+Ames
+Paige
+Gunter
+Schmitt
+Milligan
+Espinosa
+Carlton
+Bowden
+Vickers
+Lowry
+Pritchard
+Costello
+Piper
+Mcclellan
+Lovell
+Drew
+Sheehan
+Quick
+Hatch
+Dobson
+Singh
+Jeffries
+Hollingsworth
+Sorensen
+Meza
+Fink
+Donnelly
+Burrell
+Bruno
+Tomlinson
+Colbert
+Billings
+Ritchie
+Helton
+Sutherland
+Peoples
+Mcqueen
+Gaston
+Thomason
+Mckinley
+Givens
+Crocker
+Vogel
+Robison
+Dunham
+Coker
+Swartz
+Keys
+Lilly
+Ladner
+Hannah
+Willard
+Richter
+Hargrove
+Edmonds
+Brantley
+Albright
+Murdock
+Boswell
+Muller
+Quintero
+Padgett
+Kenney
+Daly
+Connolly
+Pierre
+Inman
+Quintana
+Lund
+Barnard
+Villegas
+Simons
+Land
+Huggins
+Tidwell
+Sanderson
+Bullard
+Mcclendon
+Duarte
+Draper
+Meredith
+Marrero
+Dwyer
+Abrams
+Stover
+Goode
+Fraser
+Crews
+Bernal
+Smiley
+Godwin
+Fish
+Conklin
+Mcneal
+Baca
+Esparza
+Crowder
+Bower
+Nicholas
+Chung
+Brewster
+Mcneill
+Dick
+Rodrigues
+Leal
+Coates
+Raines
+Mccain
+Mccord
+Miner
+Holbrook
+Swift
+Dukes
+Carlisle
+Aldridge
+Ackerman
+Starks
+Ricks
+Holliday
+Ferris
+Hairston
+Sheffield
+Lange
+Fountain
+Marino
+Doss
+Betts
+Kaplan
+Carmichael
+Bloom
+Ruffin
+Penn
+Kern
+Bowles
+Sizemore
+Larkin
+Dupree
+Jewell
+Silver
+Seals
+Metcalf
+Hutchison
+Henley
+Farr
+Castle
+Mccauley
+Hankins
+Gustafson
+Deal
+Curran
+Ash
+Waddell
+Ramey
+Cates
+Pollock
+Major
+Irvin
+Cummins
+Messer
+Heller
+Dewitt
+Lin
+Funk
+Cornett
+Palacios
+Galindo
+Cano
+Hathaway
+Singer
+Pham
+Enriquez
+Aaron
+Salgado
+Pelletier
+Painter
+Wiseman
+Blount
+Hand
+Feliciano
+Temple
+Houser
+Doherty
+Mead
+Mcgraw
+Toney
+Swan
+Melvin
+Capps
+Blanco
+Blackmon
+Wesley
+Thomson
+Mcmanus
+Fair
+Burkett
+Post
+Gleason
+Rudolph
+Ott
+Dickens
+Cormier
+Voss
+Rushing
+Rosenberg
+Hurd
+Dumas
+Benitez
+Arellano
+Story
+Marin
+Caudill
+Bragg
+Jaramillo
+Huerta
+Gipson
+Colvin
+Biggs
+Vela
+Platt
+Cassidy
+Tompkins
+Mccollum
+Kay
+Gabriel
+Dolan
+Daley
+Crump
+Street
+Sneed
+Kilgore
+Grove
+Grimm
+Davison
+Brunson
+Prater
+Marcum
+Devine
+Kyle
+Dodge
+Stratton
+Rosas
+Choi
+Tripp
+Ledbetter
+Lay
+Hightower
+Haywood
+Feldman
+Epps
+Yeager
+Posey
+Sylvester
+Scruggs
+Cope
+Stubbs
+Richey
+Overton
+Trotter
+Sprague
+Cordero
+Butcher
+Burger
+Stiles
+Burgos
+Woodson
+Horner
+Bassett
+Purcell
+Haskins
+Gee
+Akins
+Abraham
+Hoyt
+Ziegler
+Spaulding
+Hadley
+Grubbs
+Sumner
+Murillo
+Zavala
+Shook
+Lockwood
+Jarrett
+Driscoll
+Dahl
+Thorpe
+Sheridan
+Redmond
+Putnam
+Mcwilliams
+Mcrae
+Cornell
+Felton
+Romano
+Joiner
+Sadler
+Hedrick
+Hager
+Hagen
+Fitch
+Coulter
+Thacker
+Mansfield
+Langston
+Guidry
+Ferreira
+Corley
+Conn
+Rossi
+Lackey
+Cody
+Baez
+Saenz
+Mcnamara
+Darnell
+Michel
+Mcmullen
+Mckenna
+Mcdonough
+Link
+Engel
+Browne
+Roper
+Peacock
+Eubanks
+Drummond
+Stringer
+Pritchett
+Parham
+Mims
+Landers
+Ham
+Grayson
+Stacy
+Schafer
+Egan
+Timmons
+Ohara
+Keen
+Hamlin
+Finn
+Cortes
+Mcnair
+Louis
+Clifford
+Nadeau
+Moseley
+Michaud
+Rosen
+Oakes
+Kurtz
+Jeffers
+Calloway
+Beal
+Bautista
+Winn
+Suggs
+Stern
+Stapleton
+Lyles
+Laird
+Montano
+Diamond
+Dawkins
+Roland
+Hagan
+Goldman
+Bryson
+Barajas
+Lovett
+Segura
+Metz
+Lockett
+Langford
+Hinson
+Eastman
+Rock
+Hooks
+Woody
+Smallwood
+Shapiro
+Crowell
+Whalen
+Triplett
+Hooker
+Chatman
+Aldrich
+Cahill
+Youngblood
+Ybarra
+Stallings
+Sheets
+Samuel
+Reeder
+Person
+Pack
+Lacey
+Connelly
+Bateman
+Abernathy
+Winkler
+Wilkes
+Masters
+Hackett
+Granger
+Gillis
+Schmitz
+Sapp
+Napier
+Souza
+Lanier
+Gomes
+Weir
+Otero
+Ledford
+Burroughs
+Babcock
+Ventura
+Siegel
+Dugan
+Clinton
+Christie
+Bledsoe
+Atwood
+Wray
+Varner
+Spangler
+Otto
+Anaya
+Staley
+Kraft
+Fournier
+Eddy
+Belanger
+Wolff
+Thorne
+Bynum
+Burnette
+Boykin
+Swenson
+Purvis
+Pina
+Khan
+Duvall
+Darby
+Xiong
+Kauffman
+Ali
+Yu
+Healy
+Engle
+Corona
+Benoit
+Valle
+Steiner
+Spicer
+Shaver
+Randle
+Lundy
+Dow
+Chin
+Calvert
+Staton
+Neff
+Kearney
+Darden
+Oakley
+Medeiros
+Mccracken
+Crenshaw
+Block
+Beaver
+Perdue
+Dill
+Whittaker
+Tobin
+Cornelius
+Washburn
+Hogue
+Goodrich
+Easley
+Bravo
+Dennison
+Vera
+Shipley
+Kerns
+Jorgensen
+Crain
+Abel
+Villalobos
+Maurer
+Longoria
+Keene
+Coon
+Sierra
+Witherspoon
+Staples
+Pettit
+Kincaid
+Eason
+Madrid
+Echols
+Lusk
+Wu
+Stahl
+Currie
+Thayer
+Shultz
+Sherwood
+Mcnally
+Seay
+North
+Maher
+Kenny
+Hope
+Gagne
+Barrow
+Nava
+Myles
+Moreland
+Honeycutt
+Hearn
+Diggs
+Caron
+Whitten
+Westbrook
+Stovall
+Ragland
+Queen
+Munson
+Meier
+Looney
+Kimble
+Jolly
+Hobson
+London
+Goddard
+Culver
+Burr
+Presley
+Negron
+Connell
+Tovar
+Marcus
+Huddleston
+Hammer
+Ashby
+Salter
+Root
+Pendleton
+Oleary
+Nickerson
+Myrick
+Judd
+Jacobsen
+Elliot
+Bain
+Adair
+Starnes
+Sheldon
+Matos
+Light
+Busby
+Herndon
+Hanley
+Bellamy
+Jack
+Doty
+Bartley
+Yazzie
+Rowell
+Parson
+Gifford
+Cullen
+Christiansen
+Benavides
+Barnhart
+Talbot
+Mock
+Crandall
+Connors
+Bonds
+Whitt
+Gage
+Bergman
+Arredondo
+Addison
+Marion
+Lujan
+Dowdy
+Jernigan
+Huynh
+Bouchard
+Dutton
+Rhoades
+Ouellette
+Kiser
+Rubin
+Herrington
+Hare
+Denny
+Blackman
+Babb
+Allred
+Rudd
+Paulson
+Ogden
+Koenig
+Jacob
+Irving
+Geiger
+Begay
+Parra
+Champion
+Lassiter
+Hawk
+Esposito
+Cho
+Waldron
+Vernon
+Ransom
+Prather
+Keenan
+Jean
+Grover
+Chacon
+Vick
+Sands
+Roark
+Parr
+Mayberry
+Greenberg
+Coley
+Bruner
+Whitman
+Skaggs
+Shipman
+Means
+Leary
+Hutton
+Romo
+Medrano
+Ladd
+Kruse
+Friend
+Darling
+Askew
+Valentin
+Schulz
+Alfaro
+Tabor
+Mohr
+Gallo
+Bermudez
+Pereira
+Isaac
+Bliss
+Reaves
+Flint
+Comer
+Boston
+Woodall
+Naquin
+Guevara
+Earl
+Delong
+Carrier
+Pickens
+Brand
+Tilley
+Schaffer
+Read
+Lim
+Knutson
+Fenton
+Doran
+Chu
+Vogt
+Vann
+Prescott
+Mclain
+Landis
+Corcoran
+Ambrose
+Zapata
+Hyatt
+Hemphill
+Faulk
+Call
+Dove
+Boudreaux
+Aragon
+Whitlock
+Trejo
+Tackett
+Shearer
+Saldana
+Hanks
+Gold
+Driver
+Mckinnon
+Koehler
+Champagne
+Bourgeois
+Pool
+Keyes
+Goodson
+Foote
+Early
+Lunsford
+Goldsmith
+Flood
+Winslow
+Sams
+Reagan
+Mccloud
+Hough
+Esquivel
+Naylor
+Loomis
+Coronado
+Ludwig
+Braswell
+Bearden
+Sherrill
+Huang
+Fagan
+Ezell
+Edmondson
+Cyr
+Cronin
+Nunn
+Lemon
+Guillory
+Grier
+Dubose
+Traylor
+Ryder
+Dobbins
+Coyle
+Aponte
+Whitmore
+Smalls
+Rowan
+Malloy
+Cardona
+Braxton
+Borden
+Humphries
+Carrasco
+Ruff
+Metzger
+Huntley
+Hinojosa
+Finney
+Madsen
+Hong
+Hills
+Ernst
+Dozier
+Burkhart
+Bowser
+Peralta
+Daigle
+Whittington
+Sorenson
+Saucedo
+Roche
+Redding
+Loyd
+Fugate
+Avalos
+Waite
+Lind
+Huston
+Hay
+Benedict
+Hawthorne
+Hamby
+Boyles
+Boles
+Regan
+Faust
+Crook
+Beam
+Barger
+Hinds
+Gallardo
+Elias
+Willoughby
+Willingham
+Wilburn
+Eckert
+Busch
+Zepeda
+Worthington
+Tinsley
+Russ
+Li
+Hoff
+Hawley
+Carmona
+Varela
+Rector
+Newcomb
+Mallory
+Kinsey
+Dube
+Whatley
+Strange
+Ragsdale
+Ivy
+Bernstein
+Becerra
+Yost
+Mattson
+Ly
+Felder
+Cheek
+Luke
+Handy
+Grossman
+Gauthier
+Escobedo
+Braden
+Beckman
+Mott
+Hillman
+Gil
+Flaherty
+Dykes
+Doe
+Stockton
+Stearns
+Lofton
+Kitchen
+Coats
+Cavazos
+Beavers
+Barrios
+Tang
+Parish
+Mosher
+Lincoln
+Cardwell
+Coles
+Burnham
+Weller
+Lemons
+Beebe
+Aguilera
+Ring
+Parnell
+Harman
+Couture
+Alley
+Schumacher
+Redd
+Dobbs
+Blum
+Blalock
+Merchant
+Ennis
+Denson
+Cottrell
+Chester
+Brannon
+Bagley
+Aviles
+Watt
+Sousa
+Rosenthal
+Rooney
+Dietz
+Blank
+Paquette
+Mcclelland
+Duff
+Velasco
+Lentz
+Grubb
+Burrows
+Barbour
+Ulrich
+Shockley
+Rader
+German
+Beyer
+Mixon
+Layton
+Altman
+Alonzo
+Weathers
+Titus
+Stoner
+Squires
+Shipp
+Priest
+Lipscomb
+Cutler
+Caballero
+Zimmer
+Willett
+Thurston
+Storey
+Medley
+Lyle
+Epperson
+Shah
+Mcmillian
+Baggett
+Torrez
+Laws
+Hirsch
+Dent
+Corey
+Poirier
+Peachey
+Jacques
+Farrar
+Creech
+Barth
+Trimble
+France
+Dupre
+Albrecht
+Sample
+Lawler
+Crisp
+Conroy
+Chadwick
+Wetzel
+Nesbitt
+Murry
+Jameson
+Wilhelm
+Patten
+Minton
+Matson
+Kimbrough
+Iverson
+Guinn
+Gale
+Fortune
+Croft
+Toth
+Pulliam
+Nugent
+Newby
+Littlejohn
+Dias
+Canales
+Bernier
+Baron
+Barney
+Singletary
+Renteria
+Pruett
+Mchugh
+Mabry
+Landrum
+Brower
+Weldon
+Stoddard
+Ruth
+Cagle
+Stjohn
+Scales
+Kohler
+Kellogg
+Hopson
+Gant
+Tharp
+Gann
+Zeigler
+Pringle
+Hammons
+Fairchild
+Deaton
+Chavis
+Carnes
+Rowley
+Matlock
+Libby
+Kearns
+Irizarry
+Carrington
+Starkey
+Pepper
+Lopes
+Jarrell
+Fay
+Craven
+Beverly
+Baum
+Spain
+Littlefield
+Linn
+Humphreys
+Hook
+High
+Etheridge
+Cuellar
+Chastain
+Chance
+Bundy
+Speer
+Skelton
+Quiroz
+Pyle
+Portillo
+Ponder
+Moulton
+Machado
+Liu
+Killian
+Hutson
+Hitchcock
+Ellsworth
+Dowling
+Cloud
+Burdick
+Spann
+Pedersen
+Levin
+Leggett
+Hayward
+Hacker
+Dietrich
+Beaulieu
+Barksdale
+Wakefield
+Snowden
+Paris
+Briscoe
+Bowie
+Berman
+Ogle
+Mcgregor
+Laughlin
+Helm
+Burden
+Wheatley
+Schreiber
+Pressley
+Parris
+Ng
+Alaniz
+Agee
+Urban
+Swann
+Snodgrass
+Schuster
+Radford
+Monk
+Mattingly
+Main
+Lamar
+Harp
+Girard
+Cheney
+Yancey
+Wagoner
+Ridley
+Lombardo
+Lau
+Hudgins
+Gaskins
+Duckworth
+Coe
+Coburn
+Willey
+Prado
+Newberry
+Magana
+Hammonds
+Elam
+Whipple
+Slade
+Serna
+Ojeda
+Liles
+Dorman
+Diehl
+Angel
+Upton
+Reardon
+Michaels
+Kelsey
+Goetz
+Eller
+Bauman
+Baer
+Augustine
+Layne
+Hummel
+Brenner
+Amaya
+Adamson
+Ornelas
+Dowell
+Cloutier
+Christy
+Castellanos
+Wing
+Wellman
+Saylor
+Orourke
+Moya
+Montalvo
+Kilpatrick
+Harley
+Durbin
+Shell
+Oldham
+Kang
+Garvin
+Foss
+Branham
+Bartholomew
+Templeton
+Maguire
+Holton
+Alonso
+Rider
+Monahan
+Mccormack
+Beaty
+Anders
+Streeter
+Nieto
+Nielson
+Moffett
+Lankford
+Keating
+Heck
+Gatlin
+Delatorre
+Callaway
+Adcock
+Worrell
+Unger
+Robinette
+Nowak
+Jeter
+Brunner
+Ashton
+Steen
+Parrott
+Overstreet
+Nobles
+Montanez
+Luther
+Clevenger
+Brinkley
+Trahan
+Quarles
+Pickering
+Pederson
+Jansen
+Grantham
+Gilchrist
+Crespo
+Aiken
+Schell
+Schaeffer
+Lorenz
+Leyva
+Harms
+Dyson
+Wallis
+Pease
+Leavitt
+Hyman
+Cheng
+Cavanaugh
+Batts
+Warden
+Seaman
+Rockwell
+Quezada
+Paxton
+Linder
+Houck
+Fontaine
+Durant
+Caruso
+Adler
+Pimentel
+Mize
+Lytle
+Donald
+Cleary
+Cason
+Acker
+Switzer
+Salmon
+Isaacs
+Higginbotham
+Han
+Waterman
+Vandyke
+Stamper
+Sisk
+Shuler
+Riddick
+Redman
+Mcmahan
+Levesque
+Hatton
+Bronson
+Bollinger
+Arnett
+Okeefe
+Gerber
+Gannon
+Farnsworth
+Baughman
+Silverman
+Satterfield
+Royal
+Mccrary
+Kowalski
+Joy
+Grigsby
+Greco
+Cabral
+Trout
+Rinehart
+Mahon
+Linton
+Gooden
+Curley
+Baugh
+Wyman
+Weiner
+Schwab
+Schuler
+Morrissey
+Mahan
+Coy
+Bunn
+Andrew
+Thrasher
+Spear
+Waggoner
+Shelley
+Robert
+Qualls
+Purdy
+Mcwhorter
+Mauldin
+Mark
+Jordon
+Gilman
+Perryman
+Newsom
+Menard
+Martino
+Graf
+Billingsley
+Artis
+Simpkins
+Salisbury
+Quintanilla
+Gilliland
+Fraley
+Foust
+Crouse
+Scarborough
+Ngo
+Grissom
+Fultz
+Rico
+Marlow
+Markham
+Madrigal
+Lawton
+Barfield
+Whiting
+Varney
+Schwarz
+Huey
+Gooch
+Arce
+Wheat
+Truong
+Poulin
+Mackenzie
+Leone
+Hurtado
+Selby
+Gaither
+Fortner
+Culpepper
+Coughlin
+Brinson
+Boudreau
+Barkley
+Bales
+Stepp
+Holm
+Tan
+Schilling
+Morrell
+Kahn
+Heaton
+Gamez
+Douglass
+Causey
+Brothers
+Turpin
+Shanks
+Schrader
+Meek
+Isom
+Hardison
+Carranza
+Yanez
+Way
+Scroggins
+Schofield
+Runyon
+Ratcliff
+Murrell
+Moeller
+Irby
+Currier
+Butterfield
+Yee
+Ralston
+Pullen
+Pinson
+Estep
+East
+Carbone
+Lance
+Hawks
+Ellington
+Casillas
+Spurlock
+Sikes
+Motley
+Mccartney
+Kruger
+Isbell
+Houle
+Francisco
+Burk
+Bone
+Tomlin
+Shelby
+Quigley
+Neumann
+Lovelace
+Fennell
+Colby
+Cheatham
+Bustamante
+Skidmore
+Hidalgo
+Forman
+Culp
+Bowens
+Betancourt
+Aquino
+Robb
+Rea
+Milner
+Martel
+Gresham
+Wiles
+Ricketts
+Gavin
+Dowd
+Collazo
+Bostic
+Blakely
+Sherrod
+Power
+Kenyon
+Gandy
+Ebert
+Deloach
+Cary
+Bull
+Allard
+Sauer
+Robins
+Olivares
+Gillette
+Chestnut
+Bourque
+Paine
+Lyman
+Hite
+Hauser
+Devore
+Crawley
+Chapa
+Vu
+Tobias
+Talbert
+Poindexter
+Millard
+Meador
+Mcduffie
+Mattox
+Kraus
+Harkins
+Choate
+Bess
+Wren
+Sledge
+Sanborn
+Outlaw
+Kinder
+Geary
+Cornwell
+Barclay
+Adam
+Abney
+Seward
+Rhoads
+Howland
+Fortier
+Easter
+Benner
+Vines
+Tubbs
+Troutman
+Rapp
+Noe
+Mccurdy
+Harder
+Deluca
+Westmoreland
+South
+Havens
+Guajardo
+Ely
+Clary
+Seal
+Meehan
+Herzog
+Guillen
+Ashcraft
+Waugh
+Renner
+Milam
+Jung
+Elrod
+Churchill
+Buford
+Breaux
+Bolin
+Asher
+Windham
+Tirado
+Pemberton
+Nolen
+Noland
+Knott
+Emmons
+Cornish
+Christenson
+Brownlee
+Barbee
+Waldrop
+Pitt
+Olvera
+Lombardi
+Gruber
+Gaffney
+Eggleston
+Banda
+Archuleta
+Still
+Slone
+Prewitt
+Pfeiffer
+Nettles
+Mena
+Mcadams
+Henning
+Gardiner
+Cromwell
+Chisholm
+Burleson
+Box
+Vest
+Oglesby
+Mccarter
+Malcolm
+Lumpkin
+Larue
+Grey
+Wofford
+Vanhorn
+Thorn
+Teel
+Swafford
+Stclair
+Stanfield
+Ocampo
+Herrmann
+Hannon
+Arsenault
+Roush
+Mcalister
+Hiatt
+Gunderson
+Forsythe
+Duggan
+Delvalle
+Cintron
+Wilks
+Weinstein
+Uribe
+Rizzo
+Noyes
+Mclendon
+Gurley
+Bethea
+Winstead
+Maples
+Harry
+Guyton
+Giordano
+Alderman
+Valdes
+Polanco
+Pappas
+Lively
+Grogan
+Griffiths
+Bobo
+Arevalo
+Whitson
+Sowell
+Rendon
+Matthew
+Julian
+Fernandes
+Farrow
+Edmond
+Benavidez
+Ayres
+Alicea
+Stump
+Smalley
+Seitz
+Schulte
+Gilley
+Gallant
+Dewey
+Casper
+Canfield
+Wolford
+Omalley
+Mcnutt
+Mcnulty
+Mcgovern
+Hardman
+Harbin
+Cowart
+Chavarria
+Brink
+Beckett
+Bagwell
+Armstead
+Anglin
+Abreu
+Reynoso
+Krebs
+Jett
+Hoffmann
+Greenfield
+Forte
+Burney
+Broome
+Sisson
+Parent
+Jude
+Younger
+Trammell
+Partridge
+Marvin
+Mace
+Lomax
+Lemieux
+Gossett
+Frantz
+Fogle
+Cooney
+Broughton
+Pence
+Paulsen
+Neil
+Muncy
+Mcarthur
+Hollins
+Edward
+Beauchamp
+Withers
+Osorio
+Mulligan
+Hoyle
+Foy
+Dockery
+Cockrell
+Begley
+Amador
+Roby
+Rains
+Lindquist
+Gentile
+Everhart
+Bohannon
+Wylie
+Thao
+Sommers
+Purnell
+Palma
+Fortin
+Dunning
+Breeden
+Vail
+Phelan
+Phan
+Marx
+Cosby
+Colburn
+Chong
+Boling
+Biddle
+Ledesma
+Gaddis
+Denney
+Chow
+Bueno
+Berrios
+Wicker
+Tolliver
+Thibodeaux
+Nagle
+Lavoie
+Fisk
+Do
+Crist
+Barbosa
+Reedy
+March
+Locklear
+Kolb
+Himes
+Behrens
+Beckwith
+Beckham
+Weems
+Wahl
+Shorter
+Shackelford
+Rees
+Muse
+Free
+Cerda
+Valadez
+Thibodeau
+Saavedra
+Ridgeway
+Reiter
+Mchenry
+Majors
+Lachance
+Keaton
+Israel
+Ferrara
+Falcon
+Clemens
+Blocker
+Applegate
+Paz
+Needham
+Mojica
+Kuykendall
+Hamel
+Escamilla
+Doughty
+Burchett
+Ainsworth
+Wilbur
+Vidal
+Upchurch
+Thigpen
+Strauss
+Spruill
+Sowers
+Riggins
+Ricker
+Mccombs
+Harlow
+Garnett
+Buffington
+Yi
+Sotelo
+Olivas
+Negrete
+Morey
+Macon
+Logsdon
+Lapointe
+Florence
+Cathey
+Bigelow
+Bello
+Westfall
+Stubblefield
+Peak
+Lindley
+Jeffrey
+Hein
+Hawes
+Farrington
+Edge
+Breen
+Birch
+Wilde
+Steed
+Sepulveda
+Reinhardt
+Proffitt
+Minter
+Messina
+Mcnabb
+Maier
+Keeler
+Gamboa
+Donohue
+Dexter
+Basham
+Shinn
+Orlando
+Crooks
+Cota
+Borders
+Bills
+Bachman
+Tisdale
+Tavares
+Schmid
+Pickard
+Jasper
+Gulley
+Fonseca
+Delossantos
+Condon
+Clancy
+Batista
+Wicks
+Wadsworth
+New
+Martell
+Lo
+Littleton
+Ison
+Haag
+Folsom
+Brumfield
+Broyles
+Brito
+Mireles
+Mcdonnell
+Leclair
+Hamblin
+Gough
+Fanning
+Binder
+Winfield
+Whitworth
+Soriano
+Palumbo
+Newkirk
+Mangum
+Hutcherson
+Comstock
+Cecil
+Carlin
+Beall
+Bair
+Wendt
+Watters
+Walling
+Putman
+Otoole
+Oliva
+Morley
+Mares
+Lemus
+Keener
+Jeffery
+Hundley
+Dial
+Damico
+Billups
+Strother
+Mcfarlane
+Lamm
+Eaves
+Crutcher
+Caraballo
+Canty
+Atwell
+Taft
+Siler
+Rust
+Rawls
+Rawlings
+Prieto
+Niles
+Mcneely
+Mcafee
+Hulsey
+Harlan
+Hackney
+Galvez
+Escalante
+Delagarza
+Crider
+Charlton
+Bandy
+Wilbanks
+Stowe
+Steinberg
+Samson
+Renfro
+Masterson
+Massie
+Lanham
+Haskell
+Hamrick
+Fort
+Dehart
+Card
+Burdette
+Branson
+Bourne
+Babin
+Aleman
+Worthy
+Tibbs
+Sweat
+Smoot
+Slack
+Paradis
+Packard
+Mull
+Luce
+Houghton
+Gantt
+Furman
+Danner
+Christianson
+Burge
+Broderick
+Ashford
+Arndt
+Almeida
+Stallworth
+Shade
+Searcy
+Sager
+Noonan
+Mclemore
+Mcintire
+Maxey
+Lavigne
+Jobe
+Ireland
+Ferrer
+Falk
+Edgar
+Coffin
+Byrnes
+Aranda
+Apodaca
+Stamps
+Rounds
+Peek
+Olmstead
+Lewandowski
+Kaminski
+Her
+Dunaway
+Bruns
+Brackett
+Amato
+Reich
+Mcclung
+Lacroix
+Koontz
+Herrick
+Hardesty
+Flanders
+Cousins
+Close
+Cato
+Cade
+Vickery
+Shank
+Nagel
+Dupuis
+Croteau
+Cotter
+Cable
+Stuckey
+Stine
+Porterfield
+Pauley
+Nye
+Moffitt
+Lu
+Knudsen
+Hardwick
+Goforth
+Dupont
+Blunt
+Barrows
+Barnhill
+Shull
+Rash
+Ralph
+Penny
+Lorenzo
+Loftis
+Lemay
+Kitchens
+Horvath
+Grenier
+Fuchs
+Fairbanks
+Culbertson
+Calkins
+Burnside
+Beattie
+Ashworth
+Albertson
+Wertz
+Vo
+Vaught
+Vallejo
+Tyree
+Turk
+Tuck
+Tijerina
+Sage
+Picard
+Peterman
+Otis
+Marroquin
+Marr
+Lantz
+Hoang
+Demarco
+Daily
+Cone
+Berube
+Barnette
+Wharton
+Stinnett
+Slocum
+Scanlon
+Sander
+Pinto
+Mancuso
+Lima
+Judge
+Headley
+Epstein
+Counts
+Clarkson
+Carnahan
+Brice
+Boren
+Arteaga
+Adame
+Zook
+Whittle
+Whitehurst
+Wenzel
+Saxton
+Rhea
+Reddick
+Puente
+Hazel
+Handley
+Haggerty
+Earley
+Devlin
+Dallas
+Chaffin
+Cady
+Ahmed
+Acuna
+Solano
+Sigler
+Pollack
+Pendergrass
+Ostrander
+Janes
+Francois
+Fine
+Crutchfield
+Cordell
+Chamberlin
+Brubaker
+Baptiste
+Willson
+Reis
+Neeley
+Mullin
+Mercier
+Lira
+Layman
+Keeling
+Higdon
+Guest
+Forrester
+Espinal
+Dion
+Chapin
+Carl
+Warfield
+Toledo
+Pulido
+Peebles
+Nagy
+Montague
+Mello
+Lear
+Jaeger
+Hogg
+Graff
+Furr
+Derrick
+Cave
+Canada
+Soliz
+Poore
+Mendenhall
+Mclaurin
+Maestas
+Low
+Gable
+Belt
+Barraza
+Tillery
+Snead
+Pond
+Neill
+Mcculloch
+Mccorkle
+Lightfoot
+Hutchings
+Holloman
+Harness
+Dorn
+Council
+Bock
+Zielinski
+Turley
+Treadwell
+Stpierre
+Starling
+Somers
+Oswald
+Merrick
+Marquis
+Ivory
+Easterling
+Bivens
+Truitt
+Poston
+Parry
+Ontiveros
+Olivarez
+Neville
+Moreau
+Medlin
+Ma
+Lenz
+Knowlton
+Fairley
+Cobbs
+Chisolm
+Bannister
+Woodworth
+Toler
+Ocasio
+Noriega
+Neuman
+Moye
+Milburn
+Mcclanahan
+Lilley
+Hanes
+Flannery
+Dellinger
+Danielson
+Conti
+Blodgett
+Beers
+Weatherford
+Strain
+Karr
+Hitt
+Denham
+Custer
+Coble
+Clough
+Casteel
+Bolduc
+Batchelor
+Ammons
+Whitlow
+Tierney
+Staten
+Sibley
+Seifert
+Schubert
+Salcedo
+Mattison
+Laney
+Haggard
+Grooms
+Dix
+Dees
+Cromer
+Cooks
+Colson
+Caswell
+Zarate
+Swisher
+Stacey
+Shin
+Ragan
+Pridgen
+Mcvey
+Matheny
+Leigh
+Lafleur
+Franz
+Ferraro
+Dugger
+Whiteside
+Rigsby
+Mcmurray
+Lehmann
+Large
+Jacoby
+Hildebrand
+Hendrick
+Headrick
+Goad
+Fincher
+Drury
+Borges
+Archibald
+Albers
+Woodcock
+Trapp
+Soares
+Seaton
+Richie
+Monson
+Luckett
+Lindberg
+Kopp
+Keeton
+Hsu
+Healey
+Garvey
+Gaddy
+Fain
+Burchfield
+Badger
+Wentworth
+Strand
+Stack
+Spooner
+Saucier
+Sales
+Ruby
+Ricci
+Plunkett
+Pannell
+Ness
+Leger
+Hoy
+Freitas
+Fong
+Elizondo
+Duval
+Chun
+Calvin
+Beaudoin
+Urbina
+Stock
+Rickard
+Partin
+Moe
+Mcgrew
+Mcclintock
+Ledoux
+Forsyth
+Faison
+Devries
+Bertrand
+Wasson
+Tilton
+Scarbrough
+Pride
+Oh
+Leung
+Larry
+Irvine
+Garber
+Denning
+Corral
+Colley
+Castleberry
+Bowlin
+Bogan
+Beale
+Baines
+True
+Trice
+Rayburn
+Parkinson
+Pak
+Nunes
+Mcmillen
+Leahy
+Lea
+Kimmel
+Higgs
+Fulmer
+Carden
+Bedford
+Taggart
+Spearman
+Register
+Prichard
+Morrill
+Koonce
+Heinz
+Hedges
+Guenther
+Grice
+Findley
+Earle
+Dover
+Creighton
+Boothe
+Bayer
+Arreola
+Vitale
+Valles
+See
+Raney
+Peter
+Osgood
+Lowell
+Hanlon
+Burley
+Bounds
+Worden
+Weatherly
+Vetter
+Tanaka
+Stiltner
+Sell
+Nevarez
+Mosby
+Montero
+Melancon
+Harter
+Hamer
+Goble
+Gladden
+Gist
+Ginn
+Akin
+Zaragoza
+Towns
+Tarver
+Sammons
+Royster
+Oreilly
+Muir
+Morehead
+Luster
+Kingsley
+Kelso
+Grisham
+Glynn
+Baumann
+Alves
+Yount
+Tamayo
+Tam
+Paterson
+Oates
+Menendez
+Longo
+Hargis
+Greenlee
+Gillen
+Desantis
+Conover
+Breedlove
+Wayne
+Sumpter
+Scherer
+Rupp
+Reichert
+Heredia
+Fallon
+Creel
+Cohn
+Clemmons
+Casas
+Bickford
+Belton
+Bach
+Williford
+Whitcomb
+Tennant
+Sutter
+Stull
+Sessions
+Mccallum
+Manson
+Langlois
+Keel
+Keegan
+Emanuel
+Dangelo
+Dancy
+Damron
+Clapp
+Clanton
+Bankston
+Trinidad
+Oliveira
+Mintz
+Mcinnis
+Martens
+Mabe
+Laster
+Jolley
+Irish
+Hildreth
+Hefner
+Glaser
+Duckett
+Demers
+Brockman
+Blais
+Back
+Alcorn
+Agnew
+Toliver
+Tice
+Song
+Seeley
+Najera
+Musser
+Mcfall
+Laplante
+Galvin
+Fajardo
+Doan
+Coyne
+Copley
+Clawson
+Cheung
+Barone
+Wynne
+Woodley
+Tremblay
+Stoll
+Sparrow
+Sparkman
+Schweitzer
+Sasser
+Samples
+Roney
+Ramon
+Legg
+Lai
+Joe
+Heim
+Farias
+Concepcion
+Colwell
+Christman
+Bratcher
+Alba
+Winchester
+Upshaw
+Southerland
+Sorrell
+Shay
+Sells
+Mount
+Mccloskey
+Martindale
+Luttrell
+Loveless
+Lovejoy
+Linares
+Latimer
+Holly
+Embry
+Coombs
+Bratton
+Bostick
+Boss
+Venable
+Tuggle
+Toro
+Staggs
+Sandlin
+Jefferies
+Heckman
+Griffis
+Crayton
+Clem
+Button
+Browder
+Allan
+Thorton
+Sturgill
+Sprouse
+Royer
+Rousseau
+Ridenour
+Pogue
+Perales
+Peeples
+Metzler
+Mesa
+Mccutcheon
+Mcbee
+Jay
+Hornsby
+Heffner
+Corrigan
+Armijo
+Vue
+Romeo
+Plante
+Peyton
+Paredes
+Macklin
+Hussey
+Hodgson
+Granados
+Frias
+Carman
+Brent
+Becnel
+Batten
+Almanza
+Turney
+Teal
+Sturgeon
+Meeker
+Mcdaniels
+Limon
+Keeney
+Kee
+Hutto
+Holguin
+Gorham
+Fishman
+Fierro
+Blanchette
+Rodrigue
+Reddy
+Osburn
+Oden
+Lerma
+Kirkwood
+Keefer
+Haugen
+Hammett
+Chalmers
+Carlos
+Brinkman
+Baumgartner
+Zhang
+Valerio
+Tellez
+Steffen
+Shumate
+Sauls
+Ripley
+Kemper
+Jacks
+Guffey
+Evers
+Craddock
+Carvalho
+Blaylock
+Banuelos
+Balderas
+Wooden
+Wheaton
+Turnbull
+Shuman
+Pointer
+Mosier
+Mccue
+Ligon
+Kozlowski
+Johansen
+Ingle
+Herr
+Briones
+Southern
+Snipes
+Rickman
+Pipkin
+Peace
+Pantoja
+Orosco
+Moniz
+Lawless
+Kunkel
+Hibbard
+Galarza
+Enos
+Bussey
+Settle
+Schott
+Salcido
+Perreault
+Mcdougal
+Mccool
+Haight
+Garris
+Ferry
+Easton
+Conyers
+Atherton
+Wimberly
+Utley
+Stephen
+Spellman
+Smithson
+Slagle
+Skipper
+Ritchey
+Rand
+Petit
+Osullivan
+Oaks
+Nutt
+Mcvay
+Mccreary
+Mayhew
+Knoll
+Jewett
+Harwood
+Hailey
+Cardoza
+Ashe
+Arriaga
+Andres
+Zeller
+Wirth
+Whitmire
+Stauffer
+Spring
+Rountree
+Redden
+Mccaffrey
+Martz
+Loving
+Larose
+Langdon
+Humes
+Gaskin
+Faber
+Doll
+Devito
+Cass
+Almond
+Wingfield
+Wingate
+Villareal
+Tyner
+Smothers
+Severson
+Reno
+Pennell
+Maupin
+Leighton
+Janssen
+Hassell
+Hallman
+Halcomb
+Folse
+Fitzsimmons
+Fahey
+Cranford
+Bolen
+Battles
+Battaglia
+Wooldridge
+Weed
+Trask
+Rosser
+Regalado
+Mcewen
+Keefe
+Fuqua
+Echevarria
+Domingo
+Dang
+Caro
+Boynton
+Andrus
+Wild
+Viera
+Vanmeter
+Taber
+Spradlin
+Seibert
+Provost
+Prentice
+Oliphant
+Laporte
+Hwang
+Hatchett
+Hass
+Greiner
+Freedman
+Covert
+Chilton
+Byars
+Wiese
+Venegas
+Swank
+Shrader
+Roderick
+Roberge
+Mullis
+Mortensen
+Mccune
+Marlowe
+Kirchner
+Keck
+Isaacson
+Hostetler
+Halverson
+Gunther
+Griswold
+Gerard
+Fenner
+Durden
+Blackwood
+Bertram
+Ahrens
+Sawyers
+Savoy
+Nabors
+Mcswain
+Mackay
+Loy
+Lavender
+Lash
+Labbe
+Jessup
+Hubert
+Fullerton
+Donnell
+Cruse
+Crittenden
+Correia
+Centeno
+Caudle
+Canady
+Callender
+Alarcon
+Ahern
+Winfrey
+Tribble
+Tom
+Styles
+Salley
+Roden
+Musgrove
+Minnick
+Fortenberry
+Carrion
+Bunting
+Bethel
+Batiste
+Woo
+Whited
+Underhill
+Stillwell
+Silvia
+Rauch
+Pippin
+Perrin
+Messenger
+Mancini
+Lister
+Kinard
+Hartmann
+Fleck
+Broadway
+Wilt
+Treadway
+Thornhill
+Speed
+Spalding
+Sam
+Rafferty
+Pitre
+Patino
+Ordonez
+Linkous
+Kelleher
+Homan
+Holiday
+Galbraith
+Feeney
+Dorris
+Curtin
+Coward
+Camarillo
+Buss
+Bunnell
+Bolt
+Beeler
+Autry
+Alcala
+Witte
+Wentz
+Stidham
+Shively
+Nunley
+Meacham
+Martins
+Lemke
+Lefebvre
+Kaye
+Hynes
+Horowitz
+Hoppe
+Holcombe
+Estrella
+Dunne
+Derr
+Cochrane
+Brittain
+Bedard
+Beauregard
+Torrence
+Strunk
+Soria
+Simonson
+Shumaker
+Scoggins
+Packer
+Oconner
+Moriarty
+Leroy
+Kuntz
+Ives
+Hutcheson
+Horan
+Hales
+Garmon
+Fitts
+Dell
+Bohn
+Atchison
+Worth
+Wisniewski
+Will
+Vanwinkle
+Sturm
+Sallee
+Prosser
+Moen
+Lundberg
+Kunz
+Kohl
+Keane
+Jorgenson
+Jaynes
+Funderburk
+Freed
+Frame
+Durr
+Creamer
+Cosgrove
+Candelaria
+Berlin
+Batson
+Vanhoose
+Thomsen
+Teeter
+Sommer
+Smyth
+Sena
+Redmon
+Orellana
+Maness
+Lennon
+Heflin
+Goulet
+Frick
+Forney
+Dollar
+Bunker
+Asbury
+Aguiar
+Talbott
+Southard
+Pleasant
+Mowery
+Mears
+Lemmon
+Krieger
+Hickson
+Gracia
+Elston
+Duong
+Delgadillo
+Dayton
+Dasilva
+Conaway
+Catron
+Bruton
+Bradbury
+Bordelon
+Bivins
+Bittner
+Bergstrom
+Beals
+Abell
+Whelan
+Travers
+Tejada
+Pulley
+Pino
+Norfleet
+Nealy
+Maes
+Loper
+Held
+Gerald
+Gatewood
+Frierson
+Freund
+Finnegan
+Cupp
+Covey
+Catalano
+Boehm
+Bader
+Yoon
+Walston
+Tenney
+Sipes
+Roller
+Rawlins
+Medlock
+Mccaskill
+Mccallister
+Marcotte
+Maclean
+Hughey
+Henke
+Harwell
+Gladney
+Gilson
+Dew
+Chism
+Caskey
+Brandenburg
+Baylor
+Villasenor
+Veal
+Van
+Thatcher
+Stegall
+Shore
+Petrie
+Nowlin
+Navarrete
+Muhammad
+Lombard
+Loftin
+Lemaster
+Kroll
+Kovach
+Kimbrell
+Kidwell
+Hershberger
+Fulcher
+Eng
+Cantwell
+Bustos
+Boland
+Bobbitt
+Binkley
+Wester
+Weis
+Verdin
+Tong
+Tiller
+Sisco
+Sharkey
+Seymore
+Rosenbaum
+Rohr
+Quinonez
+Pinkston
+Nation
+Malley
+Logue
+Lessard
+Lerner
+Lebron
+Krauss
+Klinger
+Halstead
+Haller
+Getz
+Burrow
+Brant
+Alger
+Victor
+Shores
+Scully
+Pounds
+Pfeifer
+Perron
+Nelms
+Munn
+Mcmaster
+Mckenney
+Manns
+Knudson
+Hutchens
+Huskey
+Goebel
+Flagg
+Cushman
+Click
+Castellano
+Carder
+Bumgarner
+Blaine
+Bible
+Wampler
+Spinks
+Robson
+Neel
+Mcreynolds
+Mathias
+Maas
+Loera
+Kasper
+Jose
+Jenson
+Florez
+Coons
+Buckingham
+Brogan
+Berryman
+Wilmoth
+Wilhite
+Thrash
+Shephard
+Seidel
+Schulze
+Roldan
+Pettis
+Obryan
+Maki
+Mackie
+Hatley
+Frazer
+Fiore
+Falls
+Chesser
+Bui
+Bottoms
+Bisson
+Benefield
+Allman
+Wilke
+Trudeau
+Timm
+Shifflett
+Rau
+Mundy
+Milliken
+Mayers
+Leake
+Kohn
+Huntington
+Horsley
+Hermann
+Guerin
+Fryer
+Frizzell
+Foret
+Flemming
+Fife
+Criswell
+Carbajal
+Bozeman
+Boisvert
+Archie
+Antonio
+Angulo
+Wallen
+Tapp
+Silvers
+Ramsay
+Oshea
+Orta
+Moll
+Mckeever
+Mcgehee
+Luciano
+Linville
+Kiefer
+Ketchum
+Howerton
+Groce
+Gaylord
+Gass
+Fusco
+Corbitt
+Blythe
+Betz
+Bartels
+Amaral
+Aiello
+Yoo
+Weddle
+Troy
+Sun
+Sperry
+Seiler
+Runyan
+Raley
+Overby
+Osteen
+Olds
+Mckeown
+Mauro
+Matney
+Lauer
+Lattimore
+Hindman
+Hartwell
+Fredrickson
+Fredericks
+Espino
+Clegg
+Carswell
+Cambell
+Burkholder
+August
+Woodbury
+Welker
+Totten
+Thornburg
+Theriault
+Stitt
+Stamm
+Stackhouse
+Simone
+Scholl
+Saxon
+Rife
+Razo
+Quinlan
+Pinkerton
+Olivo
+Nesmith
+Nall
+Mattos
+Leak
+Lafferty
+Justus
+Giron
+Geer
+Fielder
+Eagle
+Drayton
+Dortch
+Conners
+Conger
+Chau
+Boatwright
+Billiot
+Barden
+Armenta
+Antoine
+Tibbetts
+Steadman
+Slattery
+Sides
+Rinaldi
+Raynor
+Rayford
+Pinckney
+Pettigrew
+Nickel
+Milne
+Matteson
+Halsey
+Gonsalves
+Fellows
+Durand
+Desimone
+Cowley
+Cowles
+Brill
+Barham
+Barela
+Barba
+Ashmore
+Withrow
+Valenti
+Tejeda
+Spriggs
+Sayre
+Salerno
+Place
+Peltier
+Peel
+Merriman
+Matheson
+Lowman
+Lindstrom
+Hyland
+Homer
+Ha
+Giroux
+Fries
+Frasier
+Earls
+Dugas
+Damon
+Dabney
+Collado
+Briseno
+Baxley
+Andre
+Word
+Whyte
+Wenger
+Vanover
+Vanburen
+Thiel
+Schindler
+Schiller
+Rigby
+Pomeroy
+Passmore
+Marble
+Manzo
+Mahaffey
+Lindgren
+Laflamme
+Greathouse
+Fite
+Ferrari
+Calabrese
+Bayne
+Yamamoto
+Wick
+Townes
+Thames
+Steel
+Reinhart
+Peeler
+Naranjo
+Montez
+Mcdade
+Mast
+Markley
+Marchand
+Leeper
+Kong
+Kellum
+Hudgens
+Hennessey
+Hadden
+Guess
+Gainey
+Coppola
+Borrego
+Bolling
+Beane
+Ault
+Slaton
+Poland
+Pape
+Null
+Mulkey
+Lightner
+Langer
+Hillard
+Glasgow
+Fabian
+Ethridge
+Enright
+Derosa
+Baskin
+Alfred
+Weinberg
+Turman
+Tinker
+Somerville
+Pardo
+Noll
+Lashley
+Ingraham
+Hiller
+Hendon
+Glaze
+Flora
+Cothran
+Cooksey
+Conte
+Carrico
+Apple
+Abner
+Wooley
+Swope
+Summerlin
+Sturgis
+Sturdivant
+Stott
+Spurgeon
+Spillman
+Speight
+Roussel
+Popp
+Nutter
+Mckeon
+Mazza
+Magnuson
+Lanning
+Kozak
+Jankowski
+Heyward
+Forster
+Corwin
+Callaghan
+Bays
+Wortham
+Usher
+Theriot
+Sayers
+Sabo
+Rupert
+Poling
+Nathan
+Loya
+Lieberman
+Levi
+Laroche
+Labelle
+Howes
+Harr
+Garay
+Fogarty
+Everson
+Durkin
+Dominquez
+Chaves
+Chambliss
+Alfonso
+Witcher
+Wilber
+Vieira
+Vandiver
+Terrill
+Stoker
+Schreiner
+Nestor
+Moorman
+Liddell
+Lew
+Lawhorn
+Krug
+Irons
+Hylton
+Hollenbeck
+Herrin
+Hembree
+Hair
+Goolsby
+Goodin
+Gilmer
+Foltz
+Dinkins
+Daughtry
+Caban
+Brim
+Briley
+Bilodeau
+Bear
+Wyant
+Vergara
+Tallent
+Swearingen
+Stroup
+Sherry
+Scribner
+Roger
+Quillen
+Pitman
+Monaco
+Mccants
+Maxfield
+Martinson
+Landon
+Holtz
+Flournoy
+Brookins
+Brody
+Baumgardner
+Angelo
+Straub
+Sills
+Roybal
+Roundtree
+Oswalt
+Money
+Mcgriff
+Mcdougall
+Mccleary
+Maggard
+Gragg
+Gooding
+Godinez
+Doolittle
+Donato
+Cowell
+Cassell
+Bracken
+Appel
+Ahmad
+Zambrano
+Reuter
+Perea
+Olive
+Nakamura
+Monaghan
+Mickens
+Mcclinton
+Mcclary
+Marler
+Kish
+Judkins
+Gilbreath
+Freese
+Flanigan
+Felts
+Erdmann
+Dodds
+Chew
+Brownell
+Brazil
+Boatright
+Barreto
+Slayton
+Sandberg
+Saldivar
+Pettway
+Odum
+Narvaez
+Moultrie
+Montemayor
+Merrell
+Lees
+Keyser
+Hoke
+Hardaway
+Hannan
+Gilbertson
+Fogg
+Dumont
+Deberry
+Coggins
+Carrera
+Buxton
+Bucher
+Broadnax
+Beeson
+Araujo
+Appleton
+Amundson
+Aguayo
+Ackley
+Yocum
+Worsham
+Shivers
+Shelly
+Sanches
+Sacco
+Robey
+Rhoden
+Pender
+Ochs
+Mccurry
+Madera
+Luong
+Luis
+Knotts
+Jackman
+Heinrich
+Hargrave
+Gault
+Forest
+Comeaux
+Chitwood
+Child
+Caraway
+Boettcher
+Bernhardt
+Barrientos
+Zink
+Wickham
+Whiteman
+Thorp
+Stillman
+Settles
+Schoonover
+Roque
+Riddell
+Rey
+Pilcher
+Phifer
+Novotny
+Maple
+Macleod
+Hardee
+Haase
+Grider
+Fredrick
+Earnest
+Doucette
+Clausen
+Christmas
+Bevins
+Beamon
+Badillo
+Tolley
+Tindall
+Soule
+Snook
+Sebastian
+Seale
+Pitcher
+Pinkney
+Pellegrino
+Nowell
+Nemeth
+Nail
+Mondragon
+Mclane
+Lundgren
+Ingalls
+Hudspeth
+Hixson
+Gearhart
+Furlong
+Downes
+Dionne
+Dibble
+Deyoung
+Cornejo
+Camara
+Brookshire
+Boyette
+Wolcott
+Tracey
+Surratt
+Sellars
+Segal
+Salyer
+Reeve
+Rausch
+Philips
+Labonte
+Haro
+Gower
+Freeland
+Fawcett
+Eads
+Driggers
+Donley
+Collett
+Cage
+Bromley
+Boatman
+Ballinger
+Baldridge
+Volz
+Trombley
+Stonge
+Silas
+Shanahan
+Rivard
+Rhyne
+Pedroza
+Matias
+Mallard
+Jamieson
+Hedgepeth
+Hartnett
+Estevez
+Eskridge
+Denman
+Chiu
+Chinn
+Catlett
+Carmack
+Buie
+Book
+Bechtel
+Beardsley
+Bard
+Ballou
+Windsor
+Ulmer
+Storm
+Skeen
+Robledo
+Rincon
+Reitz
+Piazza
+Pearl
+Munger
+Moten
+Mcmichael
+Loftus
+Ledet
+Kersey
+Groff
+Fowlkes
+Folk
+Crumpton
+Collette
+Clouse
+Bettis
+Villagomez
+Timmerman
+Strom
+Saul
+Santoro
+Roddy
+Phillip
+Penrod
+Musselman
+Macpherson
+Leboeuf
+Harless
+Haddad
+Guido
+Golding
+Fulkerson
+Fannin
+Dulaney
+Dowdell
+Deane
+Cottle
+Ceja
+Cate
+Bosley
+Benge
+Albritton
+Voigt
+Trowbridge
+Soileau
+Seely
+Rome
+Rohde
+Pearsall
+Paulk
+Orth
+Nason
+Mota
+Mcmullin
+Marquardt
+Madigan
+Hoag
+Gillum
+Gayle
+Gabbard
+Fenwick
+Fender
+Eck
+Danforth
+Cushing
+Cress
+Creed
+Cazares
+Casanova
+Bey
+Bettencourt
+Barringer
+Baber
+Stansberry
+Schramm
+Rutter
+Rivero
+Race
+Oquendo
+Necaise
+Mouton
+Montenegro
+Miley
+Mcgough
+Marra
+Macmillan
+Lock
+Lamontagne
+Jasso
+Jaime
+Horst
+Hetrick
+Heilman
+Gaytan
+Gall
+Fried
+Fortney
+Eden
+Dingle
+Desjardins
+Dabbs
+Burbank
+Brigham
+Breland
+Beaman
+Banner
+Arriola
+Yarborough
+Wallin
+Treat
+Toscano
+Stowers
+Reiss
+Pichardo
+Orton
+Mitchel
+Michels
+Mcnamee
+Mccrory
+Leatherman
+Kell
+Keister
+Jerome
+Horning
+Hargett
+Guay
+Friday
+Ferro
+Deboer
+Dagostino
+Clemente
+Christ
+Carper
+Bowler
+Blanks
+Beaudry
+Willie
+Towle
+Tafoya
+Stricklin
+Strader
+Soper
+Sonnier
+Sigmon
+Schenk
+Saddler
+Rodman
+Pedigo
+Mendes
+Lunn
+Lohr
+Lahr
+Kingsbury
+Jarman
+Hume
+Holliman
+Hofmann
+Haworth
+Harrelson
+Hambrick
+Flick
+Edmunds
+Dacosta
+Crossman
+Colston
+Chaplin
+Carrell
+Budd
+Weiler
+Waits
+Viola
+Valentino
+Trantham
+Tarr
+Straight
+Solorio
+Roebuck
+Powe
+Plank
+Pettus
+Palm
+Pagano
+Mink
+Luker
+Leathers
+Joslin
+Hartzell
+Gambrell
+Fears
+Deutsch
+Cepeda
+Carty
+Caputo
+Brewington
+Bedell
+Ballew
+Applewhite
+Warnock
+Walz
+Urena
+Tudor
+Reel
+Pigg
+Parton
+Mickelson
+Meagher
+Mclellan
+Mcculley
+Mandel
+Leech
+Lavallee
+Kraemer
+Kling
+Kipp
+Kingston
+Kehoe
+Hochstetler
+Harriman
+Gregoire
+Grabowski
+Gosselin
+Gammon
+Fancher
+Edens
+Desai
+Butt
+Brannan
+Armendariz
+Woolsey
+Whitehouse
+Whetstone
+Ussery
+Towne
+Tower
+Testa
+Tallman
+Studer
+Strait
+Steinmetz
+Sorrells
+Sauceda
+Rolfe
+Rae
+Paddock
+Mitchem
+Mcginn
+Mccrea
+Luck
+Lovato
+Ling
+Hazen
+Gilpin
+Gaynor
+Fike
+Devoe
+Delrio
+Curiel
+Burkhardt
+Bristol
+Bode
+Backus
+Alton
+Zinn
+Watanabe
+Wachter
+Vanpelt
+Turnage
+Shaner
+Schroder
+Sato
+Riordan
+Quimby
+Portis
+Natale
+Mckoy
+Mccown
+Marker
+Lucio
+Kilmer
+Karl
+Hotchkiss
+Hesse
+Halbert
+Gwinn
+Godsey
+Desmond
+Delisle
+Chrisman
+Canter
+Brook
+Arbogast
+Angell
+Acree
+Yancy
+Woolley
+Wesson
+Weatherspoon
+Trainor
+Stockman
+Spiller
+Sipe
+Rooks
+Reavis
+Propst
+Porras
+Neilson
+Mullens
+Loucks
+Llewellyn
+Lamont
+Kumar
+Koester
+Klingensmith
+Kirsch
+Kester
+Honaker
+Hodson
+Hennessy
+Helmick
+Garrity
+Garibay
+Fee
+Drain
+Casarez
+Callis
+Botello
+Bay
+Aycock
+Avant
+Angle
+Wingard
+Wayman
+Tully
+Theisen
+Szymanski
+Stansbury
+Segovia
+Rudy
+Rainwater
+Preece
+Pirtle
+Padron
+Mincey
+Mckelvey
+Mathes
+Marty
+Larrabee
+Kornegay
+Klug
+Judy
+Ingersoll
+Hecht
+Germain
+Eggers
+Dykstra
+Denis
+Deering
+Decoteau
+Deason
+Dearing
+Cofield
+Carrigan
+Brush
+Bonham
+Bahr
+Aucoin
+Appleby
+Almonte
+Yager
+Womble
+Wimmer
+Weimer
+Vanderpool
+Stancil
+Sprinkle
+Romine
+Remington
+Pfaff
+Peckham
+Olivera
+Meraz
+Maze
+Lathrop
+Koehn
+Jonas
+Hazelton
+Halvorson
+Hallock
+Haddock
+Ducharme
+Dehaven
+Colton
+Caruthers
+Brehm
+Bosworth
+Bost
+Blow
+Bias
+Beeman
+Basile
+Bane
+Aikens
+Zachary
+Wold
+Walther
+Tabb
+Suber
+Strawn
+Stocks
+Stocker
+Shirey
+Schlosser
+Salvador
+Riedel
+Rembert
+Reimer
+Pyles
+Pickle
+Peele
+Merriweather
+Letourneau
+Latta
+Kidder
+Hixon
+Hillis
+Hight
+Herbst
+Henriquez
+Haygood
+Hamill
+Gabel
+Fritts
+Eubank
+Duty
+Dawes
+Correll
+Coffee
+Cha
+Bushey
+Buchholz
+Brotherton
+Bridge
+Botts
+Barnwell
+Auger
+Atchley
+Westphal
+Veilleux
+Ulloa
+Truman
+Stutzman
+Shriver
+Ryals
+Prior
+Pilkington
+Newport
+Moyers
+Miracle
+Marrs
+Mangrum
+Maddux
+Lockard
+Laing
+Kuhl
+Harney
+Hammock
+Hamlett
+Felker
+Doerr
+Depriest
+Carrasquillo
+Carothers
+Bogle
+Blood
+Bischoff
+Bergen
+Albanese
+Wyckoff
+Vermillion
+Vansickle
+Thibault
+Tetreault
+Stickney
+Shoemake
+Ruggiero
+Rawson
+Racine
+Philpot
+Paschal
+Mcelhaney
+Mathison
+Legrand
+Lapierre
+Kwan
+Kremer
+Jiles
+Hilbert
+Geyer
+Faircloth
+Ehlers
+Egbert
+Desrosiers
+Dalrymple
+Cotten
+Cashman
+Cadena
+Breeding
+Boardman
+Alcaraz
+Ahn
+Wyrick
+Therrien
+Tankersley
+Strickler
+Puryear
+Plourde
+Pattison
+Pardue
+Milan
+Mcginty
+Mcevoy
+Landreth
+Kuhns
+Koon
+Hewett
+Giddens
+Everette
+Emerick
+Eades
+Deangelis
+Cosme
+Ceballos
+Birdsong
+Benham
+Bemis
+Armour
+Anguiano
+Angeles
+Welborn
+Tsosie
+Storms
+Shoup
+Sessoms
+Samaniego
+Rood
+Rojo
+Rhinehart
+Raby
+Northcutt
+Myer
+Munguia
+Morehouse
+More
+Mcdevitt
+Mateo
+Mallett
+Lozada
+Lemoine
+Kuehn
+Hallett
+Grim
+Gillard
+Gaylor
+Garman
+Gallaher
+Feaster
+Faris
+Darrow
+Dardar
+Coney
+Carreon
+Byron
+Braithwaite
+Boylan
+Boyett
+Born
+Bixler
+Bigham
+Benford
+Barragan
+Barnum
+Zuber
+Wyche
+Westcott
+Vining
+Stoltzfus
+Simonds
+Shupe
+Sabin
+Ruble
+Rittenhouse
+Richman
+Perrone
+Mulholland
+Millan
+Meister
+Mathew
+Lomeli
+Kite
+Jemison
+Hulett
+Holler
+Hickerson
+Herold
+Hazelwood
+Griffen
+Gause
+Forde
+Eisenberg
+Dilworth
+Charron
+Chaisson
+Brodie
+Bristow
+Breunig
+Brace
+Boutwell
+Bentz
+Belk
+Bayless
+Batchelder
+Baran
+Baeza
+Zimmermann
+Weathersby
+Volk
+Toole
+Theis
+Tedesco
+Shine
+Searle
+Schenck
+Satterwhite
+Sandy
+Ruelas
+Royce
+Rankins
+Partida
+Nesbit
+Morel
+Menchaca
+Levasseur
+Kaylor
+Johnstone
+Hulse
+Hollar
+Hersey
+Harrigan
+Harbison
+Guyer
+Gish
+Giese
+Gerlach
+Geller
+Geisler
+Falcone
+Ernest
+Elwell
+Doucet
+Deese
+Darr
+Corder
+Chafin
+Byler
+Bussell
+Burdett
+Brasher
+Bowe
+Bellinger
+Bastian
+Barner
+Alleyne
+Wilborn
+Weil
+Wegner
+Wales
+Tatro
+Spitzer
+Smithers
+Schoen
+Resendez
+Pete
+Parisi
+Overman
+Obrian
+Mudd
+Moy
+Mclaren
+Mahler
+Maggio
+Lindner
+Lalonde
+Lacasse
+Laboy
+Killion
+Kahl
+Jessen
+Jamerson
+Houk
+Henshaw
+Gustin
+Groom
+Graber
+Durst
+Duenas
+Davey
+Cundiff
+Conlon
+Colunga
+Coakley
+Chiles
+Capers
+Buell
+Bricker
+Bissonnette
+Birmingham
+Bartz
+Bagby
+Zayas
+Volpe
+Treece
+Toombs
+Thom
+Terrazas
+Swinney
+Skiles
+Silveira
+Shouse
+Senn
+Rambo
+Ramage
+Nez
+Moua
+Marlin
+Malik
+Langham
+Kyles
+Holston
+Hoagland
+Herd
+Hector
+Feller
+Emory
+Denison
+Corliss
+Carraway
+Burford
+Bickel
+Ambriz
+Abercrombie
+Yamada
+Winner
+Weidner
+Waddle
+Verduzco
+Thurmond
+Swindle
+Schrock
+Sanabria
+Rosenberger
+Probst
+Peabody
+Olinger
+Neighbors
+Nazario
+Mccafferty
+Mcbroom
+Mcabee
+Mazur
+Matherne
+Mapes
+Leverett
+Killingsworth
+Heisler
+Griego
+Grande
+Gosnell
+Frankel
+Franke
+Ferrante
+Fenn
+Elmer
+Ehrlich
+Christopherso
+Chick
+Chasse
+Chancellor
+Caton
+Brunelle
+Bly
+Bloomfield
+Babbitt
+Azevedo
+Abramson
+Ables
+Abeyta
+Youmans
+Wozniak
+Wainwright
+Summer
+Stowell
+Smitherman
+Sites
+Samuelson
+Runge
+Rule
+Rothman
+Rosenfeld
+Quan
+Peake
+Oxford
+Owings
+Olmos
+Munro
+Moreira
+Leatherwood
+Larkins
+Krantz
+Kovacs
+Kizer
+Kindred
+Karnes
+Jaffe
+Hubbell
+Hosey
+Hauck
+Harold
+Goodell
+Favors
+Erdman
+Dvorak
+Doane
+Cureton
+Cofer
+Buehler
+Bierman
+Berndt
+Banta
+Annis
+Abram
+Abdullah
+Warwick
+Waltz
+Turcotte
+Trinh
+Torrey
+Stith
+Seger
+Sachs
+Quesada
+Pinder
+Peppers
+Pascual
+Paschall
+Parkhurst
+Ozuna
+Oster
+Nicholls
+Mortimer
+Lheureux
+Lavalley
+Kimura
+Jablonski
+Haun
+Gourley
+Gilligan
+Fix
+Derby
+Croy
+Cotto
+Cargill
+Burwell
+Burgett
+Buckman
+Brett
+Booher
+Adorno
+Wrenn
+Whittemore
+Urias
+Szabo
+Sayles
+Saiz
+Rutland
+Rael
+Plant
+Pharr
+Penney
+Pelkey
+Ogrady
+Nickell
+Musick
+Moats
+Mather
+Massa
+Laurent
+Kirschner
+Kieffer
+Kellar
+Hendershot
+Gott
+Godoy
+Gadson
+Furtado
+Fiedler
+Erskine
+Edison
+Dutcher
+Dever
+Daggett
+Chevalier
+Chao
+Brake
+Ballesteros
+Amerson
+Alejandro
+Wingo
+Waldon
+Trott
+Spikes
+Silvey
+Showers
+Schlegel
+Rue
+Ritz
+Pepin
+Pelayo
+Parsley
+Palermo
+Moorehead
+Mchale
+Lett
+Kocher
+Kilburn
+Iglesias
+Humble
+Hulbert
+Huckaby
+Hix
+Haven
+Hartford
+Hardiman
+Gurney
+Grigg
+Grasso
+Goings
+Fillmore
+Farber
+Depew
+Dandrea
+Dame
+Cowen
+Covarrubias
+Cory
+Burrus
+Bracy
+Ardoin
+Thompkins
+Suzuki
+Standley
+Russel
+Radcliffe
+Pohl
+Persaud
+Percy
+Parenteau
+Pabon
+Newson
+Newhouse
+Napolitano
+Mulcahy
+Maya
+Malave
+Keim
+Hooten
+Hernandes
+Heffernan
+Hearne
+Greenleaf
+Glick
+Fuhrman
+Fetter
+Faria
+Dishman
+Dickenson
+Crites
+Criss
+Clapper
+Chenault
+Castor
+Casto
+Bugg
+Bove
+Bonney
+Blessing
+Ard
+Anderton
+Allgood
+Alderson
+Woodman
+Wisdom
+Warrick
+Toomey
+Tooley
+Tarrant
+Summerville
+Stebbins
+Sokol
+Sink
+Searles
+Schutz
+Schumann
+Scheer
+Remillard
+Raper
+Proulx
+Palmore
+Monroy
+Miguel
+Messier
+Melo
+Melanson
+Mashburn
+Manzano
+Lussier
+Lovely
+Lien
+Jenks
+Huneycutt
+Hartwig
+Grimsley
+Fulk
+Fielding
+Fidler
+Engstrom
+Eldred
+Dantzler
+Crandell
+Ching
+Calder
+Brumley
+Breton
+Brann
+Bramlett
+Boykins
+Bianco
+Bancroft
+Almaraz
+Alcantar
+Whitmer
+Whitener
+Welton
+Vineyard
+Su
+Rahn
+Paquin
+Mizell
+Mix
+Mcmillin
+Mckean
+Marston
+Maciel
+Lundquist
+Louie
+Liggins
+Lampkin
+Kranz
+Koski
+Kirkham
+Jiminez
+Hazzard
+Harrod
+Graziano
+Grammer
+Gendron
+Garrido
+Fordham
+Englert
+Elwood
+Dryden
+Demoss
+Deluna
+Crabb
+Comeau
+Claudio
+Brummett
+Blume
+Benally
+Wessel
+Vanbuskirk
+Thorson
+Stumpf
+Stockwell
+Rocco
+Reams
+Radtke
+Rackley
+Pelton
+Niemi
+Newland
+Nelsen
+Morrissette
+Miramontes
+Mcginley
+Mccluskey
+Marley
+Marchant
+Luevano
+Lampe
+Lail
+Jeffcoat
+Infante
+Hu
+Hinman
+Gaona
+Erb
+Eady
+Desmarais
+Decosta
+Dansby
+Cisco
+Choe
+Breckenridge
+Bostwick
+Borg
+Bianchi
+Beer
+Alberts
+Adrian
+Wilkie
+Whorton
+Vargo
+Tait
+Sylvia
+Soucy
+Schuman
+Ousley
+Mumford
+Lum
+Lippert
+Leath
+Lavergne
+Laliberte
+Kirksey
+Kenner
+Johnsen
+Izzo
+Hiles
+Gullett
+Greenwell
+Gaspar
+Galbreath
+Gaitan
+Ericson
+Duck
+Delapaz
+Croom
+Cottingham
+Clift
+Bushnell
+Boozer
+Bice
+Bernardo
+Beason
+Arrowood
+Waring
+Voorhees
+Truax
+Shreve
+Shockey
+Schatz
+Sandifer
+Rubino
+Rozier
+Roseberry
+Roll
+Player
+Pieper
+Peden
+Nester
+Nave
+Murphey
+Malinowski
+Macgregor
+Liang
+Lafrance
+Kunkle
+Kirkman
+Jorge
+Hipp
+Hasty
+Haddix
+Gervais
+Gerdes
+Garfield
+Gamache
+Fouts
+Fitzwater
+Dillingham
+Deming
+Deanda
+Cedeno
+Cannady
+Burson
+Bouldin
+Arceneaux
+Woodhouse
+Whitford
+Wescott
+Welty
+Weigel
+Torgerson
+Toms
+Surber
+Sunderland
+Sterner
+Setzer
+Salvatore
+Riojas
+Pumphrey
+Puga
+Pedro
+Patch
+Metts
+Mcgarry
+Mccandless
+Magill
+Lupo
+Loveland
+Llamas
+Leclerc
+Koons
+Kahler
+Huss
+Holbert
+Heintz
+Haupt
+Grimmett
+Gaskill
+Flower
+Ellingson
+Dorr
+Dingess
+Deweese
+Desilva
+Crossley
+Cordeiro
+Converse
+Conde
+Cheeks
+Caldera
+Cairns
+Burmeister
+Burkhalter
+Brawner
+Bott
+Youngs
+Vierra
+Valladares
+Tiffany
+Shrum
+Shropshire
+Sevilla
+Rusk
+Roof
+Rodarte
+Pedraza
+Nino
+Montana
+Merino
+Mcminn
+Markle
+Mapp
+Lucia
+Lajoie
+Koerner
+Kittrell
+Kato
+Hyder
+Hollifield
+Heiser
+Hazlett
+Greenwald
+Fant
+Eldredge
+Dreher
+Delafuente
+Cravens
+Claypool
+Beecher
+Aronson
+Alanis
+Worthen
+Wojcik
+Winger
+Whitacre
+Wellington
+Valverde
+Valdivia
+Troupe
+Thrower
+Swindell
+Suttles
+Suh
+Stroman
+Spires
+Slate
+Shealy
+Sarver
+Sartin
+Sadowski
+Rondeau
+Rolon
+Rick
+Rex
+Rascon
+Priddy
+Pine
+Paulino
+Nolte
+Munroe
+Molloy
+Mellon
+Mciver
+Lykins
+Loggins
+Lillie
+Lenoir
+Klotz
+Kempf
+Jone
+Hupp
+Hollowell
+Hollander
+Haynie
+Hassan
+Harkness
+Harker
+Gottlieb
+Frith
+Eddins
+Driskell
+Doggett
+Densmore
+Charette
+Cassady
+Carrol
+Byrum
+Burcham
+Buggs
+Benn
+Whitted
+Warrington
+Vandusen
+Vaillancourt
+Steger
+Spell
+Siebert
+Scofield
+Quirk
+Purser
+Plumb
+Orcutt
+Northern
+Nordstrom
+Mosely
+Michalski
+Mcphail
+Mcdavid
+Mccraw
+Martini
+Marchese
+Mannino
+Leo
+Lefevre
+Largent
+Lanza
+Kress
+Isham
+Hunsaker
+Hoch
+Hildebrandt
+Guarino
+Grijalva
+Graybill
+Fick
+Ewell
+Ewald
+Deangelo
+Cusick
+Crumley
+Coston
+Cathcart
+Carruthers
+Bullington
+Brian
+Bowes
+Blain
+Blackford
+Barboza
+Yingling
+Woodland
+Wert
+Weiland
+Varga
+Silverstein
+Sievers
+Shuster
+Shumway
+Scudder
+Runnels
+Rumsey
+Renfroe
+Provencher
+Polley
+Mohler
+Middlebrooks
+Kutz
+Koster
+Korn
+Grow
+Groth
+Glidden
+Fazio
+Deen
+Corn
+Copper
+Chipman
+Chenoweth
+Champlin
+Cedillo
+Carrero
+Carmody
+Buckles
+Brien
+Boutin
+Bosch
+Bill
+Berkowitz
+Altamirano
+Wilfong
+Wiegand
+Waites
+Truesdale
+Toussaint
+Tobey
+Tedder
+Steelman
+Sirois
+Schnell
+Robichaud
+Ridge
+Richburg
+Pray
+Plumley
+Pizarro
+Piercy
+Ortego
+Oberg
+Neace
+Music
+Mickey
+Mertz
+Mcnew
+Matta
+Lawyer
+Lapp
+Lair
+Kibler
+Jessie
+Howlett
+Hollister
+Hofer
+Hatten
+Hagler
+Germany
+Falgoust
+Engelhardt
+Eberle
+Eastwood
+Dombrowski
+Dinsmore
+Daye
+Cool
+Casares
+Capone
+Braud
+Balch
+Autrey
+Wendel
+Tyndall
+Toy
+Strobel
+Stoltz
+Spinelli
+Serrato
+Rochester
+Reber
+Real
+Rathbone
+Palomino
+Noah
+Nickels
+Mayle
+Mathers
+Mach
+Loeffler
+Littrell
+Levinson
+Leong
+Lemire
+Lejeune
+Lazo
+Lasley
+Koller
+Kennard
+Jester
+Hoelscher
+Hintz
+Hagerman
+Greaves
+Fore
+Eudy
+Engler
+Corrales
+Cordes
+Brunet
+Bidwell
+Bennet
+Bare
+Tyrrell
+Tharpe
+Swinton
+Stribling
+Steven
+Southworth
+Sisneros
+Shane
+Savoie
+Samons
+Ruvalcaba
+Roscoe
+Ries
+Ramer
+Omara
+Mosqueda
+Millar
+Mcpeak
+Macomber
+Luckey
+Litton
+Lehr
+Lavin
+Hubbs
+Hoard
+Hibbs
+Hagans
+Futrell
+Exum
+Evenson
+Dicks
+Culler
+Chou
+Carbaugh
+Callen
+Brashear
+Bloomer
+Blakeney
+Bigler
+Addington
+Woodford
+Witter
+Unruh
+Tolentino
+Sumrall
+Stgermain
+Smock
+Sherer
+Salem
+Rochelle
+Rayner
+Pooler
+Oquinn
+Nero
+Milano
+Mcglothlin
+Mars
+Linden
+Kowal
+Kerrigan
+Ibrahim
+Harvell
+Hanrahan
+Goodall
+Geist
+Fussell
+Fung
+Ferebee
+Federico
+Eley
+Eggert
+Dorsett
+Dingman
+Destefano
+Colucci
+Clemmer
+Caesar
+Burnell
+Brumbaugh
+Boddie
+Berryhill
+Avelar
+Alcantara
+Abbey
+Winder
+Winchell
+Vandenberg
+Trotman
+Thurber
+Thibeault
+Stlouis
+Stilwell
+Sperling
+Shattuck
+Sarmiento
+Ruppert
+Rumph
+Renaud
+Randazzo
+Rademacher
+Quiles
+Pearman
+Palomo
+Mercurio
+Lowrey
+Lindeman
+Lawlor
+Larosa
+Lander
+Labrecque
+Kimber
+Hovis
+Holifield
+Henninger
+Hawkes
+Hartfield
+Hann
+Hague
+Genovese
+Garrick
+Fudge
+Frink
+Eddings
+Dinh
+Dear
+Cutter
+Cribbs
+Constant
+Calvillo
+Bunton
+Brodeur
+Bolding
+Blanding
+Agosto
+Zahn
+Wiener
+Trussell
+Tew
+Tello
+Teixeira
+Stephan
+Speck
+Sharma
+Shanklin
+Sealy
+Scanlan
+Santamaria
+Roundy
+Robichaux
+Ringer
+Rigney
+Prevost
+Polson
+Philip
+Pass
+Nord
+Moxley
+Mohammed
+Medford
+Mccaslin
+Mcardle
+Macarthur
+Lewin
+Lasher
+Ketcham
+Keiser
+Heine
+Hackworth
+Grose
+Grizzle
+Grass
+Gillman
+Gartner
+Garth
+Frazee
+Fleury
+Fast
+Edson
+Edmonson
+Derry
+Deck
+Cronk
+Conant
+Burress
+Burgin
+Broom
+Brockington
+Bolick
+Boger
+Birchfield
+Billington
+Baily
+Bahena
+Armbruster
+Anson
+Yoho
+Wilcher
+Tinney
+Timberlake
+Thoma
+Thielen
+Sutphin
+Stultz
+Sikora
+Serra
+Schulman
+Scheffler
+Santillan
+Robin
+Rego
+Preciado
+Pinkham
+Monday
+Mickle
+Luu
+Lomas
+Lizotte
+Lent
+Lenard
+Kellerman
+Keil
+Juan
+Johanson
+Hernadez
+Hartsfield
+Hang
+Haber
+Gorski
+Farkas
+Eberhardt
+Duquette
+Delano
+Cropper
+Cozart
+Cockerham
+Chamblee
+Cartagena
+Cahoon
+Buzzell
+Brister
+Brewton
+Blackshear
+Benfield
+Aston
+Ashburn
+Arruda
+Wetmore
+Weise
+Vaccaro
+Tucci
+Sudduth
+Stromberg
+Stoops
+Showalter
+Shears
+Runion
+Rowden
+Rosenblum
+Riffle
+Renfrow
+Peres
+Obryant
+Nicolas
+Leftwich
+Lark
+Landeros
+Kistler
+Killough
+Kerley
+Kastner
+Hoggard
+Hartung
+Guertin
+Govan
+Gatling
+Gailey
+Fullmer
+Fulford
+Flatt
+Esquibel
+Endicott
+Edmiston
+Edelstein
+Dufresne
+Dressler
+Dickman
+Chee
+Busse
+Bonnett
+Bogart
+Berard
+Barrington
+Arena
+Anton
+Yoshida
+Velarde
+Veach
+Vanhouten
+Vachon
+Tolson
+Tolman
+Tennyson
+Stites
+Soler
+Shutt
+Ruggles
+Rhone
+Pegues
+Ong
+Neese
+Muro
+Moncrief
+Mefford
+Mcphee
+Mcmorris
+Mceachern
+Mcclurg
+Mansour
+Mai
+Mader
+Leija
+Lecompte
+Lafountain
+Labrie
+Jaquez
+Heald
+Hash
+Hartle
+Gainer
+Frisby
+Farina
+Eidson
+Edgerton
+Dyke
+Durrett
+Duhon
+Cuomo
+Cobos
+Cervantez
+Bybee
+Brockway
+Borowski
+Binion
+Beery
+Arguello
+Amaro
+Acton
+Yuen
+Winton
+Wigfall
+Weekley
+Vidrine
+Vannoy
+Tardiff
+Shoop
+Shilling
+Schick
+Sand
+Safford
+Prendergast
+Pilgrim
+Pellerin
+Osuna
+Nissen
+Nalley
+Moritz
+Moller
+Messner
+Messick
+Merry
+Merrifield
+Mcguinness
+Matherly
+Marcano
+Mahone
+Lemos
+Lebrun
+Jara
+Hoffer
+Hewlett
+Herren
+Hecker
+Haws
+Haug
+Hack
+Gwin
+Gober
+Gilliard
+Fredette
+Favela
+Echeverria
+Downer
+Donofrio
+Desrochers
+Dee
+Crozier
+Corson
+Clyde
+Bechtold
+Argueta
+Aparicio
+Zamudio
+Willette
+Westover
+Westerman
+Utter
+Troyer
+Thies
+Tapley
+Slavin
+Shirk
+Sandler
+Roop
+Rimmer
+Raymer
+Range
+Radcliff
+Otten
+Moorer
+Millet
+Mckibben
+Mccutchen
+Mcavoy
+Mcadoo
+Mayorga
+Mastin
+Martineau
+Marek
+Madore
+Leflore
+Kroeger
+Kennon
+Jimerson
+Javier
+Hostetter
+Hornback
+Hendley
+Hance
+Guardado
+Granado
+Gowen
+Goodale
+Flinn
+Fleetwood
+Fitz
+Durkee
+Duprey
+Dipietro
+Dilley
+Clyburn
+Brawley
+Beckley
+Arana
+Weatherby
+Vollmer
+Victoria
+Vestal
+Tunnell
+Trigg
+Tingle
+Takahashi
+Sweatt
+Storer
+Snapp
+Shiver
+Rooker
+Red
+Rathbun
+Poisson
+Perrine
+Perri
+Pastor
+Parmer
+Parke
+Pare
+Papa
+Palmieri
+Nottingham
+Midkiff
+Mecham
+Mccomas
+Mcalpine
+Lovelady
+Lillard
+Lally
+Knopp
+Kile
+Kiger
+Haile
+Gupta
+Goldsberry
+Gilreath
+Fulks
+Friesen
+Franzen
+Flack
+Findlay
+Ferland
+Dreyer
+Dore
+Dennard
+Deckard
+Debose
+Crim
+Coulombe
+Cork
+Chancey
+Cantor
+Branton
+Bissell
+Barns
+Woolard
+Witham
+Wasserman
+Waldo
+Spiegel
+Shoffner
+Scholz
+Ruch
+Rossman
+Ready
+Petry
+Palacio
+Paez
+Neary
+Mortenson
+Millsap
+Miele
+Mick
+Menke
+Mckim
+Mcanally
+Martines
+Manor
+Malcom
+Lemley
+Larochelle
+Klaus
+Klatt
+Kaufmann
+Kapp
+Helmer
+Hedge
+Halloran
+Glisson
+Frechette
+Fontana
+Enoch
+Eagan
+Drum
+Distefano
+Danley
+Creekmore
+Chartier
+Chaffee
+Carillo
+Burg
+Bolinger
+Berkley
+Benz
+Basso
+Bash
+Barrier
+Zelaya
+Woodring
+Witkowski
+Wilmot
+Wilkens
+Wieland
+Virgil
+Verdugo
+Urquhart
+Tsai
+Timms
+Swiger
+Swaim
+Sussman
+Scarlett
+Pires
+Molnar
+Mcatee
+Maurice
+Lowder
+Loos
+Linker
+Landes
+Kingery
+Keeley
+Hufford
+Higa
+Hendren
+Hammack
+Hamann
+Gillam
+Gerhardt
+Fell
+Eugene
+Edelman
+Eby
+Delk
+Deans
+Curl
+Constantine
+Cleaver
+Claar
+Casiano
+Carruth
+Carlyle
+Bump
+Brophy
+Bolanos
+Bibbs
+Bessette
+Beggs
+Baugher
+Bartel
+Averill
+Andresen
+Amin
+Alden
+Adames
+Wildman
+Via
+Valente
+Turnbow
+Tse
+Swink
+Sublett
+Stroh
+Stringfellow
+Ridgway
+Pugliese
+Poteat
+Pang
+Ohare
+Neubauer
+Murchison
+Mohamed
+Mingo
+Lucky
+Lemmons
+Kwon
+Kellam
+Kean
+Jarmon
+Hyden
+Hudak
+Hollinger
+Henkel
+Hemingway
+Hasson
+Hansel
+Halter
+Haire
+Goodnight
+Ginsberg
+Gillispie
+Fogel
+Flory
+Etter
+Elledge
+Eckman
+Deas
+Currin
+Crafton
+Coomer
+Colter
+Claxton
+Bulter
+Braddock
+Bowyer
+Blizzard
+Binns
+Bing
+Bellows
+Baskerville
+Barros
+Ansley
+Woolf
+Wight
+Waldman
+Wadley
+Tull
+Trull
+Tesch
+Struck
+Stouffer
+Stadler
+Slay
+Shubert
+Sedillo
+Santacruz
+Reinke
+Raleigh
+Poynter
+Neri
+Neale
+Natividad
+Mowry
+Moralez
+Monger
+Mitchum
+Merryman
+Manion
+Macdougall
+Lux
+Litchfield
+Ley
+Levitt
+Lepage
+Lasalle
+Laine
+Khoury
+Kavanagh
+Karns
+Ivie
+Huebner
+Hodgkins
+Halpin
+Garica
+Eversole
+Dutra
+Dunagan
+Duffey
+Dillman
+Dillion
+Deville
+Dearborn
+Damato
+Courson
+Coulson
+Burdine
+Bryce
+Bousquet
+Bonin
+Bish
+Atencio
+Westbrooks
+Wages
+Vaca
+Tye
+Toner
+Tomas
+Tillis
+Swett
+Surface
+Struble
+Stanfill
+Son
+Solorzano
+Slusher
+Sipple
+Sim
+Silvas
+Shults
+Schexnayder
+Saez
+Rodas
+Rager
+Pulver
+Plaza
+Penton
+Paniagua
+Meneses
+Mcfarlin
+Mcauley
+Matz
+Maloy
+Magruder
+Lohman
+Landa
+Lacombe
+Jaimes
+Hom
+Holzer
+Holst
+Heil
+Hackler
+Grundy
+Gregor
+Gilkey
+Farnham
+Durfee
+Dunton
+Dunston
+Duda
+Dews
+Dana
+Craver
+Corriveau
+Conwell
+Colella
+Chambless
+Bremer
+Boutte
+Bourassa
+Blaisdell
+Backman
+Babineaux
+Audette
+Alleman
+Towner
+Taveras
+Tarango
+Sullins
+Suiter
+Stallard
+Solberg
+Schlueter
+Poulos
+Pimental
+Owsley
+Olivier
+Okelley
+Nations
+Moffatt
+Metcalfe
+Meekins
+Medellin
+Mcglynn
+Mccowan
+Marriott
+Marable
+Lennox
+Lamoureux
+Koss
+Kerby
+Karp
+Jason
+Isenberg
+Howze
+Hockenberry
+Highsmith
+Harbour
+Hallmark
+Gusman
+Greeley
+Giddings
+Gaudet
+Gallup
+Fleenor
+Eicher
+Edington
+Dimaggio
+Dement
+Demello
+Decastro
+Cruise
+Bushman
+Brundage
+Brooker
+Brooke
+Bourg
+Board
+Blackstock
+Bergmann
+Beaton
+Banister
+Argo
+Appling
+Wortman
+Watterson
+Villalpando
+Tillotson
+Tighe
+Sundberg
+Sternberg
+Stamey
+Speaks
+Shipe
+Seeger
+Scarberry
+Sattler
+Sain
+Rothstein
+Poteet
+Plowman
+Pettiford
+Penland
+Peach
+Partain
+Pankey
+Oyler
+Ogletree
+Ogburn
+Moton
+Million
+Merkel
+Mask
+Markus
+Lucier
+Lazarus
+Lavelle
+Lakey
+Kratz
+Kinser
+Kershaw
+Josephson
+Jesse
+Imhoff
+Ibanez
+Hendry
+Hammon
+Frisbie
+Friedrich
+Frawley
+Fraga
+Forester
+Eskew
+Emmert
+Drennan
+Doyon
+Dominick
+Dandridge
+Cumming
+Cawley
+Carvajal
+Bracey
+Belisle
+Batey
+Ahner
+Wysocki
+Weiser
+Veliz
+Tincher
+Sherlock
+Santo
+Sansone
+Sankey
+Sandstrom
+Sale
+Rohrer
+Risner
+Pridemore
+Pfeffer
+Persinger
+Peery
+Oubre
+Orange
+Nowicki
+Musgrave
+Murdoch
+Mullinax
+Mccary
+Mathieu
+Livengood
+Leonardo
+Kyser
+Klink
+Kimes
+Kellner
+Kavanaugh
+Kasten
+Imes
+Hoey
+Hinshaw
+Halley
+Hake
+Gurule
+Grube
+Grillo
+Geter
+Gatto
+Garver
+Garretson
+Farwell
+Eiland
+Dunford
+Decarlo
+Corso
+Core
+Colman
+Collard
+Cleghorn
+Chasteen
+Cavender
+Carlile
+Calvo
+Byerly
+Brogdon
+Broadwater
+Breault
+Bono
+Bergin
+Behr
+Ballenger
+Amick
+Yan
+Vice
+Tamez
+Stiffler
+Steinke
+Simmon
+Shankle
+Schaller
+Salmons
+Sackett
+Saad
+Rideout
+Reader
+Ratcliffe
+Rao
+Ranson
+Randell
+Plascencia
+Petterson
+Olszewski
+Olney
+Olguin
+Nilsson
+Nevels
+Morelli
+Montiel
+Monge
+Michell
+Michaelson
+Mertens
+Mcchesney
+Mcalpin
+Mathewson
+Lower
+Loudermilk
+Lineberry
+Liggett
+Lamp
+Kinlaw
+Kight
+Just
+Jost
+Hereford
+Hardeman
+Halpern
+Halliday
+Hafer
+Gaul
+Friel
+Freitag
+Frances
+Forsberg
+Evangelista
+Doering
+Dicarlo
+Dendy
+Delp
+Deguzman
+Dameron
+Curtiss
+Cousin
+Cosper
+Charley
+Cauthen
+Cao
+Camper
+Bradberry
+Bouton
+Bonnell
+Bixby
+Bieber
+Beveridge
+Belle
+Bedwell
+Barhorst
+Bannon
+Baltazar
+Baier
+Ayotte
+Attaway
+Arenas
+Alex
+Abrego
+Watford
+Valley
+Turgeon
+Tunstall
+Thaxton
+Thai
+Tenorio
+Stotts
+Sthilaire
+Spiker
+Shedd
+Seng
+Seabolt
+Scalf
+Salyers
+Ruhl
+Rowlett
+Robinett
+Pfister
+Perlman
+Pepe
+Parkman
+Paradise
+Olin
+Nunnally
+Norvell
+Napper
+Modlin
+Mckellar
+Mcclean
+Mascarenas
+Manchester
+Leibowitz
+Ledezma
+Kuhlman
+Kobayashi
+Hunley
+Holmquist
+Hinkley
+Hazard
+Hartsell
+Gribble
+Gravely
+Fifield
+Eliason
+Doctor
+Doak
+Crossland
+Cover
+Clair
+Carleton
+Butters
+Bridgeman
+Bojorquez
+Boggess
+Banker
+Auten
+Woosley
+Wine
+Whiteley
+Wexler
+Twomey
+Tullis
+Townley
+To
+Standridge
+Stamp
+Springs
+Santoyo
+Rueda
+Riendeau
+Revell
+Pless
+Ottinger
+Nigro
+Nickles
+Mulvey
+Menefee
+Mcshane
+Mcloughlin
+Mckinzie
+Marrow
+Markey
+Mariano
+Lockridge
+Lipsey
+Knisley
+Knepper
+Kitts
+Kiel
+Jinks
+Hathcock
+Godin
+Gallego
+Fikes
+Fecteau
+Estabrook
+Ellinger
+Dustin
+Dunlop
+Dudek
+Diego
+Countryman
+Chauvin
+Chatham
+Bullins
+Brownfield
+Boughton
+Bloodworth
+Bibb
+Baucom
+Barbieri
+Aubin
+Armitage
+Alessi
+Absher
+Abbate
+Zito
+Woolery
+Wiggs
+Wacker
+Violette
+Tynes
+Tolle
+Telles
+Tarter
+Swarey
+Strode
+Stockdale
+Stella
+Stalnaker
+Spina
+Schiff
+Saari
+Risley
+Reading
+Rameriz
+Rakes
+Pettaway
+Penner
+Paulus
+Palladino
+Omeara
+Montelongo
+Melnick
+Mehta
+Mcgary
+Mccourt
+Mccollough
+Marchetti
+Manzanares
+Lowther
+Leiva
+Lauderdale
+Lafontaine
+Kowalczyk
+Knighton
+Joubert
+Jaworski
+Ide
+Huth
+Hurdle
+Hung
+Housley
+Hackman
+Gulick
+Gordy
+Gilstrap
+Gehrke
+Gebhart
+Gaudette
+Foxworth
+Finger
+Essex
+Endres
+Dunkle
+Clare
+Cimino
+Cardinal
+Caddell
+Brauer
+Braley
+Bodine
+Blackmore
+Belden
+Backer
+Ayer
+Andress
+Alva
+Wisner
+Walk
+Vuong
+Valliere
+Twigg
+Tso
+Tavarez
+Strahan
+Steib
+Staub
+Sowder
+Shoulders
+Seiber
+Schutt
+Scharf
+Schade
+Rodriques
+Risinger
+Renshaw
+Rath
+Rahman
+Presnell
+Pillow
+Piatt
+Pasquale
+Nieman
+Nicol
+Nevins
+Milford
+Mcilwain
+Mcgaha
+Mccully
+Mccomb
+Maye
+Massengale
+Macedo
+Lines
+Lesher
+Leland
+Kearse
+Jauregui
+Husted
+Hudnall
+Holmberg
+Hertel
+Hershey
+Hardie
+Glidewell
+Frausto
+Fassett
+Dash
+Dalessandro
+Dahlgren
+Corum
+Constantino
+Conlin
+Colquitt
+Colombo
+Claycomb
+Carley
+Cardin
+Cancel
+Buller
+Boring
+Boney
+Bocanegra
+Blazer
+Biggers
+Benedetto
+Araiza
+Andino
+Albin
+Zorn
+Werth
+Weisman
+Walley
+Vanegas
+Ulibarri
+Towers
+Towe
+Tedford
+Teasley
+Suttle
+Steffens
+Stcyr
+Squire
+Smythe
+Singley
+Sifuentes
+Shuck
+Session
+Schram
+Sass
+Rieger
+Ridenhour
+Rickert
+Richerson
+Rayborn
+Rabe
+Raab
+Pendley
+Pastore
+Ordway
+Moynihan
+Mellott
+Mckissick
+Mcgann
+Mccready
+Mauney
+Marrufo
+List
+Lenhart
+Lazar
+Lafave
+Keele
+Kautz
+Jardine
+Jahnke
+Jacobo
+Hord
+Hardcastle
+Hageman
+Griffey
+Giglio
+Gehring
+Fortson
+Duque
+Duplessis
+Donner
+Dicken
+Derosier
+Deitz
+Dalessio
+Cyrus
+Cram
+Chi
+Center
+Castleman
+Candelario
+Callison
+Caceres
+Bozarth
+Biles
+Bejarano
+Beech
+Bashaw
+Avina
+Armentrout
+Angus
+Alverez
+Acord
+Zack
+Waterhouse
+Vereen
+Vanlandingham
+Uhl
+Strawser
+Shotwell
+Severance
+Seltzer
+Schoonmaker
+Schock
+Schaub
+Schaffner
+Roeder
+Rodrigez
+Riffe
+Rhine
+Rasberry
+Rancourt
+Railey
+Quade
+Pursley
+Prouty
+Perdomo
+Oxley
+Osterman
+Nickens
+Murphree
+Mounts
+Monte
+Merida
+Maus
+Mattern
+Masse
+Martinelli
+Mangan
+Lutes
+Ludwick
+Loney
+Laureano
+Lasater
+Knighten
+Kissinger
+Kimsey
+Kessinger
+Honea
+Hollingshead
+Hockett
+Heyer
+Heron
+Gurrola
+Gove
+Glasscock
+Gillett
+Galan
+Featherstone
+Eckhardt
+Duron
+Dunson
+Dasher
+Culbreth
+Cowden
+Cowans
+Claypoole
+Churchwell
+Chabot
+Caviness
+Cater
+Caston
+Callan
+Byington
+Burkey
+Boden
+Beckford
+Atwater
+Arms
+Archambault
+Alvey
+Alsup
+Yon
+Whisenant
+Weese
+Voyles
+Verret
+Tsang
+Tessier
+Sweitzer
+Sherwin
+Shaughnessy
+Revis
+Remy
+Prine
+Philpott
+Peavy
+Paynter
+Parmenter
+Ovalle
+Offutt
+Nightingale
+Newlin
+Nakano
+Myatt
+Muth
+Mohan
+Mcmillon
+Mccarley
+Mccaleb
+Maxson
+Marinelli
+Maley
+Macy
+Liston
+Letendre
+Kain
+Huntsman
+Hirst
+Hagerty
+Gulledge
+Greenway
+Grajeda
+Gorton
+Goines
+Gittens
+Frederickson
+Fanelli
+Embree
+Eichelberger
+Dunkin
+Dull
+Dixson
+Dillow
+Defelice
+Chumley
+Burleigh
+Borkowski
+Binette
+Biggerstaff
+Berglund
+Beller
+Audet
+Arbuckle
+Allain
+Alfano
+Zander
+Youngman
+Wittman
+Weintraub
+Vanzant
+Vaden
+Twitty
+Trader
+Toon
+Till
+Stollings
+Standifer
+Spinner
+Sines
+Shope
+Scalise
+Saville
+Romans
+Posada
+Pisano
+Otte
+Nolasco
+Napoli
+Mier
+Merkle
+Mendiola
+Melcher
+Mejias
+Mcmurry
+Mccalla
+Markowitz
+Marine
+Manis
+Mallette
+Macfarlane
+Lough
+Looper
+Landin
+Kittle
+Kinsella
+Kinnard
+Hobart
+Herald
+Helman
+Hellman
+Hartsock
+Halford
+Hage
+Gordan
+Glasser
+Gayton
+Gattis
+Gastelum
+Gaspard
+Frisch
+Force
+Fitzhugh
+Eckstein
+Eberly
+Dowden
+Despain
+Crumpler
+Crotty
+Cornelison
+Collin
+Colin
+Chouinard
+Chamness
+Catlin
+Cann
+Bumgardner
+Budde
+Branum
+Bradfield
+Braddy
+Borst
+Birdwell
+Bent
+Bazan
+Bank
+Banas
+Bade
+Aubrey
+Arango
+Ahearn
+Addis
+Zumwalt
+Wurth
+Wilk
+Widener
+Wagstaff
+Vella
+Urrutia
+Terwilliger
+Tart
+Steinman
+Staats
+Sloat
+Rives
+Riggle
+Revels
+Reichard
+Prickett
+Poff
+Pitzer
+Petro
+Pell
+Northrup
+Nicks
+Moline
+Mielke
+Maynor
+Mallon
+Magness
+Lingle
+Lindell
+Lieb
+Lesko
+Lebeau
+Lammers
+Lafond
+Kiernan
+Ketron
+Jurado
+Holmgren
+Hilburn
+Hayashi
+Hashimoto
+Harbaugh
+Hans
+Guillot
+Gard
+Froehlich
+Felipe
+Feinberg
+Falco
+Dufour
+Drees
+Doney
+Diep
+Delao
+Daves
+Dail
+Cutting
+Crowson
+Coss
+Congdon
+Carner
+Camarena
+Butterworth
+Burlingame
+Bouffard
+Bloch
+Bilyeu
+Barta
+Bakke
+Baillargeon
+Avent
+Aquilar
+Ake
+Aho
+Zeringue
+Yeh
+Yarber
+Wolfson
+Wendell
+Vogler
+Voelker
+Truss
+Troxell
+Thrift
+Strouse
+Spielman
+Sistrunk
+Shows
+Sevigny
+Schuller
+Schaaf
+Ruffner
+Routh
+Roseman
+Ricciardi
+Peraza
+Pegram
+Overturf
+Olander
+Odaniel
+Neu
+Millner
+Melchor
+Maxie
+Marvel
+Maroney
+Machuca
+Macaluso
+Livesay
+Layfield
+Laskowski
+Kwiatkowski
+Ko
+Kiley
+Kilby
+Julien
+Hovey
+Heywood
+Hayman
+Havard
+Harville
+Haigh
+Hagood
+Grieco
+Glassman
+Gebhardt
+Garry
+Freeze
+Fleischer
+Fann
+Elson
+Eccles
+Cunha
+Crumb
+Crew
+Blakley
+Bardwell
+Abshire
+Woodham
+Wines
+Welter
+Wargo
+Varnado
+Tutt
+Traynor
+Swaney
+Svoboda
+Stricker
+Stoffel
+Stambaugh
+Sickler
+Shackleford
+Selman
+Seaver
+Sansom
+Sanmiguel
+Royston
+Rourke
+Rockett
+Rioux
+Puleo
+Pitchford
+Persons
+Normand
+Nardi
+Mulvaney
+Middaugh
+Manners
+Malek
+Lodge
+Leos
+Lathan
+Kujawa
+Kimbro
+Killebrew
+Joshua
+Houlihan
+Hobby
+Hinckley
+Herod
+Hepler
+Hamner
+Hammel
+Hallowell
+Gonsalez
+Gingerich
+Gambill
+Funkhouser
+Fricke
+Fewell
+Falkner
+Endsley
+Dulin
+Drennen
+Deaver
+Dambrosio
+Clover
+Chadwell
+Ceasar
+Castanon
+Canon
+Burkes
+Brune
+Brisco
+Brinker
+Bowker
+Boldt
+Berner
+Bee
+Beaumont
+Beaird
+Bazemore
+Barrick
+Arnette
+Albano
+Younts
+Wunderlich
+Weidman
+Vanness
+Tu
+Toland
+Theobald
+Stickler
+Steiger
+Stanger
+Spies
+Spector
+Sollars
+Smedley
+Seibel
+Scoville
+Saito
+Rye
+Rummel
+Rude
+Rowles
+Rouleau
+Roos
+Rogan
+Roemer
+Ream
+Raya
+Purkey
+Priester
+Perreira
+Penick
+Paulin
+Parkins
+Overcash
+Oleson
+Nicely
+Neves
+Muldrow
+Minard
+Midgett
+Michalak
+Melgar
+Mcentire
+Mcauliffe
+Marti
+Marte
+Lydon
+Lindholm
+Leyba
+Leader
+Langevin
+Lagasse
+Lafayette
+Kesler
+Kelton
+Kao
+Kaminsky
+Jump
+Jaggers
+Humbert
+Huck
+Howarth
+Hinrichs
+Higley
+Gupton
+Guimond
+Gravois
+Giguere
+Fretwell
+Fontes
+Feeley
+Faucher
+Fall
+Evan
+Eichhorn
+Ecker
+Earp
+Dole
+Dinger
+Derryberry
+Demars
+Deel
+Copenhaver
+Collinsworth
+Colangelo
+Cloyd
+Claiborne
+Caulfield
+Carlsen
+Calzada
+Caffey
+Broadus
+Brenneman
+Bouie
+Bodnar
+Blaney
+Blanc
+Blades
+Beltz
+Behling
+Begin
+Barahona
+Yun
+Yockey
+Winkle
+Windom
+Wimer
+Wilford
+Wash
+Villatoro
+Trexler
+Teran
+Taliaferro
+Sydnor
+Swinson
+Snelling
+Smtih
+Siu
+Simonton
+Simoneaux
+Simoneau
+Sherrer
+Seavey
+Scheel
+Rushton
+Rupe
+Ruano
+Rodney
+Rippy
+Reiner
+Reiff
+Rabinowitz
+Quach
+Penley
+Odle
+Nock
+Minnich
+Mckown
+Mccarver
+Mcandrew
+Longley
+Laux
+Lamothe
+Lafreniere
+Kropp
+Krick
+Kates
+Jepson
+Huie
+Howse
+Howie
+Henriques
+Haydon
+Haught
+Hatter
+Hartzog
+Harkey
+Grimaldo
+Goshorn
+Gormley
+Gluck
+Gilroy
+Gillenwater
+Giffin
+Folks
+Fluker
+Feder
+Eyre
+Eshelman
+Eakins
+Dryer
+Disney
+Detwiler
+Delrosario
+Davisson
+Celestine
+Catalan
+Canning
+Calton
+Buster
+Brammer
+Botelho
+Blakney
+Bartell
+Averett
+Askins
+Aker
+Zak
+Worcester
+Witmer
+Wiser
+Winkelman
+Widmer
+Whittier
+Western
+Weitzel
+Wardell
+Wagers
+Ullman
+Tupper
+Tingley
+Tilghman
+Talton
+Simard
+Seda
+Scheller
+Sala
+Rundell
+Rost
+Roa
+Ribeiro
+Rabideau
+Primm
+Porch
+Polite
+Pinon
+Peart
+Ostrom
+Ober
+Nystrom
+Nussbaum
+Nurse
+Naughton
+Murr
+Moorhead
+Monti
+Monteiro
+Melson
+Meissner
+Mclin
+Mcgruder
+Marotta
+Makowski
+Majewski
+Madewell
+Lunt
+Lukens
+Leininger
+Lebel
+Lakin
+Laguna
+Kepler
+Jaques
+Hunnicutt
+Hungerford
+Hoopes
+Hertz
+Heins
+Hammers
+Halliburton
+Grosso
+Gravitt
+Glasper
+Gideon
+Gallman
+Gallaway
+Funke
+Fulbright
+Falgout
+Eakin
+Dostie
+Dorado
+Dewberry
+Derose
+Cutshall
+Crampton
+Costanzo
+Colletti
+Cloninger
+Claytor
+Chiang
+Canterbury
+Campagna
+Burd
+Brokaw
+Broaddus
+Bretz
+Brainard
+Binford
+Bilbrey
+Alpert
+Aitken
+Ahlers
+Zajac
+Yale
+Woolfolk
+Witten
+Windle
+Wayland
+Tramel
+Tittle
+Talavera
+Suter
+Straley
+Stetson
+Specht
+Sommerville
+Soloman
+So
+Skeens
+Sigman
+Sibert
+Shavers
+Schuck
+Schmit
+Sartain
+Sabol
+Rosenblatt
+Rollo
+Rashid
+Rabb
+Province
+Polston
+Nyberg
+Northrop
+Navarra
+Muldoon
+Mulder
+Mikesell
+Mcdougald
+Mcburney
+Mauricio
+Mariscal
+Lui
+Lozier
+Lingerfelt
+Legere
+Latour
+Lagunas
+Lacour
+Kurth
+Ku
+Killen
+Kiely
+Kayser
+Kahle
+Julius
+Isley
+Huertas
+Hower
+Hinz
+Haugh
+Gumm
+Given
+Galicia
+Fortunato
+Flake
+Dunleavy
+Duggins
+Doby
+Digiovanni
+Devaney
+Deltoro
+Cribb
+Crank
+Corpuz
+Coronel
+Comfort
+Coen
+Charbonneau
+Caine
+Burchette
+Blakey
+Blakemore
+Bergquist
+Beene
+Beaudette
+Bayles
+Ballance
+Bakker
+Bailes
+Asberry
+Arwood
+Zucker
+Willman
+Whitesell
+Wald
+Walcott
+Vancleave
+Trump
+Trail
+Strasser
+Simas
+Shorts
+Shick
+Schleicher
+Schaal
+Saleh
+Rotz
+Resnick
+Raphael
+Rainer
+Partee
+Ollis
+Oller
+Oday
+Noles
+Munday
+Mountain
+Mong
+Millican
+Merwin
+Mazzola
+Mansell
+Magallanes
+Llanes
+Lewellen
+Lepore
+Kisner
+Keesee
+Jim
+Jeanlouis
+Ingham
+Hornbeck
+Hermes
+Hawn
+Hartz
+Harber
+Haffner
+Gutshall
+Guth
+Grays
+Grams
+Gowan
+Finlay
+Finkelstein
+Eyler
+Enloe
+Dungan
+Diez
+Dearman
+Dann
+Cull
+Crosson
+Creek
+Chronister
+Cassity
+Campion
+Callihan
+Butz
+Breazeale
+Blumenthal
+Billy
+Berkey
+Batty
+Batton
+Barge
+Arvizu
+Alexis
+Alderete
+Aldana
+Albaugh
+Abernethy
+Work
+Wolter
+Wille
+Tweed
+Tollefson
+Thomasson
+Teter
+Testerman
+Sproul
+Spates
+Southwick
+Soukup
+Skelly
+Senter
+Sealey
+Sawicki
+Sargeant
+Rossiter
+Rosemond
+Repp
+Pound
+Pink
+Pifer
+Ormsby
+Nickelson
+Naumann
+Morabito
+Monzon
+Millsaps
+Millen
+Mcelrath
+Marcoux
+Mantooth
+Madson
+Macneil
+Mackinnon
+Louque
+Leister
+Lampley
+Kushner
+Krouse
+Kirwan
+June
+Jessee
+Janson
+Jahn
+Jacquez
+Islas
+Hutt
+Holladay
+Hillyer
+Hepburn
+Hensel
+Harrold
+Guadalupe
+Gingrich
+Geis
+Gales
+Fults
+Finnell
+Ferri
+Featherston
+Epley
+Ebersole
+Eames
+Dunigan
+Drye
+Dismuke
+Devaughn
+Delorenzo
+Damiano
+Confer
+Collum
+Clower
+Clow
+Claussen
+Clack
+Caylor
+Cawthon
+Casias
+Carreno
+Carlo
+Bluhm
+Bingaman
+Bewley
+Belew
+Beckner
+Beamer
+Barefoot
+Auld
+Amey
+Wolfenbarger
+Wilkey
+Wicklund
+Waltman
+Villalba
+Valero
+Valdovinos
+Ung
+Ullrich
+Tyus
+Twyman
+Trost
+Tardif
+Tanguay
+Stripling
+Steinbach
+Shumpert
+Sasaki
+Sappington
+Sandusky
+Reinhold
+Reinert
+Quijano
+Pye
+Poor
+Placencia
+Pinkard
+Phinney
+Perrotta
+Pernell
+Parrett
+Oxendine
+Owensby
+Orman
+Nuno
+Mori
+Mcroberts
+Mcneese
+Mckamey
+Mccullum
+Markel
+Mardis
+Maines
+Lueck
+Lubin
+Lefler
+Leffler
+Lavery
+Larios
+Labarbera
+Kershner
+Josey
+Jeanbaptiste
+Izaguirre
+Hermosillo
+Haviland
+Hartshorn
+Hamlet
+Hafner
+Ginter
+Getty
+Franck
+Fiske
+Emmett
+Dufrene
+Doody
+Davie
+Dangerfield
+Dahlberg
+Cuthbertson
+Crone
+Coffelt
+Claus
+Chidester
+Chesson
+Cauley
+Caudell
+Cantara
+Campo
+Caines
+Bullis
+Bucci
+Brochu
+Bosco
+Bogard
+Bickerstaff
+Benning
+Arzola
+Antonelli
+Adkinson
+Zellers
+Wulf
+Worsley
+Woolridge
+Whitton
+Westerfield
+Walczak
+Vassar
+Truett
+Trueblood
+Trawick
+Townsley
+Topping
+Tobar
+Telford
+Sung
+Steverson
+Stagg
+Sitton
+Sill
+Sherrell
+Sergent
+Schoenfeld
+Sarabia
+Rutkowski
+Rubenstein
+Rigdon
+Prentiss
+Pomerleau
+Plumlee
+Phoenix
+Philbrick
+Peer
+Patty
+Patnode
+Oloughlin
+Obregon
+Nuss
+Napoleon
+Morell
+Moose
+Mikell
+Mele
+Mcinerney
+Mcguigan
+Mcbrayer
+Lore
+Lor
+Look
+Lollar
+Lakes
+Kuehl
+Kinzer
+Kamp
+Joplin
+Jacobi
+Howells
+Holstein
+Hedden
+Hassler
+Harty
+Halle
+Greig
+Granville
+Gouge
+Goodrum
+Gerhart
+Geier
+Geddes
+Gast
+Forehand
+Ferree
+Fendley
+Feltner
+Fang
+Esqueda
+Encarnacion
+Eichler
+Egger
+Edmundson
+Eatmon
+Dragon
+Doud
+Donohoe
+Donelson
+Dilorenzo
+Digiacomo
+Diggins
+Delozier
+Dejong
+Danford
+Crippen
+Coppage
+Cogswell
+Clardy
+Cioffi
+Cabe
+Brunette
+Bresnahan
+Bramble
+Blomquist
+Blackstone
+Biller
+Bevis
+Bevan
+Bethune
+Benbow
+Baty
+Basinger
+Balcom
+Andes
+Aman
+Aguero
+Adkisson
+Yandell
+Wilds
+Whisenhunt
+Weigand
+Weeden
+Voight
+Villar
+Trottier
+Tillett
+Suazo
+Setser
+Scurry
+Schuh
+Schreck
+Schauer
+Samora
+Roane
+Rinker
+Reimers
+Reason
+Ratchford
+Popovich
+Parkin
+Nichol
+Natal
+Melville
+Mcbryde
+Magdaleno
+Loehr
+Lockman
+Lingo
+Leduc
+Larocca
+Lao
+Lamere
+Laclair
+Krall
+Korte
+Koger
+Jumper
+Jalbert
+Hughs
+Higbee
+Henton
+Heaney
+Haith
+Gump
+Greeson
+Goodloe
+Gholston
+Gasper
+Gagliardi
+Fregoso
+Farthing
+Fabrizio
+Ensor
+Elswick
+Elgin
+Eklund
+Eaddy
+Drouin
+Dorton
+Dizon
+Derouen
+Delia
+Deherrera
+Davy
+Dark
+Dampier
+Cullum
+Culley
+Cowgill
+Cardoso
+Cardinale
+Brodsky
+Broadbent
+Brimmer
+Briceno
+Branscum
+Bolyard
+Boley
+Bennington
+Beadle
+Baur
+Ballentine
+Azure
+Aultman
+Augustus
+Asuncion
+Arciniega
+Aguila
+Aceves
+Yepez
+Yap
+Woodrum
+Wethington
+Weissman
+Veloz
+Trusty
+Troup
+Trammel
+Theodore
+Tarpley
+Stivers
+Steck
+Sprayberry
+Spraggins
+Spitler
+Spiers
+Sohn
+Seagraves
+Schiffman
+Rudnick
+Rizo
+Riccio
+Rennie
+Quinton
+Quackenbush
+Puma
+Plott
+Pearcy
+Parada
+Paiz
+Munford
+Moskowitz
+Mease
+Mcnary
+Mccusker
+Matt
+Lozoya
+Longmire
+Loesch
+Lasky
+Kuhlmann
+Krieg
+Koziol
+Kowalewski
+Konrad
+Kindle
+Jowers
+Jolin
+Jaco
+Hua
+Horgan
+Hine
+Hileman
+Hepner
+Heise
+Heady
+Hawkinson
+Hannigan
+Haberman
+Guilford
+Grimaldi
+Gilles
+Garton
+Gagliano
+Fruge
+Follett
+Fiscus
+Ferretti
+Ebner
+Easterday
+Eanes
+Dirks
+Dimarco
+Depalma
+Deforest
+Dance
+Cruce
+Craighead
+Christner
+Candler
+Cadwell
+Burchell
+Buettner
+Brinton
+Breed
+Brazier
+Brannen
+Brame
+Bova
+Bomar
+Blakeslee
+Belknap
+Bangs
+Balzer
+Athey
+Armes
+Alvis
+Alverson
+Alvardo
+Alter
+Zhao
+Yeung
+Yen
+Wheelock
+Westlund
+Wessels
+Volkman
+Threadgill
+Thelen
+Tandy
+Tague
+Ta
+Symons
+Swinford
+Sturtevant
+Straka
+Stier
+Stagner
+Segarra
+Seawright
+Sack
+Rutan
+Roux
+Ringler
+Riker
+Ramsdell
+Quattlebaum
+Purifoy
+Poulson
+Permenter
+Peloquin
+Pasley
+Pagel
+Osman
+Obannon
+Nygaard
+Nipper
+Newcomer
+Munos
+Motta
+Meadors
+Mcquiston
+Mcniel
+Mcmann
+Mccrae
+Mayne
+Matte
+Martine
+Lucy
+Legault
+Lechner
+Lack
+Kucera
+Krohn
+Kratzer
+Koopman
+Judson
+Jeske
+Horrocks
+Homes
+Hock
+Hibbler
+Hesson
+Hersh
+Harvin
+Halvorsen
+Griner
+Grindle
+Glen
+Gladstone
+Garofalo
+Frampton
+Forbis
+Fernando
+Eddington
+Diorio
+Dingus
+Dewar
+Desalvo
+Curcio
+Creasy
+Cortese
+Cordoba
+Connally
+Cluff
+Cascio
+Capuano
+Canaday
+Calabro
+Bussard
+Brayton
+Borja
+Bigley
+Arnone
+Arguelles
+Acuff
+Zamarripa
+Wooton
+Wolfgang
+Widner
+Wideman
+Threatt
+Thiele
+Templin
+Teeters
+Synder
+Swint
+Swick
+Sturges
+Stogner
+Stedman
+Spratt
+Six
+Siegfried
+Shetler
+Scull
+Savino
+Sather
+Rothwell
+Rook
+Rone
+Rolf
+Rhee
+Quevedo
+Privett
+Pouliot
+Poche
+Pickel
+Petrillo
+Pellegrini
+Peaslee
+Partlow
+Otey
+Nunnery
+Morelock
+Morello
+Meunier
+Messinger
+Mckie
+Mccubbin
+Mccarron
+Maria
+Lerch
+Lavine
+Laverty
+Lariviere
+Lamkin
+Kugler
+Krol
+Kissel
+Keeter
+Hummer
+Hubble
+Hickox
+Hetzel
+Hayner
+Hagy
+Hadlock
+Groh
+Gregorio
+Gottschalk
+Goodsell
+Gloria
+Gerry
+Gassaway
+Garrard
+Galligan
+Fye
+Firth
+Fenderson
+Feinstein
+Etienne
+Engleman
+Emrick
+Ellender
+Drews
+Doiron
+Degraw
+Deegan
+Dart
+Crissman
+Corr
+Cookson
+Coil
+Cleaves
+Charest
+Chapple
+Chaparro
+Castano
+Carpio
+Byer
+Bufford
+Bridgewater
+Bridgers
+Brandes
+Borrero
+Bonanno
+Aube
+Ancheta
+Abarca
+Abad
+Yung
+Yim
+Wooster
+Woodrow
+Wimbush
+Willhite
+Willams
+Wigley
+Weisberg
+Wardlaw
+Vigue
+Vanhook
+Unknow
+Torre
+Tasker
+Tarbox
+Strachan
+Standard
+Slover
+Shamblin
+Semple
+Schuyler
+Schrimsher
+Sayer
+Salzman
+Salomon
+Rubalcava
+Riles
+Rickey
+Reneau
+Reichel
+Rayfield
+Rabon
+Pyatt
+Prindle
+Poss
+Polito
+Plemmons
+Pesce
+Perrault
+Pereyra
+Ostrowski
+Nilsen
+Niemeyer
+Nick
+Munsey
+Mundell
+Moncada
+Miceli
+Meader
+Mcmasters
+Mckeehan
+Matsumoto
+Marron
+Marden
+Lizarraga
+Lingenfelter
+Lewallen
+Laurence
+Langan
+Lamanna
+Kovac
+Kinsler
+Kephart
+Keown
+Kass
+Kammerer
+Jeffreys
+Hysell
+Householder
+Hosmer
+Hardnett
+Hanner
+Guyette
+Greening
+Glazer
+Ginder
+Fromm
+Fortuna
+Fluellen
+Finkle
+Fey
+Fessler
+Essary
+Eisele
+Duren
+Dittmer
+Crochet
+Cosentino
+Cogan
+Coelho
+Cavin
+Carrizales
+Campuzano
+Brough
+Bow
+Bopp
+Bookman
+Bobb
+Blouin
+Beesley
+Battista
+Bascom
+Bakken
+Badgett
+Arneson
+Anselmo
+Albino
+Ahumada
+Agustin
+Woodyard
+Wolters
+Wireman
+Wilton
+Willison
+Warman
+Wan
+Waldrup
+Vowell
+Vantassel
+Vale
+Twombly
+Toomer
+Tennison
+Teets
+Tedeschi
+Swanner
+Swallow
+Stutz
+Stelly
+Sheehy
+Schermerhorn
+Scala
+Sandidge
+Salters
+Salo
+Saechao
+Roseboro
+Rolle
+Ressler
+Renz
+Renn
+Redford
+Raposa
+Rainbolt
+Pompey
+Pelfrey
+Orndorff
+Oney
+Nolin
+Nimmons
+Ney
+Nardone
+Myhre
+Morman
+Mines
+Menjivar
+Mcglone
+Mccammon
+Maxon
+Maris
+Marciano
+Manus
+Maiden
+Lowrance
+Lorenzen
+Lonergan
+Lollis
+Littles
+Lindahl
+Lansing
+Lamas
+Lach
+Kuster
+Krawczyk
+Knuth
+Knecht
+Kirkendall
+Keitt
+Keever
+Kantor
+Jarboe
+Hoye
+Houchens
+Holter
+Holsinger
+Hickok
+Herb
+Helwig
+Helgeson
+Heater
+Hassett
+Harner
+Hamman
+Hames
+Hadfield
+Goree
+Goldfarb
+Gaughan
+Gaudreau
+Gantz
+Gallion
+Frady
+Foti
+Flesher
+Ferrin
+Faught
+Engram
+Elbert
+Donegan
+Desouza
+Degroot
+Cutright
+Crowl
+Criner
+Coke
+Coan
+Clinkscales
+Chewning
+Chavira
+Catchings
+Carlock
+Bye
+Bulger
+Buenrostro
+Bramblett
+Brack
+Boulware
+Bordeaux
+Bookout
+Bitner
+Birt
+Baranowski
+Baisden
+Augustin
+Allmon
+Alberto
+Acklin
+Yoakum
+Wilbourn
+Whisler
+Weinberger
+Washer
+Vasques
+Vanzandt
+Vanatta
+Troxler
+Tomes
+Tindle
+Tims
+Throckmorton
+Thach
+Stpeter
+Stlaurent
+Stenson
+Spry
+Spitz
+Songer
+Snavely
+Sly
+Sleeper
+Shroyer
+Shortridge
+Shenk
+Sevier
+Seabrook
+Scrivner
+Saltzman
+Rosenberry
+Rockwood
+Robeson
+Roan
+Reiser
+Redwine
+Ramires
+Raber
+Profit
+Posner
+Popham
+Pipes
+Piotrowski
+Pinard
+Peterkin
+Pelham
+Peiffer
+Peay
+Peavey
+Nadler
+Musso
+Milo
+Millett
+Mestas
+Mcgowen
+Marques
+Marasco
+Manriquez
+Manos
+Mair
+Lipps
+Lesser
+Leiker
+Leeds
+Krumm
+Knorr
+Kinslow
+Kessel
+Kendricks
+Kelm
+Ito
+Irick
+Ickes
+Hurlburt
+Horta
+Hoekstra
+Heuer
+Helmuth
+Heatherly
+Hampson
+Hagar
+Haga
+Greenlaw
+Grau
+Godbey
+Gingras
+Gillies
+Gibb
+Gayden
+Gauvin
+Garrow
+Fontanez
+Florio
+Fleischman
+Finke
+Fasano
+Fan
+Faith
+Ezzell
+Ewers
+Eveland
+Eckenrode
+Duclos
+Drumm
+Dimmick
+Delancey
+Defazio
+Deacon
+Dashiell
+Damian
+Cusack
+Crowther
+Crigger
+Cray
+Coolidge
+Coldiron
+Cleland
+Chalfant
+Cassel
+Cape
+Camire
+Cabrales
+Broomfield
+Brittingham
+Brisson
+Brickey
+Braziel
+Brazell
+Bragdon
+Boulanger
+Bos
+Boman
+Bohannan
+Beem
+Barto
+Barre
+Barley
+Baptist
+Azar
+Ashbaugh
+Armistead
+Almazan
+Adamski
+Zendejas
+Winburn
+Willaims
+Wilhoit
+Westberry
+Wentzel
+Wendling
+Wager
+Visser
+Vanscoy
+Vankirk
+Vallee
+Tweedy
+Thornberry
+Sweeny
+Stalker
+Spradling
+Spano
+Smelser
+Shim
+Sechrist
+Schall
+Scaife
+Rugg
+Ruben
+Rothrock
+Roesler
+Riehl
+Ridings
+Render
+Ransdell
+Radke
+Pinero
+Petree
+Pendergast
+Peluso
+Pecoraro
+Pascoe
+Panek
+Oshiro
+Noon
+Navarrette
+Murguia
+Moores
+Moberg
+Mike
+Michaelis
+Mcwhirter
+Mcsweeney
+Mcquade
+Mccay
+Mauk
+Mariani
+Marceau
+Mandeville
+Maeda
+Lunde
+Ludlow
+Loeb
+Lindo
+Linderman
+Leveille
+Leith
+Larock
+Lambrecht
+Kulp
+Kinsley
+Kimberlin
+Kesterson
+Jacinto
+Ice
+Hui
+Hoyos
+Helfrich
+Hanke
+Hail
+Guillermo
+Grisby
+Goyette
+Gouveia
+Glazier
+Gile
+Gerena
+Gelinas
+Gasaway
+Garden
+Funches
+Fujimoto
+Flynt
+Fenske
+Fellers
+Fehr
+Eslinger
+Escalera
+Enciso
+Duley
+Dittman
+Dineen
+Diller
+Devault
+Dao
+Collings
+Clymer
+Clowers
+Chavers
+Charland
+Castorena
+Castello
+Camargo
+Bunce
+Bullen
+Boyes
+Borchers
+Borchardt
+Birnbaum
+Birdsall
+Billman
+Benites
+Bankhead
+Ange
+Ammerman
+Adkison
+Yuan
+Winegar
+Wickman
+Wear
+Warr
+Warnke
+Villeneuve
+Veasey
+Vassallo
+Vannatta
+Vadnais
+Twilley
+Truelove
+Towery
+Tomblin
+Tippett
+Theiss
+Talkington
+Talamantes
+Swart
+Swanger
+Streit
+Straw
+Stines
+Stabler
+Spurling
+Sobel
+Sine
+Simmers
+Shippy
+Shiflett
+Shearin
+Sauter
+Sanderlin
+Rusch
+Runkle
+Ruckman
+Rorie
+Roesch
+Roberto
+Richert
+Rehm
+Randel
+Ragin
+Quesenberry
+Puentes
+Plyler
+Plotkin
+Paugh
+Oshaughnessy
+Ohalloran
+Norsworthy
+Niemann
+Nader
+Moorefield
+Mooneyham
+Modica
+Miyamoto
+Mickel
+Mebane
+Mckinnie
+Mazurek
+Mancilla
+Lukas
+Lovins
+Loughlin
+Lotz
+Lindsley
+Liddle
+Levan
+Lederman
+Leclaire
+Lasseter
+Lapoint
+Lamoreaux
+Lafollette
+Kubiak
+Kirtley
+Keffer
+Kaczmarek
+Jennette
+Housman
+Honey
+Hiers
+Hibbert
+Herrod
+Hegarty
+Hathorn
+Harsh
+Greenhaw
+Grafton
+Govea
+Gardener
+Futch
+Furst
+Frisbee
+Fred
+Franko
+Forcier
+Foran
+Flickinger
+Fairfield
+Eure
+Emrich
+Embrey
+Edgington
+Ecklund
+Eckard
+Durante
+Deyo
+Delvecchio
+Deeds
+Dade
+Currey
+Cuff
+Creswell
+Cottrill
+Casavant
+Cartier
+Cargile
+Capel
+Cammack
+Calfee
+Buzzard
+Burse
+Burruss
+Brust
+Brousseau
+Bridwell
+Braaten
+Borkholder
+Bloomquist
+Bjork
+Bartelt
+Arp
+Amburgey
+Yeary
+Yao
+Whitefield
+Vinyard
+Vicente
+Vanvalkenburg
+Twitchell
+Timmins
+Tester
+Tapper
+Stringham
+Starcher
+Spotts
+Slaugh
+Simonsen
+Sheffer
+Sequeira
+Rosati
+Rode
+Rhymes
+Reza
+Record
+Quint
+Pollak
+Peirce
+Patillo
+Parkerson
+Paiva
+Nilson
+Nice
+Nevin
+Narcisse
+Nair
+Mitton
+Merriam
+Merced
+Meiners
+Mckain
+Mcelveen
+Mcbeth
+Marsden
+Marez
+Manke
+Mahurin
+Mabrey
+Luper
+Krull
+Kees
+Iles
+Hunsicker
+Hornbuckle
+Holtzclaw
+Hirt
+Hinnant
+Heston
+Hering
+Hemenway
+Hegwood
+Hearns
+Halterman
+Halls
+Guiterrez
+Grote
+Granillo
+Grainger
+Glasco
+Gilder
+Garren
+Garlock
+Garey
+Fu
+Fryar
+Fredricks
+Fraizer
+Foxx
+Foshee
+Ferrel
+Felty
+Feathers
+Everitt
+Evens
+Esser
+Elkin
+Eberhart
+Durso
+Duguay
+Driskill
+Doster
+Dewall
+Deveau
+Demps
+Demaio
+Delreal
+Deleo
+Delay
+Deem
+Darrah
+Cumberbatch
+Culberson
+Cranmer
+Cordle
+Colgan
+Chesley
+Cavallo
+Castellon
+Castelli
+Carreras
+Carnell
+Carmon
+Carmen
+Carlucci
+Bottom
+Bontrager
+Blumberg
+Blasingame
+Becton
+Ayon
+Artrip
+Arline
+Andujar
+Alkire
+Alder
+Agan
+Zukowski
+Zuckerman
+Zehr
+Wroblewski
+Wrigley
+Woodside
+Wigginton
+Westman
+Westgate
+Werts
+Washam
+Wardlow
+Walser
+Waiters
+Teller
+Tadlock
+Stuck
+Stringfield
+Stimpson
+Stickley
+Starbuck
+Standish
+Spurlin
+Spindler
+Speller
+Spaeth
+Sotomayor
+Sok
+Sluder
+Shryock
+Shepardson
+Shatley
+Scannell
+Santistevan
+Rosner
+Rolland
+Rhode
+Resto
+Reinhard
+Rathburn
+Prisco
+Poulsen
+Pinney
+Phares
+Pennock
+Pastrana
+Oviedo
+Ostler
+Noto
+Nauman
+Mulford
+Moise
+Moberly
+Mirabal
+Ming
+Metoyer
+Metheny
+Mentzer
+Meldrum
+Mcinturff
+Mcelyea
+Mcdougle
+Massaro
+Lumpkins
+Loveday
+Lofgren
+Loe
+Lirette
+Lesperance
+Lefkowitz
+Ledger
+Lauzon
+Lain
+Lachapelle
+Kurz
+Klassen
+Keough
+Kempton
+Kaelin
+Jeffords
+Im
+Huot
+Hsieh
+Hoyer
+Horwitz
+Hopp
+Hoeft
+Hennig
+Haskin
+Grill
+Gourdine
+Golightly
+Girouard
+Fulgham
+Fritsch
+Freer
+Frasher
+Foulk
+Firestone
+Fiorentino
+Fedor
+Feather
+Ensley
+Englehart
+Eells
+Ebel
+Dunphy
+Donahoe
+Dimas
+Dileo
+Dibenedetto
+Dabrowski
+Crick
+Coonrod
+Conder
+Coddington
+Chunn
+Choy
+Chaput
+Cerna
+Carreiro
+Calahan
+Braggs
+Bourdon
+Boner
+Bollman
+Bittle
+Ben
+Behm
+Bauder
+Batt
+Barreras
+Aubuchon
+Anzalone
+Adamo
+Zhou
+Zerbe
+Zachery
+Witty
+Wirt
+Willcox
+Westberg
+Weikel
+Waymire
+Vroman
+Vinci
+Vallejos
+Tutor
+Truesdell
+Troutt
+Trotta
+Tollison
+Toles
+Tichenor
+Tai
+Symonds
+Surles
+Sunday
+Strayer
+Stgeorge
+Sroka
+Sorrentino
+Solares
+Snelson
+Silvestri
+Sikorski
+Shawver
+Schumaker
+Schorr
+Schooley
+Scates
+Satterlee
+Satchell
+Sacks
+Rymer
+Roselli
+Robitaille
+Riegel
+Richer
+Regis
+Reames
+Provenzano
+Proper
+Priestley
+Plaisance
+Pettey
+Palomares
+Oman
+Nowakowski
+Nace
+Monette
+Minyard
+Mclamb
+Mchone
+Mccarroll
+Masson
+Marco
+Magoon
+Maddy
+Lundin
+Loza
+Licata
+Lesley
+Leonhardt
+Lema
+Landwehr
+Kircher
+Kinch
+Karpinski
+Johannsen
+Hussain
+Houghtaling
+Hoskinson
+Hollaway
+Holeman
+Hobgood
+Hilt
+Hiebert
+Gros
+Gram
+Goggin
+Gentle
+Geissler
+Gadbois
+Gabaldon
+Fleshman
+Flannigan
+Files
+Fairman
+Epp
+Eilers
+Dycus
+Dunmire
+Duffield
+Dowler
+Ditto
+Deloatch
+Dehaan
+Deemer
+Corner
+Clayborn
+Christofferso
+Chilson
+Chesney
+Chatfield
+Charlie
+Caster
+Carron
+Canale
+Camden
+Buff
+Brigman
+Branstetter
+Bosse
+Borton
+Bonar
+Blau
+Biron
+Beagle
+Barroso
+Arvin
+Arispe
+Zacharias
+Zabel
+Yaeger
+Works
+Woolford
+Whetzel
+Weakley
+Veatch
+Vandeusen
+Tufts
+Troxel
+Troche
+Traver
+Townsel
+Tosh
+Talarico
+Swilley
+Sterrett
+Stenger
+Springfield
+Speakman
+Sowards
+Sours
+Souders
+Souder
+Soles
+Sobers
+Snoddy
+Smither
+Sias
+Shute
+Shoaf
+Shahan
+Schuetz
+Scaggs
+Santini
+Rosson
+Rolen
+Robidoux
+Rentas
+Recio
+Pixley
+Pawlowski
+Pawlak
+Paull
+Pascal
+Overbey
+Orear
+Oliveri
+Oldenburg
+Nutting
+Naugle
+Mote
+Mossman
+Moor
+Misner
+Milazzo
+Michelson
+Mei
+Mcentee
+Mccullar
+Mccree
+Mcaleer
+Mazzone
+Maxim
+Marshal
+Mandell
+Manahan
+Malott
+Maisonet
+Mailloux
+Lumley
+Lowrie
+Louviere
+Lipinski
+Lindemann
+Leppert
+Leopold
+Leasure
+Leaf
+Labarge
+Kubik
+Knisely
+Knepp
+Kenworthy
+Kennelly
+Kelch
+Karg
+Kanter
+Ignacio
+Hyer
+Houchin
+Hosley
+Hosler
+Hollon
+Holleman
+Heitman
+Hebb
+Haggins
+Gwaltney
+Guin
+Greenman
+Goulding
+Gorden
+Goodyear
+Geraci
+Georges
+Gathers
+Frison
+Feagin
+Falconer
+Espada
+Erving
+Erikson
+Eisenhauer
+Eder
+Ebeling
+Durgin
+Drown
+Dowdle
+Dinwiddie
+Delcastillo
+Dedrick
+Crimmins
+Covell
+Cournoyer
+Coria
+Cohan
+Cataldo
+Carpentier
+Canas
+Campa
+Brode
+Brashears
+Blaser
+Bicknell
+Berk
+Bednar
+Barwick
+Ascencio
+Althoff
+Almodovar
+Alamo
+Zirkle
+Zabala
+Xu
+Wolverton
+Winebrenner
+Wetherell
+Westlake
+Wegener
+Weddington
+Vong
+Tuten
+Trosclair
+Trim
+Tressler
+Theroux
+Teske
+Sword
+Swinehart
+Swensen
+Sundquist
+Southall
+Socha
+Sizer
+Silverberg
+Shortt
+Shimizu
+Sherrard
+Shen
+Shaeffer
+Seth
+Scheid
+Scheetz
+Saravia
+Sanner
+Rubinstein
+Rozell
+Romer
+Ringo
+Rheaume
+Reisinger
+Raven
+Randles
+Pullum
+Petrella
+Payan
+Papp
+Pablo
+Nordin
+Norcross
+Nicoletti
+
<TRUNCATED>